MATLAB实现数字FIR的高通_和带通等滤波器的源程序[1]
- 格式:doc
- 大小:35.00 KB
- 文档页数:13
使用MATLAB进行数字滤波器设计的步骤与方法数字滤波器是用于信号处理的重要工具,它可以对信号进行去噪、频率调整等操作。
而MATLAB作为一种强大的数学计算软件,提供了丰富的数字信号处理工具箱,可以方便地进行数字滤波器的设计与仿真。
本文将介绍使用MATLAB进行数字滤波器设计的步骤与方法。
1. 了解数字滤波器的基本原理在进行数字滤波器设计之前,首先需要了解数字滤波器的基本原理。
数字滤波器根据其频率响应特性可以分为低通、高通、带通和带阻滤波器等。
此外,数字滤波器的设计还需要考虑滤波器的阶数、截止频率以及滤波器类型等因素。
在设计中,我们可以选择滤波器的类型和相应的参考模型,然后利用MATLAB工具箱提供的函数进行设计。
2. 导入MATLAB中的数字信号处理工具箱使用MATLAB进行数字滤波器设计需要先导入数字信号处理工具箱。
通过在MATLAB命令窗口输入`>> toolbox`即可打开工具箱窗口,并可以选择数字信号处理工具箱进行加载。
加载完成后,就可以调用其中的函数进行数字滤波器设计。
3. 设计数字滤波器在MATLAB中,常用的数字滤波器设计函数有`fir1`、`fir2`、`iirnotch`等。
这些函数可以根据系统特性需求设计相应的数字滤波器。
以FIR滤波器为例,可以使用`fir1`函数进行设计。
该函数需要输入滤波器的阶数和截止频率等参数,输出设计好的滤波器系数。
4. 评估滤波器性能设计好数字滤波器后,需要进行性能评估。
可以使用MATLAB提供的`fvtool`函数绘制滤波器的幅频响应、相频响应和群延迟等。
通过观察滤波器在频域的性能表现,可以判断设计的滤波器是否满足要求。
5. 对滤波器进行仿真在对滤波器性能进行评估之后,还可以使用MATLAB进行滤波器的仿真。
通过将需要滤波的信号输入设计好的滤波器中,观察输出信号的变化,可以验证滤波器的去噪效果和频率调整能力。
MATLAB提供了函数`filter`用于对信号进行滤波处理。
MATLAB窗函数法实现FIR的高通,带通和低通滤波器的程序MATLAB 学院:地球物理与石油资源学院班级:姓名:学号:班内编号:指导教师:完成日期:测井11001大牛啊啊啊陈义群2013年6月3日课程设计报告一、题目FIR滤波器的窗函数设计法及性能比较 1. FIR滤波器简介数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应滤波器和有限冲激响应滤波器。
与IIR滤波器相比,FIR滤波器的主要特点为: a. 线性相位;b.非递归运算。
2. FIR 滤波器的设计FIR滤波器的设计方法主要有三种:a.窗函数设计法;b.频率抽样发;c.最小平法抽样法;这里我主要讨论在MATLAB环境下通过调用信号分析与处理工具箱的几类窗函数来设计滤波器并分析与比较其性能。
窗函数法设计FIR滤波器的一般步骤如下: a. 根据实际问题确定要设计的滤波器类型; b. 根据给定的技术指标,确定期望滤波器的理想频率特性;c. 求期望滤波器的单位脉冲响应;d. 求数字滤波器的单位脉冲响应; e. 应用。
常用的窗函数有(1)Hanningwindoww(n)?[?((2)Hammingw indoww(n)?[?((3)Balckmanwindoww(n)?[ ?((4)KaiserwindowI0{?1?[2n/(N?1)]2}w(n )?RN(n)I0(?)式中I0(x)是零阶Bessel函数,可定义为()2?n4?n)?()]RN(n)N?1N?1()2?n)]RN(n)N ?1() ?nN?1)]RN(n)() (x/2)m2I0(x)?1??m!m?1? 当x?0时与矩形窗一致;当x?时与海明窗结果相同;当x?时与布莱克曼窗结果相同。
3.窗函数的选择标准 1. 较低的旁瓣幅度,尤其是第一旁瓣; 2. 旁瓣幅度要下降得快,以利于增加阻带衰减;3. 主瓣宽度要窄,这样滤波器过渡带较窄。
使⽤MATLAB设计FIR滤波器1. 采⽤fir1函数设计,fir1函数可以设计低通、带通、⾼通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。
语法形式:b = fir1(n, wn)b = fir1(n, wn, ‘ftype’)b = fir1(n, wn, ‘ftype’, window)b = fir1(n, wn, ‘ftype’, window, ‘noscale’)参数的意义及作⽤:b:返回的FIR滤波器单位脉冲响应,脉冲响应为偶对称,长度为n+1;n:滤波器的介数;wn:滤波器的截⽌频率,取值范围为0<wn<1,1对应信号采样频率⼀半。
如果wn是单个数值,且ftype参数为low,则表⽰设计截⽌频率为wn的低通滤波器,如果ftype参数为high,则表⽰设计截⽌频率为wn的⾼通滤波器;如果wn是有两个数组成的向量[wn1wn2],ftype为stop,则表⽰设计带阻滤波器,ftype为bandpass,则表⽰设计带通滤波器;如果wn是由多个数组成的向量,则根据ftype的值设计多个通带或阻带范围的滤波器,ftype为DC-1,表⽰设计的第⼀个频带为通带,ftype为DC-0,表⽰设计的第⼀个频带为阻带;window:指定使⽤的窗函数,默认为海明窗;noscale:指定是否归⼀化滤波器的幅度。
⽰例:N=41; %滤波器长度fs=2000; %采样频率%各种滤波器的特征频率fc_lpf=200;fc_hpf=200;fp_bandpass=[200 400];fc_stop=[200 400];%以采样频率的⼀半,对频率进⾏归⼀化处理wn_lpf=fc_lpf*2/fs;wn_hpf=fc_hpf*2/fs;wn_bandpass=fp_bandpass*2/fs;wn_stop=fc_stop*2/fs;%采⽤fir1函数设计FIR滤波器b_lpf=fir1(N-1,wn_lpf);b_hpf=fir1(N-1,wn_hpf,'high');b_bandpass=fir1(N-1,wn_bandpass,'bandpass');b_stop=fir1(N-1,wn_stop,'stop');%求滤波器的幅频响应m_lpf=20*log(abs(fft(b_lpf)))/log(10);m_hpf=20*log(abs(fft(b_hpf)))/log(10);m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);m_stop=20*log(abs(fft(b_stop)))/log(10);%设置幅频响应的横坐标单位为Hzx_f=0:(fs/length(m_lpf)):fs/2;%绘制单位脉冲响应%绘制单位脉冲响应subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)');subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)');subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)');subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)');%绘制幅频响应曲线subplot(422);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(424);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(426);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(428);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);2. 采⽤fir2函数设计,函数算法是:⾸先根据要求的幅频响应向量形式进⾏插值,然后进⾏傅⾥叶变换得到理想滤波器的单位脉冲响应,最后利⽤窗函数对理想滤波器的单位脉冲响应激进型截断处理,由此得到FIR滤波器系数。
用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法摘要介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法、FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的性能。
关键词 MATLAB,数字滤波器,有限冲激响应,窗函数,仿真1 前言数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。
2 FIR滤波器的窗函数设计法 FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。
窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:(1) 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。
(2) 由性能指标确定窗函数W(n)和窗口长度N。
(3) 求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。
(4) 检验滤波器性能。
本文将针对一个含有5Hz、15Hz和30Hz的混和正弦波信号,设计一个FIR带通滤波器,给出利用MATLAB实现的三种方法:程序设计法、 FDATool设计法和SPTool设计法。
参数要求:采样频率fs=100Hz,通带下限截止频率fc1=10 Hz,通带上限截止频率fc2=20 Hz,过渡带宽6 Hz,通阻带波动0.01,采用凯塞窗设计。
2 程序设计法MATLAB信号处理工具箱提供了各种窗函数、滤波器设计函数和滤波器实现函数。
FIR滤波器的MATLAB设计与实现FIR滤波器(Finite Impulse Response Filter)是一种数字滤波器,其特点是其响应仅由有限长度的序列决定。
在MATLAB中,我们可以使用信号处理工具箱中的函数来设计和实现FIR滤波器。
首先,需要明确FIR滤波器的设计目标,包括滤波器类型(低通、高通、带通、带阻)、通带和阻带的频率范围、通带和阻带的增益等。
这些目标将决定滤波器的系数及其顺序。
在MATLAB中,我们可以使用`fir1`函数来设计FIR滤波器。
该函数的使用方式如下:```matlabh = fir1(N, Wn, type);```其中,`N`是滤波器长度,`Wn`是通带边缘频率(0到0.5之间),`type`是滤波器的类型('low'低通、'high'高通、'bandpass'带通、'stop'带阻)。
该函数会返回一个长度为`N+1`的滤波器系数向量`h`。
例如,如果要设计一个采样频率为10kHz的低通滤波器,通带截止频率为2kHz,阻带频率为3kHz,可以使用以下代码:```matlabfc = 2000; % 通带截止频率h = fir1(50, fc/(fs/2), 'low');```上述代码中,`50`表示滤波器的长度。
注意,滤波器的长度越大,滤波器的频率响应越陡峭,但计算成本也更高。
在设计完成后,可以使用`freqz`函数来分析滤波器的频率响应。
例如,可以绘制滤波器的幅度响应和相位响应曲线:```matlabfreqz(h);```除了使用`fir1`函数外,MATLAB还提供了其他函数来设计FIR滤波器,如`fir2`、`firpm`、`firls`等,具体使用方式可以参考MATLAB的文档。
在实际应用中,我们可以将FIR滤波器应用于音频处理、图像处理、信号降噪等方面。
例如,可以使用FIR滤波器对音频信号进行去噪处理,或者对图像进行锐化处理等。
一、概述Matlab 是一种用于算法开发、数据分析和可视化的高级技术计算语言和交互式环境。
在信号处理领域,Matlab 是一种非常强大的工具,可以用来设计和实现数字滤波器。
本文将重点介绍如何使用 Matlab 过FIR (Finite Impulse Response) 数字滤波器设计。
二、FIR 数字滤波器概述FIR 数字滤波器是一种常见的数字滤波器,它的特点是其单位脉冲响应有限,并且没有反馈。
FIR 滤波器的频率响应可以通过其线性相位特性来描述,因此在许多应用中非常有用。
三、Matlab 中的 FIR 数字滤波器设计工具Matlab 中提供了许多用于数字滤波器设计的工具,其中包括 fdatool 和 fir1 函数。
1. fdatoolfdatool 是 Matlab 中的一个交互式工具,可以帮助用户设计各种类型的数字滤波器。
用户可以通过图形界面选择滤波器类型、滤波器阶数、截止频率等参数,并实时查看滤波器的频率响应和单位脉冲响应。
使用 fdatool 可以快速方便地设计出所需的 FIR 数字滤波器。
2. fir1 函数fir1 函数是 Matlab 中用于设计标准的低通、高通、带通和带阻 FIR数字滤波器的函数。
用户可以通过指定滤波器类型、截止频率、滤波器阶数等参数来调用 fir1 函数,从而得到所需的数字滤波器的系数。
四、利用 Matlab 设计 FIR 数字滤波器的步骤1. 确定滤波器类型首先要确定所需的数字滤波器的类型,包括低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
2. 确定滤波器的频率特性根据具体的应用需求,确定滤波器的截止频率、通带和阻带的大小,以及过渡带的宽度等参数。
3. 计算滤波器的系数根据所需的滤波器类型、频率特性和滤波器阶数等参数,使用 fdaool 工具或 fir1 函数计算出滤波器的系数。
4. 应用滤波器将得到的滤波器系数应用到需要滤波的信号上,即可得到滤波后的信号。
FIR数字滤波器的Matlab实现一、实验目的1、学习用窗函数法设计FIR数字滤波器的原理及其设计步骤;2、学习编写数字滤波器的设计程序的方法,并能进行正确编程;三、实验内容与步骤,阻带边界频率1、设计一FIR低通滤波器,通带边界频率π3.0Ω=pπ5.0,阻带衰减不小于50dB。
=Ωs程序代码与仿真图分别见下:clear all;Wp=0.3*pi;Ws=0.5*pi;tr_width=Ws-Wp;%过渡带宽度N=ceil(6.6*pi/tr_width)+1%滤波器长度n=0:1:N-1;Wc=(Ws+Wp)/2; %理想低通滤波器的截止频率hd=ideal_lp1(Wc,N); %理想低通滤波器的单位冲激响应w_ham=(hamming(N))';%海明窗h=hd.*w_ham; %截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]); %计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(1:1:Wp/delta_w+1))); %实际通带纹波As=-round(max(db(Ws/delta_w+1:1:501))); %实际阻带纹波subplot(2 2 1);stem(n,hd);title('理想单位脉冲响应hd(n)');subplot(2 2 2);stem(n,w_ham);title('海明窗w(n)');subplot(2 2 3);stem(n,h);title('实际单位脉冲响应hd(n)');10203040理想单位脉冲响应hd(n)010203040海明窗w(n)10203040实际单位脉冲响应hd(n)0.51-100-50幅度响应(dB)subplot(2 2 4);plot(w/pi,db);title('幅度响应(dB)');axis([0,1,-100,10]); function[db,mag,pha,w]=freqz_m2(b,a) [H,w]=freqz(b,a,1000,'whole'); H=(H(1:1:501))'; w=(w(1:1:501))';mag=abs(H); db=20*log10((mag+eps)/max(mag)); pha=angle(H);function hd=ideal_lp1(Wc,N);所调用的函数 alpha=(N-1)/2; n=0:1:N-1; m=n-alpha+eps; hd=sin(Wc*m)./(pi*m);2、设计一个数字带通滤波器,指标要求如下:通带边缘频率:π45.01=ΩP ,π65.02=ΩP ,通带峰值起伏:][1dB p ≤α。
摘要无限长脉冲数字滤波器的设计方法只考虑了幅度特性,没有考虑相位特性,所设的滤波器一般是某种确定的非线性相位特性。
有限脉冲响应(FIR)滤波器在保证了幅度特性满足技术要求的同时,很容易做到有严格的线性相位特性。
本课题利用MATLAB软件实现。
MATLAB是“矩阵实验室”(MATrix LABoratoy)的缩写,是一种科学计算软件,它使用方便,输入简捷,运算高效,内容丰富,因此利用MATLAB软件,通过一系列较为系统的函数法,根据已知的技术指标,就可以设计出满足要求的滤波器。
关键字:MATLAB;窗函数;FIR带阻数字滤波器;线性相位目录1.FIR滤波器简介 (3)1.1 FIR的特点 (3)2.2线性相位 (3)2.主要设计内容 (5)3.窗函数 (6)3.1常用窗函数 (6)3.2窗函数的指标 (9)4应用窗函数法设计 FIR 数字滤波器的步骤 (10)4.1数字高通滤波器的设计: (10)总结 (11)参考文献 (12)附录 (13)1.FIR 滤波器简介数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应(IIR )滤波器和有限冲激响应(FIR )滤波器。
1.1 FIR 的特点FIR 滤波器的主要优点为:系统总是稳定的,FIR 滤波器的系统函数可以表示为 (2-1) 易知,H (z ) 在 Z 平面上有 N -1个零点,z =0 是 N -1 阶极点,因此FIR 系统总是稳定的(极点都在单位圆内)。
FIR 滤波器的优点之二:容易实现线性相位。
当 FIR 系统的单位冲激响应满足 时,该系统具有线性相位。
(N 为奇数) (2-2)(N 为偶数) (2-3) FIR 滤波器的优点之三:允许设置多通带(或多阻带)滤波器。
FIR 滤波器的优点之四:FIR 滤波器可以采用 FFT 方法实现其功能,从而大大提高效率。
利用汉宁窗设计Ⅰ型数字高通滤波器clear all。
Wp=0.6*pi。
Ws=0.4*pi。
tr_width=Wp-Ws。
%过渡带宽度N=ceil(6.2*pi/tr_width) %滤波器长度n=0:1:N-1。
Wc=(Ws+Wp)/2。
%理想低通滤波器的截止频率hd=ideal_hp1(Wc,N)。
%理想低通滤波器的单位冲激响应w_han=(hanning(N))'。
%汉宁窗h=hd.*w_han。
%截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1])。
%计算实际滤波器的幅度响应delta_w=2*pi/1000。
Ap=-(min(db(Wp/delta_w+1:1:501))) %实际通带纹波As=-round(max(db(1:1:Ws/delta_w+1))) %实际阻带纹波subplot(221)stem(n,hd)title('理想单位脉冲响应hd(n)')subplot(222)stem(n,w_han)title('汉宁窗w(n)')subplot(223)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])clear all。
Wp=0.6*pi。
Ws=0.4*pi。
tr_width=Wp-Ws。
%过渡带宽度N=ceil(6.2*pi/tr_width) %滤波器长度n=0:1:N-1。
Wc=(Ws+Wp)/2。
%理想低通滤波器的截止频率hd=ideal_hp1(Wc,N)。
%理想低通滤波器的单位冲激响应w_han=(hanning(N))'。
%汉宁窗h=hd.*w_han。
%截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1])。
第7章 FIR 数字滤波器的Matlab 实现之南宫帮珍创作7.1 实验目的●学习用窗函数法设计FIR 数字滤波器的原理及其设计步伐;●学习编写数字滤波器的设计法式的方法, 并能进行正确编程;●根据给定的滤波器指标, 给出设计步伐.7.2 实验原理及实例分析FIR 低通数字滤波器的设计原理如果系统的冲激响应)(n h d 为已知, 则系统的输入/输出关系为:对低通滤波器, 只要设计出低通滤波器的冲激响应函数, 就可以由上式获得系统的输出了.假设所希望的数字滤波器的频率响应为)(jw d e H , 它是频域的周期函数, 周期为2 , 那么它与)(jwd e H 相对应的傅立叶系数为以)(n h d 为冲激响应的数字滤波器将具有频域响)(jwd e H . 可是将)(n h d 作为滤波器脉冲响应有两个问题:(1)它是无限长的, 与FIP 滤波器脉冲响应有限长这一前提纷歧致(2)它是非因果的, 0,0)(<≠n n h d对此, 要采用以下的办法,(1)将)(n h d 截短 (2)将其往右平移,由此获得)(2n h 的实际频域响应jnwN n jwd e n h e H ∑-==102)()(, 与理想频域响应)(jw de H 相近, 但不完全一致.理论证明上述现象是对)(n h d 进行简单截长处置的肯定结果, 一般称为吉布斯现象, 为尽可能的减少吉布斯现象, 应对)(n h d 进行加窗截取, 即以)()()(n W n h n h N d ⋅=作为FIR 滤波器的系数.经常使用的窗函数有矩形窗、海明窗和布莱克曼窗等. 用窗函数法设计FIR 滤波器Matlab 设计FIR 滤波器有多种方法和对应的函数, 见表7-1.表7-1 matlab 设计FIR 滤波器的方法和函数窗函数方法不单在数字滤波器的设计中占有重要的位置, 同时可以用于功率谱的估计, 从根本上讲, 使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs 现象所带来的影响.窗函数设计线性相位FIR 滤波器步伐如下:(1) 确定命字滤波器的性能要求, 临界频率}{k w , 滤波器单元脉冲响应长度N(2) 根据性能要求, 合理选择单元脉冲响应h(n)的奇偶对称性, 从而确定理想频率响应)(jwd e H 的幅频特性和相频特性(3) 求理想单元脉冲响应)(n h d , 在实际计算中, 可对)(jwd e H 采样, 并对其求IDFT 的)(n h M , 用)(n h M 取代)(n h d(4) 选择适当的窗函数w (n ), 根据)()()(n W n h n h N d ⋅=求所需设计的FIR 滤波器单元脉冲响应(5) 求)(jwd e H , 分析其幅频特性, 若不满足要求, 可适当改变窗函数形式或长度N, 重复上述设计过程, 以获得满意的结果调用格式:a) b=fir1(N,wn)b)b=fir1(N,wn,’hign ’)N 为滤波器的阶次, wn 是通带截止频率, 其值在0~1之间, 1对应抽样频率的一半;b 是设计好的滤波器系数h(n).对格式a), 若wn 是标量, 则用来设计低通滤波器, 若wn 是1×L 的向量, 则用来设计带通(带阻)滤波器.其格式为: b=fir1(N,wn,’DC-1’)或b=fir1(N,wn,’DC-0’),其中, 前者保证第一个带为通带, 后者保证第一个带为阻带. b )用来设计高通滤波器.用于发生窗函数的matlab 文件有如下8个: bartlett.m(巴特利特窗) blackman.m(布莱克曼窗)rectangle.m(矩形窗) hamming.m (汉明窗) hanning.m (汉宁窗) triang.m(三角窗)chebwin.m (切比雪夫窗) Kaiser.m (凯泽窗)π, 使用具有30dB 波纹的chebyshev 窗.解:源法式如下:b=fir1(34,0.48,'high',chebwin(35,30));freqz(b,1,512) 其响应波形如图7-1所示.图7-1 带通FIR 滤波器【实例7-2】设计一个24阶FIR 带通滤波器, 通带频率0.350.65w ππ≤≤.解:源法式如下: wn=[0.35 0.65]; N=24;b=fir1(2*N,wn,'DC-0');% DC-0暗示第一个带为阻带, 这样设计出来的滤波器为带通滤波器. freqz(b,1,512)图7-2 带通FIR 滤波器【实例7-3】 设计具有下面指标的低通FIR 滤波器由于其最小阻带衰减为50dB, 因此可以选择hamming窗来实现这个滤波器, 因为它具有较小的过渡带.解:MATLAB源法式为%数字滤波器指标wp=0.2*pi;ws=0.3*pi;tr_width=ws-wp;%通带宽度N=ceil(6.6*pi/tr_width)+1;%滤波器长度if rem(N,2)==0N=N+1;endNw=N;%滤波器长度为奇数n=[0:1:Nw-1];wc=(ws+wp)/2;%截止频率alpha=(Nw-1)/2;m=n-alpha+0.00001;%如果不加0.00001, 当n= alpha时, m为0, 下式分母为0, 不能执行hd=sin(wc*m)./(pi*m);%理想滤波器的冲激响应% 生成hamming窗w_ham=(hamming(Nw))';% 频域图像的绘制h=hd.*w_ham;% 滤波器实际冲激响应freqz (h,[1])figure(2);subplot(2,2,1),stem(n,hd);title('理想脉冲响应') axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('hd(n)') subplot(2,2,2),stem(n,w_ham);title('hamming窗') axis([0 Nw-1 -0.3 1.2]);xlabel('n');ylabel('w(n)') subplot(2,2,3),stem(n,h);title('实际脉冲响应')axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('h(n)')其响应波形如图7-2所示.图7-3hamming窗函数设计FIR滤波器【实例7-4】设带通滤波器的指标为选择Blackman窗来实现这个滤波器.解:MATLAB源法式为% 数字滤波器指标ws1=0.2*pi;wp1=0.35*pi;ws2=0.65*pi;wp2=0.8*pi;As=60;tr_width=min((wp1-ws1),(wp2-ws2));% 过渡带带宽N=ceil(11*pi/tr_width)+1;if rem(N,2)==0N=N+1;endNw=N;n=[0:1:Nw-1];wc1=(ws1+wp1)/2;wc2=(ws2+wp2)/2;alpha=(Nw-1)/2;m=n-alpha+0.00001;%如果不加0.00001, 当n= alpha时, m为0, 下式分母为0, 不能执行hd=sin(wc2*m)./(pi*m)-sin(wc1*m)./(pi*m);%理想滤波器的冲激响应% 生成blackman窗w_bla=(blackman(M))';h=hd.*w_bla;% 频域图像的绘制freqz(h,[1])figure(2);subplot(2,2,1),stem(n,hd);title('idael impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('hd(n)')subplot(2,2,2),stem(n,w_bla);title('blackman window')axis([0 Nw-1 0 1.1]);xlabel('n');ylabel('w(n)')subplot(2,2,3),stem(n,h);title('actual impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('h(n)')其响应波形如图7-4所示.图7-4blackman 窗函数设计FIR 滤波器7.3编程练习1. 设计一个48阶FIR 带阻滤波器, 通带频率00.35,0.65w w πππ≤≤≤≤.2.用窗函数设计一个线性相位FIR 高通滤波器, 并满足性能指标:通带鸿沟频率0.66wp π=,阻带鸿沟频率0.5ws π=, 阻带衰减不小于40db.提示:参考例7-3, 4;首先根据阻带衰减, 选择合适的窗函数, 见课本P342, 表7-3.再根据P345, 式7-74写出理想滤波器的冲激响应hd.。
实验八 用MATLAB 设计FIR 数字滤波器(二)一、实验目旳:1、加深对窗函数法设计FIR 数字滤波器旳基本原理旳理解。
2、学习用MATLAB 语言旳窗函数法编写设计FIR 数字滤波器旳程序。
3、理解MATLAB 语言有关窗函数法设计FIR 数字滤波器旳常用函数用法。
二、实验原理:1、用窗函数法设计FIR 数字滤波器 FIR 数字滤波器旳系统函数为N-1-n n=0H(z)=h(n)z ∑这个公式也可以当作是离散LSI 系统旳系统函数M-m -1-2-mmm=0012m N -1-2-k-k12k k k=1bz b +b z +b z ++b z Y(z)b(z)H(z)====X(z)a(z)1+a z +a z ++a z1+a z ∑∑ 分母a 0为1,其他a k 全都为0时旳一种特例。
由于极点所有集中在零点,稳定和线性相位特性是FIR 滤波器旳突出长处,因此在实际中广泛使用。
FIR 滤波器旳设计任务是选择有限长度旳h(n),使传播函数H(e j ω)满足技术规定。
重要设计措施有窗函数法、频率采样法和切比雪夫等波纹逼近法等。
本实验重要简介窗函数法。
用窗函数法设计FIR 数字滤波器旳基本环节如下:(1)根据过渡带和阻带衰减指标选择窗函数旳类型,估算滤波器旳阶数N 。
(2)由数字滤波器旳抱负频率响应H(e j ω)求出其单位脉冲响应h d (n)。
可用自定义函数ideal_lp实现抱负数字低通滤波器单位脉冲响应旳求解。
程序清单如下:function hd=ideal_lp(wc,N) %点0到N-1之间旳抱负脉冲响应%wc=截止频率(弧度)%N=抱负滤波器旳长度tao=(N-1)/2;n=[0:(N-1)];m=n-tao+eps; %加一种小数以避免0作除数hd=sin(wc*m)./(pi*m);其他选频滤波器可以由低通频响特性合成。
如一种通带在ωc1~ωc2之间旳带通滤波器在给定N值旳条件下,可以用下列程序实现:Hd=ideal_lp(wc2,N)-ideal_lp(wc1,N)(3)计算数字滤波器旳单位冲激响应h(n)=w(n)h d(n)。
【关键字】设计淮北师范大学信息学院2 012届学士学位论文FIR数字滤波器在MATLAB中的实现系别:专业:学号:姓名:指导教师:指导教师职称:10 日FIR数字滤波器在MATLAB中的实现姓名学校名邮编摘要数字滤波器是由数字乘法器、加法器和延时单元组成的一种装置。
数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。
近年来数字滤波在通信、图像编码、语言编码、雷达等许多领域中有着十分广泛的应用。
本文首先介绍了数字滤波器的研究背景及其发展现状,然后介绍了FIR数字滤波器的设计原理。
在理解设计方法的基础上,最后基于MA TLAB软件利用窗函数法实现了FIR数字带通滤波器的设计。
仿真结果表明,所设计的滤波器具有良好的滤波器特性,所设计的指标符合设计任务要求。
关键词MATLAB;FIR数字滤波器;窗函数;带通滤波器Realization of FIR Digital Filter Based On matlabName###########################Abstract Digital Filter is a kind of instrument which is assembled with Digital multiplier, adder, and delay element , the function of the Digital Filter is operating and dealing with the digital code of discrete signal which is inputted to change the frequency spectrum . In recent years , Digital Filter is widely applied to all kinds of areas, such as Signal communication, image coding ,language coding ,radar and so on.This paper firstly introduces the studying background and current developing status of Digital FIR Filter, and then shows its design principle .Finally we realize the design of FIR Bandpass Digital Filter with Window Function based MATLAB software at the basement of understanding design methods. The outcome of simulation indicates that the Digital Filter does well in meeting the filter characters, at the same time ,indexes from the filter complies with the design requirements. Keywords MATLAB; FIR Filter; Window Function Design; Band Pass Filter目次1 引言在线性系统中,信号滤波过程一般定义为,当输入波形通过一个系统时,对它作一个线性运算,在时间域上这种变换如像内插,外插微分和积分,在频率域上这种变换则如低通滤波或平滑,带通滤波,谱设计和谱分析。
matlab的fir滤波器设计FIR(Finite Impulse Response)滤波器是指响应有限长度序列输入的数字滤波器,它可以用于信号去噪、信号滤波和信号重构等领域。
MATLAB软件是目前应用广泛的数学软件工具箱,它可以实现数字信号处理、信号滤波和滤波器设计等功能。
下面我们来分步骤解析如何利用MATLAB完成FIR滤波器设计。
第一步,确定滤波器参数要设计FIR滤波器,需要明确设计的目的,例如信号去噪还是信号滤波。
同时,需要确定滤波器的参数,包括滤波器的采样率、通带边界、阻带边界等。
第二步,调用MATLAB工具箱并加载数据打开MATLAB软件,选择Digital Signal Processing Toolbox,调用fir1函数,该函数用于设计一般的低通、高通、带通和带阻FIR 滤波器。
加载需要滤波的数据,并将其存储在一个变量中。
第三步,进行滤波器设计在MATLAB命令行窗口中输入以下命令,来进行FIR滤波器的设计。
h = fir1(N, Wn, 'type');其中,N是滤波器的阶数,Wn是正规化的截止频率值,type是滤波器的类型,可以是低通、高通、带通和带阻滤波器。
例如,我们要设计一个30阶的低通滤波器,带通频带为0.3至0.7,采样率为1000Hz,输入以下命令:N = 30;Wn = [0.3 0.7];Btype = 'low';FIR_filter = fir1(N, Wn, Btype);第四步,使用FIR滤波器进行滤波使用filter函数,可以将设计好的FIR滤波器应用到加载的数据上,进行滤波操作。
Y_filtered = filter(FIR_filter, 1, X);其中,FIR_filter是设计好的FIR滤波器,X是加载的待滤波数据,Y_filtered是经过滤波器处理后的数据。
第五步,可视化输出结果通过绘制函数将滤波器的输入和输出信号进行可视化处理,观察滤波效果。
用MATLAB设计低通,带通,高通和带阻FIR数字滤波器急!!!!悬赏分:30 - 解决时间:2006-11-1 20:56(1)低通滤波器的技术指标:H(ejw)=1,0<w<0.3pi; H(ejw)=0,0.3pi<w<pi.(2)带通滤波器的技术指标:H(ejw=0,0<w<0.4pi; H(ejw)=1;0.4pi<w<0.6pi;H(ejw)=0,0.6<w<pi;(3)高通滤波器的技术指标:H(ejw)=0,0<w<0.7pi; H(ejw)=1,0.7pi<w<pi.(4)带阻滤波器的技术指标:H(ejw)=1,0<w<0.3pi; H(ejw)=0;0.3pi<w<0.7pi;H(ejw)=1,0.7<w<pi;提问者:wwce520 - 魔法学徒一级最佳答案低通采样定理实验1.1 实验目的1.了解数字信号处理系统的一般构成;2.掌握奈奎斯特抽样定理。
1.2 实验仪器1.YBLD智能综合信号源测试仪1台2.双踪示波器1台3.MCOM-TG305数字信号处理与现代通信技术实验箱1台4.PC机(装有MATLAB、MCOM-TG305配套实验软件)1台1.3 实验原理一个典型的DSP系统除了数字信号处理部分外,还包括A/D和D/A两部分。
这是因为自然界的信号,如声音、图像等大多是模拟信号,因此需要将其数字化后进行数字信号处理,模拟信号的数字化即称为A/D 转换。
数字信号处理后的数据可能需还原为模拟信号,这就需要进行D/A转换。
一个仅包括A/D和D/A两部分的简化数字信号处理系统功能如图1所示。
A/D转换包括三个紧密相关的过程,即抽样、量化和编码。
A/D转换中需解决的以下几个重要问题:抽样后输出信号中还有没有原始信号的信息?如果有能不能把它取出来?抽样频率应该如何选择?奈奎斯特抽样定理(即低通信号的均匀抽样定理)告诉我们,一个频带限制在0至fx以内的低通信号x(t),如果以fs≥2fx的抽样速率进行均匀抽样,则x(t)可以由抽样后的信号xs(t)完全地确定,即xs(t)包含有x(t)的成分,可以通过适当的低通滤波器不失真地恢复出x(t)。
利用汉宁窗设计Ⅰ型数字高通滤波器clear all;Wp=0.6*pi;Ws=0.4*pi;tr_width=Wp-Ws; %过渡带宽度N=ceil(6.2*pi/tr_width) %滤波器长度n=0:1:N-1;Wc=(Ws+Wp)/2; %理想低通滤波器的截止频率hd=ideal_hp1(Wc,N); %理想低通滤波器的单位冲激响应w_han=(hanning(N))'; %汉宁窗h=hd.*w_han; %截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]); %计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(Wp/delta_w+1:1:501))) %实际通带纹波As=-round(max(db(1:1:Ws/delta_w+1))) %实际阻带纹波subplot(221)stem(n,hd)title('理想单位脉冲响应hd(n)')subplot(222)stem(n,w_han)title('汉宁窗w(n)')subplot(223)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])clear all;Wp=0.6*pi;Ws=0.4*pi;tr_width=Wp-Ws; %过渡带宽度N=ceil(6.2*pi/tr_width) %滤波器长度n=0:1:N-1;Wc=(Ws+Wp)/2; %理想低通滤波器的截止频率hd=ideal_hp1(Wc,N); %理想低通滤波器的单位冲激响应w_han=(hanning(N))'; %汉宁窗h=hd.*w_han; %截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]); %计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(Wp/delta_w+1:1:501))) %实际通带纹波As=-round(max(db(1:1:Ws/delta_w+1))) %实际阻带纹波subplot(221)title('理想单位脉冲响应hd(n)')subplot(222)stem(n,w_han)title('汉宁窗w(n)')subplot(223)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])基于切比雪夫一致逼近法设计FIR数字低通滤波器clear all;f=[0 0.6 0.7 1]; %给定频率轴分点A=[1 1 0 0]; %给定在这些频率分点上理想的幅频响应weigh=[1 10]; %给定在这些频率分点上的加权b=remez(32,f,A,weigh); %设计出切比雪夫最佳一致逼近滤波器[h,w]=freqz(b,1,256,1);h=abs(h);h=20*log10(h);subplot(211)stem(b,'.');grid;title('切比雪夫逼近滤波器的抽样值')subplot(212)plot(w,h);grid;title('滤波器幅频特性(dB)')利用汉宁窗设计Ⅰ型数字带阻滤波器clear all;Wpl=0.2*pi;Wph=0.8*pi;Wsl=0.4*pi;Wsh=0.6*pi;tr_width=min((Wsl-Wpl),(Wph-Wsh)); %过渡带宽度N=ceil(6.2*pi/tr_width) %滤波器长度Wcl=(Wsl+Wpl)/2; %理想低通滤波器的截止频率Wch=(Wsh+Wph)/2;hd=ideal_bs(Wcl,Wch,N); %理想低通滤波器的单位冲激响应w_hann=(hanning(N))'; %汉宁窗h=hd.*w_hann; %截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]); %计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(1:1:Wpl/delta_w+1))) %实际通带纹波As=-round(max(db(Wsl/delta_w+1:1:Wsh/delta_w+1))) %实际阻带纹波subplot(221)stem(n,hd)title('理想单位脉冲响应hd(n)')subplot(222)stem(n,w_hann)title('汉宁窗w(n)')subplot(223)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])利用三角窗设计Ⅲ型数字带通滤波器clear all;Wpl=0.4*pi;Wph=0.6*pi;Wsl=0.2*pi;Wsh=0.8*pi;tr_width=min((Wpl-Wsl),(Wsh-Wph));%过渡带宽度N=ceil(6.1*pi/tr_width)%滤波器长度n=0:1:N-1;Wcl=(Wsl+Wpl)/2;%理想低通滤波器的截止频率Wch=(Wsh+Wph)/2;hd=ideal_bp2(Wcl,Wch,N);%理想低通滤波器的单位冲激响应w_tri=(triang(N))';%三角窗h=hd.*w_tri;%截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]);%计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(Wpl/delta_w+1:1:Wph/delta_w+1))) %实际通带纹波As=-round(max(db(Wsh/delta_w+1:1:501))) %实际阻带纹波subplot(221)stem(n,hd)title('理想单位脉冲响应hd(n)')subplot(222)stem(n,w_tri)title('三角窗w(n)')subplot(223)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])利用布拉克曼窗设计Ⅱ型数字带通滤波器clear all;Wpl=0.4*pi;Wph=0.6*pi;Wsl=0.2*pi;Wsh=0.8*pi;tr_width=min((Wpl-Wsl),(Wsh-Wph)); %过渡带宽度N=ceil(11*pi/tr_width)+1%滤波器长度n=0:1:N-1;Wcl=(Wsl+Wpl)/2;%理想低通滤波器的截止频率Wch=(Wsh+Wph)/2;hd=ideal_bp1(Wcl,Wch,N);%理想低通滤波器的单位冲激响应w_bman=(blackman(N))';%布拉克曼窗h=hd.*w_bman;%截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]);%计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(Wpl/delta_w+1:1:Wph/delta_w+1))) %实际通带纹波As=-round(max(db(Wsh/delta_w+1:1:501))) %实际阻带纹波subplot(221)stem(n,hd)title('理想单位脉冲响应hd(n)')subplot(222)stem(n,w_bman)title('布拉克曼窗w(n)')subplot(223)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])利用海明窗设计Ⅱ型数字低通滤波器clear all;Wp=0.2*pi;Ws=0.4*pi;tr_width=Ws-Wp; %过渡带宽度N=ceil(6.6*pi/tr_width)+1 %滤波器长度n=0:1:N-1;Wc=(Ws+Wp)/2; %理想低通滤波器的截止频率hd=ideal_lp1(Wc,N); %理想低通滤波器的单位冲激响应w_ham=(hamming(N))'; %海明窗h=hd.*w_ham; %截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]); %计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(1:1:Wp/delta_w+1))) %实际通带纹波As=-round(max(db(Ws/delta_w+1:1:501))) %实际阻带纹波subplot(221)stem(n,hd)title('理想单位脉冲响应hd(n)')subplot(222)stem(n,w_ham)title('海明窗w(n)')subplot(223)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])%--------------------------------------------------------function[db,mag,pha,w]=freqz_m2(b,a)%滤波器的幅值响应(相对、绝对)、相位响应%db:相对幅值响应%mag:绝对幅值响应%pha: 相位响应%w 采样频率;%b 系统函数H(z)的分子项(对FIR,b=h)%a 系统函数H(z)的分母项(对FIR,a=1)[H,w]=freqz(b,a,1000,'whole');H=(H(1:1:501))';w=(w(1:1:501))';mag=abs(H); %绝对幅值响应db=20*log10((mag+eps)/max(mag)); %相对幅值响应pha=angle(H); %相位响应利用模拟Butterworth滤波器设计数字低通滤波器% exa4-8_pulseDF for example4-8% using Butterworth analog lowpass filter to design digital lowpass filter %利用模拟Butterworth滤波器设计数字低通滤波器%脉冲响应不变法wp=0.2*pi;ws=0.3*pi;Rp=1;As=15;T=1;%性能指标Rip=10^(-Rp/20);Atn=10^(-As/20);OmgP=wp*T;OmgS=ws*T;[N,OmgC]=buttord(OmgP,OmgS,Rp,As,'s');%选取模拟滤波器的阶数[cs,ds]=butter(N,OmgC,'s'); %设计出所需的模拟低通滤波器[b,a]=impinvar(cs,ds,T); %使用脉冲响应不变法进行转换%求得相对、绝对频响及相位、群迟延响应[db,mag,pha,grd,w]=freqz_m(b,a);%下面绘出各条曲线subplot(2,2,1);plot(w/pi,mag);title('幅频特性');xlabel('w(/pi)');ylabel('|H(jw)|');axis([0,1,0,1.1]);set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);set(gca,'YTickMode','manual','YTick',[0 Atn Rip 1]);gridsubplot(2,2,2);plot(w/pi,db);title('幅频特性(dB)');xlabel('w(/pi)');ylabel('dB');axis([0,1,-40,5]);set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);set(gca,'YTickMode','manual','YTick',[-40 -As -Rp 0]);gridsubplot(2,2,3);plot(w/pi,pha/pi);title('相频特性');xlabel('w(/pi)');ylabel('pha(/pi)');axis([0,1,-1,1]);set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);gridsubplot(2,2,4);plot(w/pi,grd);title('群延迟');xlabel('w(/pi)');ylabel('Sample');axis([0,1,0,12]);set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);gridfunction[db,mag,pha,grd,w]=freqz_m(b,a)%滤波器幅值响应(绝对、相对)、相位响应及群延迟%Usage: [db,mag,pha,grd,w]=freqz_m(b,a) %500点对应[0,pi]%db 相对幅值响应;mag 绝对幅值响应;pha 相位响应;grd 群延迟响应%w 采样频率;b 系统函数H(z)的分子项(对FIR,b=h)%a 系统函数H(z)的分母项(对FIR,a=1)[H,w]=freqz(b,a,500);%500点的复频响应mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(b,a,w);基于频域抽样法的FIR数字带阻滤波器设计clear all;N=41;T1=0.598;alpha= (N-1)/2;l=0:N-1;wl= (2*pi/N)*l;Hrs=[ones(1,6),T1,zeros(1,7),T1,ones(1,11),T1,zeros(1,7),T1,ones(1,6)]; %理想振幅采样响应Hdr=[1,1,0,0,1,1];wdl=[0,0.3,0.3,0.7,0.7,1];k1=0:floor((N-1)/2);k2=floor((N-1)/2)+1:N-1;angH=[pi/2-alpha*(2*pi)/N*(k1+0.5),-pi/2+alpha*(2*pi)/N*(N-k2-0.5)]; %相位约束条件Hdk=Hrs.*exp(j*angH); %构成Hd(k)h1=ifft(Hdk,N);n=0:1:N-1;h=real(h1.*exp(j*pi*n/N)); %实际单位冲激响应[db,mag,pha,w]=freqz_m2(h,[1]);[Hr,ww,a,L]=hr_type3(h); %实际振幅响应subplot(221)plot(wl/pi+1/N,Hrs,'.',wdl,Hdr)title('频率样本Hd(k) :N=41')axis([0 1 -0.1 1.2])subplot(222)stem(l,h)title('实际单位脉冲响应h(n)')subplot(223)plot(ww/pi,Hr,wl/pi+1/N,Hrs,'.')title('实际振幅响应H(w)')axis([0 1 -0.1 1.2])subplot(224)plot(w/pi,db)title('幅度响应(dB)')axis([0 1 -80 10])function [db,mag,pha,w] = freqz_m(b,a);%滤波器的幅值响应(相对、绝对)、相位响应%db:相对幅值响应%mag:绝对幅值响应%pha: 相位响应%w 采样频率;%b 系统函数H(z)的分子项(对FIR,b=h)%a 系统函数H(z)的分母项(对FIR,a=1)[H,w] = freqz(b,a,1000,'whole');H = (H(1:1:501))'; w = (w(1:1:501))';mag = abs(H);db = 20*log10((mag+eps)/max(mag));pha = angle(H);% pha = unwrap(angle(H));function [Hr,w,c,L]=hr_type3(h);%计算所设计的3型滤波器的振幅响应%Hr=振幅响应%b=3型滤波器的系数%L=Hr的阶次%h=3型滤波器的单位冲击响应M=length(h);L=(M-1)/2;c= [2*h(L+1:-1:1)];n=[0:1:L];w=[0:1:500]'*2*pi/500;Hr=sin(w*n)*c';基于频域抽样法的FIR数字带通滤波器设计wsl=0.12*pi;%低阻带边缘wsh=0.82*pi;%高阻带边缘wpl=0.32*pi;%低通带边缘wph=0.62*pi;%高通带边缘delta=(wpl-wsl);%过度带M=ceil(2*pi*3/delta);%抽样点数al=(M-1)/2;wl=(2*pi/M); %抽样间隔k=0:M-1;T1=0.12; T2=0.6;%过渡带样本点Hrs=[zeros(1,ceil(0.12*pi/wl)+1),T2,T1,ones(1,ceil(0.3*pi/wl)),T1,T2,zeros(1,ceil(0.3734*pi/wl)) ,T2,T1,ones(1,ceil(0.3*pi/wl)),T1,T2,zeros(1,ceil(0.12*pi/wl)+1)];wdl=[0 0.12 0.32 0.62 0.82 1];k1=0:floor((M-1)/2);k2=floor((M-1)/2)+1:M-1;angH=[-al*(2*pi)/M*k1,al*(2*pi)/M*(M-k2)];H=Hrs.*exp(j*angH);h=real(ifft(H));%傅立叶反变换figure(1);%冲击响应图stem(k,h);title('impulse response');xlabel('n');ylabel('h(n)');grid;figure(2);%幅频曲线图Hf=abs(H);w=k*wl/pi;plot(w,Hf,'*b-')axis([0 1 -0.1 1.1]);title('amplitude response');xlabel('frequency in pi units');ylabel('Hr(w)');set(gca,'xtickmode','manual','xtick',wdl);set(gca,'ytickmode','manual','ytick',[0 0.12 0.6 1]);grid;figure(3);fs=15000;[c,f3]=freqz(h,1);f3=f3/pi*fs/2;plot(f3,20*log10(abs(c)));title('频谱特性');xlabel('频率/HZ');ylabel('衰减/dB');grid;t=(0:100)/fs;x=sin(2*pi*t*700)+sin(2*pi*t*3200)+sin(2*pi*t*6200);q=filter(h,1,x);[a,f1]=freqz(x);f1=f1/pi*fs/2;[b,f2]=freqz(q);f2=f2/pi*fs/2;figure(4);subplot(2,1,1);plot(f1,abs(a));title('输入波形频谱图');xlabel('频率');ylabel('幅度')subplot(2,1,2);plot(f2,abs(b));title('输出波形频谱图');xlabel('频率');ylabel('幅度')基于汉宁窗的FIR数字高通滤波器设计function s2Fs=15000;t=(0:100)/Fs;x=sin(2*pi*500*t)+sin(2*pi*3000*t)subplot(245);stem(x);title('原始信号');axis([0,100,-2,2]);Ws=7*pi/30;Wp=13*pi/30;tr_wid=Wp-Ws; %过渡带宽度N=ceil(11*pi/tr_wid) %滤波器长度n=0:1:N-1;Wc=(Ws+Wp)/2; %理想高通滤波器的截止频率hd=ideal_hp1(Wc,N); %理想高通滤波器的单位冲激响应w_bla=(blackman(N))'; %布拉克曼h=hd.*w_bla; %截取得到实际的单位脉冲响应[db,mag,pha,grd,w]=freqz_m(h,[1]); %计算实际滤波器的幅度响应delta_w=2*pi/1000;As=-round(max(db(1:1:Ws/delta_w+1))) %实际阻带纹波,round是取整函数y=filter(h,1,x)subplot(246)plot(y)title('滤波后的信号');axis([0,100,-1,1])subplot(241)stem(n,hd)title('理想单位脉冲响应hd(n)')subplot(242)stem(n,w_bla)title('布拉克满窗w(n)')subplot(243)stem(n,h)title('实际单位脉冲响应hd(n)')subplot(244)plot(w/pi,db)title('幅度响应(dB)')axis([0,1,-100,10])function [db,mag,pha,grd,w] = freqz_m(b,a);[H,w] = freqz(b,a,1000,'whole');H = (H(1:1:501))'; w = (w(1:1:501))';mag = abs(H);db = 20*log10((mag+eps)/max(mag));pha = angle(H);grd = grpdelay(b,a,w);subplot(247);plot(pha)title('相频响应')function hd=ideal_hp1(Wc,N)alp=(N-1)/2;n=0:1:N-1;m=n-alp+eps; %eps是一个很小很小的数hd=[sin(pi*m)-sin(Wc*m)]./(pi*m);用双线性法设计巴特沃斯高通数字滤波器clear all; clc; close allfs=120; T=1/fs;rp=1; rs=30;Wp=0.35*pi; Ws=0.65*pi; %数字滤波器指标wp=2*tan(Wp/2)/T; ws=2*tan(Ws/2)/T;%预畸变,将数字滤波器的指标变为模拟滤波器的指标[N,w]=buttord(wp,ws,rp,rs,'s'); %求滤波器阶数和3dB截止频率[Z,P,K]=buttap(N); %设计模拟低通滤波器[Md,Nd]=zp2tf(Z,P,K); %将零极点形式转换为传输函数形式[M,N]=lp2hp(Md,Nd,w); %对低通滤波器进行频率变换[h,w]=freqs(M,N,512); %模拟滤波器的幅频响应subplot(2,1,1);plot(w,abs(h)); grid;xlabel('Hz');ylabel('幅度'); title('模拟高通滤波器');[Mh,Nh]=bilinear(M,N,1/T); %对模拟滤波器双线性变换[h1,w1]=freqz(Mh,Nh); %数字滤波器的幅频响应subplot(2,1,2);plot(w1/pi,20*log10(abs(h1))); grid;xlabel('ω/π');ylabel('幅度(dB)'); title('数字高通滤波器');%图-5 模拟滤波器和设计的滤波器的单位冲击响应k=0:2000; k2=1:1001;x=10*sin(pi/10*k/fs)+5*sin(10*pi*k/fs)+3*sin(30*pi*k/fs);figuresubplot(2,1,1)X=fft(x)*2/2001;y=filter(Mh,Nh,x);plot(k,y); ylim([-5 5]); title('高通数字滤波器输出');Y=fft(y)*2/2001;df=fs/2001; ff=(k2-1)*df;subplot(2,1,2); plot(ff,abs(X(k2)),'r','linewidth',2); hold on plot(ff,abs(Y(k2)),'b'); title('输入输出频谱比较'); grid;。