matlab窗函数设计数字滤波器及信号的分频滤波设计
实验3 用MATLAB窗函数法设计FIR滤波器
实验10 用MATLAB 窗函数法设计FIR 滤波器一、实验目的㈠、学习用MA TLAB 语言窗函数法编写简单的FIR 数字滤波器设计程序。
㈡、实现设计的FIR 数字滤波器,对信号进行实时处理。
二、实验原理㈠、运用窗函数法设计FIR 数字滤波器与IIR 滤波器相比,FIR 滤波器在保证幅度特性满足技术要求的同时,很容易做到有严格的线性相位特性。
设FIR 滤波器单位脉冲响应)(n h 长度为N ,其系统函数)(z H 为∑-=-=10)()(N n n zn h z H)(z H 是1-z 的)1(-N 次多项式,它在z 平面上有)1(-N 个零点,原点0=z 是)1(-N 阶重极点。
因此,)(z H 永远是稳定的。
稳定和线性相位特性是FIR 滤波器突出的优点。
FIR 滤波器的设计任务是选择有限长度的)(n h ,使传输函数)(ωj e H 满足技术要求。
主要设计方法有窗函数法、频率采样法和切比雪夫等波纹逼近法。
本实验主要介绍用窗函数法设计FIR 数字滤波器。
图7-10-1 例1 带通FIR 滤波器特性㈡、 用MATLAB 语言设计FIR 数字滤波器例1:设计一个24阶FIR 带通滤波器,通带为0.35<ω<0.65。
其程序如下b=fir1(48,[0.35 0.65]);freqz(b,1,512)可得到如图7-10-1 所示的带通FIR滤波器特性。
由程序可知,该滤波器采用了缺省的Hamming窗。
例2:设计一个34阶的高通FIR滤波器,截止频率为0.48,并使用具有30dB波纹的Chebyshev窗。
其程序如下Window=chebwin(35,30);b=fir1(34,0.48,'high',Window);freqz(b,1,512)可得到如图7-10-2 所示的高通FIR滤波器特性。
图7-10-2 例2 高通FIR滤波器特性例3:设计一个30阶的低通FIR滤波器,使之与期望频率特性相近,其程序如下 f=[0 0.6 0.6 1];m=[1 1 0 0];b=fir2(30,f,m);[h,w]=freqz(b,1,128);plot(f,m,w/pi,abs(h))结果如图7-10-3所示。
matlab窗函数代码
matlab窗函数代码在信号处理和数字滤波器设计中,窗函数是一种常用的工具,用于限制信号的时间或频率特性。
MATLAB提供了多种窗函数的函数,为用户提供了便捷的窗函数生成方法。
本文将介绍使用MATLAB实现窗函数的代码,并展示窗函数在信号处理中的一些应用。
一、窗函数的概念和作用窗函数,顾名思义,是将信号与一个窗口函数进行相乘的操作。
窗口函数通常是一个在有限时间或有限频率范围内非零的函数,其作用是在截断信号的同时减小频谱泄露或干扰的效果。
窗函数主要用于以下几个方面:1. 信号截断:在信号处理中,常常需要将信号截断到特定的时间或频率范围内,窗函数可以实现这一功能。
2. 频谱分析:窗函数可以减少频谱泄露的问题,提高频谱分析的准确性。
3. 滤波器设计:窗函数可以用于设计数字滤波器,限制滤波器的频率响应,降低滤波器的波纹和旁瓣响应。
4. 信号调制:窗函数可以对信号进行调制,从而改变信号的频谱特性。
二、常见的窗函数在MATLAB中,常见的窗函数有以下几种:1. 矩形窗函数(rectwin):矩形窗函数是最简单的窗口函数,其在指定范围内等于1,在其他范围内等于0。
矩形窗函数常常用于频谱分析和滤波器设计中。
MATLAB代码实现:```matlabN = 256; % 窗口长度w = rectwin(N); % 生成矩形窗函数```2. 汉宁窗函数(hann):汉宁窗函数是一种改进的窗口函数,其在给定范围内平滑过渡,减少频谱泄露和旁瓣响应。
MATLAB代码实现:```matlabN = 256; % 窗口长度w = hann(N); % 生成汉宁窗函数```3. 汉明窗函数(hamming):汉明窗函数也是一种改进的窗口函数,类似于汉宁窗函数,但其衰减更快。
MATLAB代码实现:```matlabN = 256; % 窗口长度w = hamming(N); % 生成汉明窗函数```4. 埃尔米特窗函数(hermite):埃尔米特窗函数在MATLAB中用chebwin函数实现,其在给定范围内呈现类似埃尔米特多项式的特性。
用MATLAB设计滤波器
用MATLAB 设计滤波器1 IIR 滤波器的设计● freqz功能:数字滤波器的频率响应。
格式:[h ,w]=freqz(b ,a ,n)[h ,f]=freqz(b ,a ,n ,Fs)[h ,w]=freqz(b ,a ,n ,'whole')[h ,f]=freqz(b ,a ,n ,'whole',Fs)h=freqz(b ,a ,w)h=freqz(b ,a ,f ,Fs)freqz(b ,a)说明:freqz 用于计算由矢量"和b 构成的数字滤波器H(z)=A(z)B(z)= n-1--n-1 l)z a(n ....a(2)z l l)z b(n .... b(2)z b(l)++++++++ 的复频响应H(j ω)。
[h ,w]=freqz(b ,a ,n)可得到数字滤波器的n 点的幅频响应,这n 个点均匀地分布在 上半单位圆(即0~π),并将这n 点频率记录在w 中,相应的频率响应记录在h 中。
至于n 值的选择没有太多的限制,只要n>0的整数,但最好能选取2的幂次方,这样就可采用 FFT 算法进行快速计算。
如果缺省,则n=512。
[h ,f]二freqz(b ,a ,n ,Fs)允许指定采样终止频率Fs(以Hz 为单位),也即在0~Fs/2 频率范围内选取n 个频率点(记录在f 中),并计算相应的频率响应h 。
[h ,w]=freqz(b ,a ,n ,'whole')表示在0~2π之间均匀选取n 个点计算频率响应。
[h ,f]=freqz(b ,a ,n ,'whole',Fs)则在O~Fs 之间均匀选取n 个点计算频率响应。
h=freqz(b ,a ,w)计算在矢量w 中指定的频率处的频率响应,但必须注意,指定的频 率必须介于0和2π之间。
h=freqz(b ,a ,f ,Fs)计算在矢量f 中指定的频率处的频率响应,但指定频率必须介于 0和Fs 之间。
用MATLAB结合窗函数法设计数字带通FIR滤波器
武汉理工大学《Matlab课程设计》报告目录摘要 (I)Abstract (II)1 原理说明 (1)1.1 数字滤波技术 (1)1.2 FIR滤波器 (1)1.3 窗函数 (2)1.4 MATLAB简介 (4)1.5 MATLAB结合窗函数设计法原理 (4)2 滤波器设计 (2)2.1 滤波器设计要求 (2)2.2 设计函数的选取 (2)2.3 窗函数构造 (3)2.4 设计步骤 (4)2.5 利用MATLAB自带函数设计 (4)3 滤波器测试 (9)3.1 滤波器滤波性能测试 (9)3.2 滤波器时延测量................................................................................错误!未定义书签。
3.3 滤波器稳定性测量............................................................................错误!未定义书签。
5 参考文献 (12)附件一: ........................................................................................................ 错误!未定义书签。
摘要现代图像、语声、数据通信对线性相位的要求是普遍的。
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
因此,具有线性相位的FIR数字滤波器在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。
数字滤波器的设计matlab
数字滤波器的设计matlab
数字滤波器的设计可以使用MATLAB中的fdatool或者直接使用代码实现。
具体步骤如下:
1. 确定滤波器的类型(低通、高通、带通、带阻)以及参数(截止频率、通带、阻带宽度等)。
2. 使用MATLAB中的fdatool进行滤波器的设计,可以手动调节参数并进行实时分析和优化,或者选择预设的滤波器模板进行修改。
3. 点击Export将滤波器参数导出至matlab代码中。
4. 使用生成的代码进行滤波器的实现,例如:
```
fs = 1000; %采样率
fc = 100; %截止频率
[b, a] = butter(6, fc/(fs/2)); %设计6阶巴特沃斯低通滤波器input_signal = sin(2*pi*50*(0:1/fs:1)); %输入信号
output_signal = filter(b, a, input_signal); %滤波结果
```
其中,b和a分别为滤波器的分子和分母系数,可以根据不同的设计方法得到,input_signal为需要进行滤波的信号,output_signal为滤波后的结果。
matlab设计数字滤波器参数说明
matlab设计数字滤波器参数说明数字滤波器是一种用于信号处理的重要工具,它可以去除信号中的杂乱干扰,并改善信号的质量。
MATLAB作为一种优秀的科学计算软件,提供了丰富的工具和函数,用于设计数字滤波器的参数。
在MATLAB中,我们可以使用`fdesign`函数来创建滤波器设计对象,并使用相应的函数进行参数设置。
数字滤波器的参数主要包括滤波器类型、截止频率、阶数和滤波器的响应类型等。
首先,我们需要选择数字滤波器的类型。
常见的类型包括低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
根据信号处理的需求,选择适当的滤波器类型。
其次,我们需要确定滤波器的截止频率。
截止频率是指滤波器开始起作用的频率。
对于低通滤波器,截止频率是指允许通过的最高频率; 对于高通滤波器,截止频率是指允许通过的最低频率; 对于带通滤波器,截止频率是指允许通过的频率范围。
在确定了滤波器类型和截止频率后,我们还需要指定滤波器的阶数。
阶数是指滤波器的复杂程度和滤波器在滤波时的陡峭程度。
一般来说,阶数越高,滤波器的性能越好,但计算复杂度也会增加。
最后,我们需要选择滤波器的响应类型。
响应类型是指滤波器在频域中的特性。
常见的响应类型包括巴特沃斯响应、切比雪夫响应和椭圆响应等。
每种响应类型都有其特定的特性和适用范围。
通过设置这些参数,我们可以使用MATLAB中的滤波器设计函数来生成数字滤波器的系数,并将其应用于信号处理任务中。
使用适当的滤波器参数可以提高信号的质量,并且能够根据具体需求实现各种信号处理任务。
MATLAB提供了丰富的文档和示例代码,供我们学习和使用数字滤波器设计的相关知识。
通过深入理解数字滤波器的参数设置和设计原理,我们可以更好地应用数字滤波器进行信号处理,并解决各种实际问题。
用MAtlab实现FIR数字滤波器的设计
设计方法
• 一、窗函数设计法 • 二、频率抽样设计法 • 三、最小二乘逼近设计法
FIR 数 字 滤 波 器 的 文 件
一、fir1.m
• 本文件采用窗函数法设计FIR数字滤波器,其调用格式是
• 1)b=fir1(N ,W c)
• 2)b=fir1(N,W c ,’high’) • 3)b=fir1(N,W c ,’stop’)
实践课题
FIR 数 字 滤 波 器 的 设 计
实践目的
通过实践加深对Matlab软件的认识。 能熟练应用并基本掌握Matlab软件, 通过实践对课本以外的内容有初步的 了解。 通过设计FIR数字滤波器,对滤波器 的功能和原理有初步的认识和了解。
实践课题简介
在数字信号处理的许多领域中, 如图像处理、数字通信等领域,常 常要求滤波器具有线性相位。FIR数 字滤波器的最大优点就是容易设计 成线性相位特性,而且它的单位冲 激响应是有限长的,所以它永远是 稳定的。
•
Hale Waihona Puke 上式中N为滤波器的阶次,W c是通带截止频率,其值在0~1之间, 1对应采样频率的一半,b是设计好的滤波器系数(单位冲激响应序 列)其长度为N+1。
对于格式(1)若W c是一标量,则可用来设计低通滤波器;若W c 是 的向量,则用来设计带通滤波器。 格式(2)用来设计高通滤波器。 格式(3)用来设计带阻滤波器。
部分滤波器的例子(频率抽样法)
部分滤波器的例子(最小二乘逼近设计法)
Fircls1设计的低通滤波器,归一化截止频率 为0.3,通带波纹为0.02,阻带波纹为0.008。
实践总结
通过这次实践课题的设计与制作,使我 对Matlab这个软件有了进一步的了解,并且 加深了课本上的知识。与此同时,使我对 滤波器有了初步的认识。提高了我的理解 以及分析能力,理论和实践相结合,不仅 巩固了我的理论知识,同时更提高了我的 实践能力,使我受益匪浅。
matlab窗函数设计数字滤波器及信号的分频滤波设计要点
目录目录 (1)摘要 (2)1 MATLAB的概况 (2)2 MATLAB结合窗函数设计法原理 (3)3 各类窗函数简介 (6)3.1 基本窗函数 (6)3.2 矩形窗函数 (6)3.3汉宁窗(升余弦窗) (7)4 方案设计 (8)5 编程实现 (8)5.1信号的编程实现 (8)5.2 带通滤波器的设计 (10)5.3 高通滤波器的设计 (12)5.4 信号的分离 (13)实验总结 (16)致谢 (17)参考文献 (18)摘要现在数字滤波器广泛用于通信与信号处理领域同时MATLAB也在信号处理和仿真开发中,发挥着越来越重要的地位。
此次设计正是基于MATLAB数字滤波器的分频滤波设计。
关键字:MATLAB 数字滤波器分频滤波1 MATLAB的概况MATLAB是矩阵实验室(Matrix Laboratory)之意。
除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.应用MATLAB这一软件来设计滤波器,与传统的设计思路相比是非常的简便的.具体来说主要有以下几点:1) MATLAB的GUID可以提供给使用者一个进行人机交换的环境,在此环境中,使用者没有必要了解程序内部具体的编写情况,在这个界面上他只要输入他所期望的滤波器的性能指标就可以了。
2) 利用MATLAB可以进行系统仿真,也就是说,使用者可以通过计算机进行对数字滤波器的频率响应图据的处理和波形的检测,不像以前必须借助一定的实验器材才可以得到。
3) MATLAB内部有丰富的函数可供调用,使用者只需要根据自己的需要查到所需要的函数名,那就可以直接调用使用了.不需要自己把函数详细的编写出来.使编写内部程序变的简单。
MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.2 MATLAB结合窗函数设计法原理数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器的设计及其MATLAB实现
设计低通数字滤波器,要求在通带内频率低于0.2pirad时,允许幅度误差在1dB以内,在频率0.3pi rad~pi rad之间的阻带衰减大于15dB,用脉冲响应不变法设计数字滤波器,T=1: 切比雪夫I型模拟滤波器的设计子程序:function [b,a]=afd_chb1(Omegap,Omegar,Ar)if Omegap<=0error('通带边缘必须大于0')endif(Dt<=0)|(Ar<0)error('通带波动或阻带衰减必须大于0');endep=sqrt(10^(Dt/10)-1);A=10^(Ar/20);OmegaC=Omegap;OmegaR=Omegar/Omegap;g=sqrt(A*A-1)/ep;N=ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1)));fprintf('\n***切比雪夫I型模拟低通滤波器阶数=%2.0f\n',N);[b,a]=u_chblap(N,Dt,OmegaC);设计非归一化切比雪夫I型模拟低通滤波器原型程序:function [b,a]=u_chblap(N,Dt,OmegaC)[z,p,k]=cheb1ap(N,Dt);a=real(poly(p));aNn=a(N+1);p=p*OmegaC;a=real(poly(p));aNu=a(N+1);k=k*aNu/aNn;b0=k;B=real(poly(z));b=k*B;直接形式转换成级联形式子程序:function [C,B,A]=sdir2cas(b,a)Na=length(a)-1;Nb=length(b)-1;b0=b(1);b=b/b0;a0=a(1);a=a/a0;C=b0/a0;p=cplxpair(roots(a));K=floor(Na/2);if K*2==NaA=zeros(K,3);for n=1:2:NaArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);elseif Na==1A=[0 real(poly(p))];elseA=zeros(K+1,3);for n=1:2:2*KArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);endA(K+1,:)=[0 real(poly(p(Na)))];endz=cplxpair(roots(b));K=floor(Nb/2);if Nb==0B=[0 0 poly(z)];elseif K*2==NbB=zeros(K,3);for n=1:2:NbBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endelseif Nb==1B=[0 real(poly(z))];elseB=zeros(K+1,3);for n=1:2:2*KBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endB(K+1,:)=[0 real(poly(z(Nb)))];End计算系统函数的幅度响应和相位响应子程序:function [db,mag,pha,w]=freqs_m(b,a,wmax)w1=0:500;w=w1*wmax/500;h=freqs(b,a,w);mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);脉冲响应不变法程序:function [b,a]=imp_invr(c,d,T)[R,p,k]=residue(c,d);p=exp(p*T);[b,a]=residuez(R,p,k);b=real(b).*T;数字滤波器响应子程序:function [db,mag,pha,grd,w]=freqz_m(b,a);[H,w]=freqz(b,a,1000,'whole');H=(H(1:501))';w=(w(1:501))';mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(b,a,w);直接转换成并联型子程序:function [C,B,A]=dir2par(b,a)M=length(b);N=length(a);[r1,p1,C]=residuez(b,a);p=cplxpair(p1,10000000*eps);x=cplxcomp(p1,p);r=r1(x);K=floor(N/2);B=zeros(K,2);A=zeros(K,3);if K*2==Nfor i=1:2:N-2br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br');A((fix(i+1)/2),:)real(ar');end[br,ar]=residuez(r(N-1),p(N-1),[]);B(K,:)=[real(br') 0];A(K,:)=[real(ar') 0];elsefor i=1:2:N-1br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br);A((fix(i+1)/2),:)real(ar);endEnd比较两个含同样标量元素但(可能)有不同下标的复数对及其相位留数向量子程序:function I=cplxcomp(p1,p2)I=[];for i=1:length(p2)for j=1:length(p1)if(abs(p1(j)-p2(i))<0.0001)I=[I,j];endendendI=I';双线性变换巴特沃斯低通滤波器设计:巴特沃思模拟滤波器的设计子程序:function [b,a]=afd_butt(wp,ws,Rp,rs)if wp<=0error('通带边缘必须大于0');endif ws<=wperror('阻带边缘必须大于通带边缘');endif(Rp<=0)|(Rs<0)error('通带波动或阻带衰减必须大于0');endN=ceil((log10((10^(Rp/10)-1)/(10^(Rs/10)-1)))/(2*log10(wp/ws))); fprintf('\n***Butterworth Filter Order=%2.0f\n',N);OmegaC=wp/((10^(Rp/10)-1)^(1/(2*N)));[b,a]=u_buttap(N,OmegaC)设计非归一化巴特沃思模拟低通滤波器原型子程序:function [b,a]=u_buttap(N,OmegaC)[z,p,k]=buttap(N);p=p*OmegaC;k=k*OmegaC^N;B=real(poly(z));b0=k;b=k*B;a=real(poly(p));直接型到级联型形式的转换:function [b0,B,A]=dir2cas(b,a)b0=b(1);b=b/b0;a0=a(1);a=a/a0;b0=b0/a0;M=length(b);N=length(a);if N>Mb=[b,zeros(1,N-M)];a=[a,zeros(1,M-N)];elseNM=0;endk=floor(N/2);B=zeros(k,3);A=zeros(k,3);if k*2==Nb=[b,0];a=[a,0];endbroots=cplxpair(roots(b));aroots=cplxpair(roots(a));for i=1:2:2*kbr=broots(i:1:i+1,:);br=real(polt(br));B((fix(i+1)/2),:)=br;ar=aroots(i:1:i+1,:);ar=real(polt(ar));A((fix(i+1)/2),:)=ar;Endfunction [db,mag,pha,grd,w]=freqz_m(b,a)[h,w]=freqz(b,a,1000,'whole');h=(h(1:501))';w=(w(1:501))';mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);grd=grdelay(b,a,w);设计一个巴特沃思高通滤波器,要求通带截止频率为0.6pi,通带内衰减不大于1dB,阻带·起始频率为0.4pi,阻带内衰减不小于15dB,T=1:>> wp=0.6*pi;ws=0.4*pi;>> Rp=1;Rs=15;T=1;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs) 计算巴特沃思滤波器阶数和截止频率N =4wn =>> [b,a]=butter(N,wn,'high'); 频率变换法计算巴特沃思高通滤波器>> [C,B,A]=dir2cas(b,a)C =0.0751B =1.0000 -2.0000 1.00001.0000 -2.0000 1.0000A =1.0000 0.1562 0.44881.0000 0.1124 0.0425>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi,db);椭圆带通滤波器的设计--ellip函数的应用:>> ws=[0.3*pi 0.75*pi]; 数字阻带边缘频率>> wp=[0.4*pi 0.6*pi]; 数字通带边缘频率>> Rp=1;Rs=40;>> Ripple=10^(-Rp/20); 通带波动>> Attn=10^(-Rs/20); 阻带衰减>> [N,wn]=ellipord(wp/pi,ws/pi,Rp,Rs) 计算椭圆滤波器参数N =4wn =0.4000 0.6000>> [b,a]=ellip(N,Rp,Rs,wn); 数字椭圆滤波器的设计>> [b0,B,A]=dir2cas(b,a) 级联形式实现b0 =0.0197B =1.0000 1.5066 1.00001.0000 0.9268 1.00001.0000 -0.9268 1.00001.0000 -1.5066 1.0000A =1.0000 0.5963 0.93991.0000 0.2774 0.79291.0000 -0.2774 0.79291.0000 -0.5963 0.9399>> figure(1);>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,2,1);plot(w/pi,mag);>> grid on;>> subplot(2,2,3);plot(w/pi,db);grid on;>> subplot(2,2,2);plot(w/pi,pha/pi);grid on;>> subplot(2,2,4);plot(w/pi,grd);设计一个巴特沃思带阻滤波器,要求通带上下截止频率为0.8pi、0.2pi,通带内衰减不大于1dB,阻带上起始频率为0.7pi、0.4pi,阻带内衰减不小于30dB:>> wp=[0.2*pi 0.8*pi];>> ws=[0.4*pi 0.7*pi];>> Rp=1;Rs=30;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs);>> [b,a]=butter(N,wn,'stop');>> [C,B,A]=dir2cas(b,a)C =0.0394B =1.0000 0.3559 0.99941.0000 0.3547 1.00401.0000 0.3522 0.99541.0000 0.3499 1.00461.0000 0.3475 0.99601.0000 0.3463 1.0006A =1.0000 1.3568 0.79281.0000 1.0330 0.46331.0000 0.6180 0.17751.0000 -0.2493 0.11131.0000 -0.6617 0.37551.0000 -0.9782 0.7446>> [db,mag,pha,grd,w]=freqz_m(b,a); >> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi);数字低通---数字带阻:function [bz,az]=zmapping(bZ,aZ,Nz,Dz) bzord=(length(bZ)-1)*(length(Nz)-1); azord=(length(aZ)-1)*(length(Dz)-1);bz=zeros(1,bzord+1);for k=0:bzordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:bzord-k-1pld=conv(pld,Dz);endbz=bz+bZ(k+1)*conv(pln,pld); endfor k=0:azordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:azord-k-1pld=conv(pld,Dz);endaz=az+aZ(k+1)*conv(pln,pld); endall=az(1);az=az/az1;bz=bz/az1;线性相位FIR滤波器的幅度特性:function pzkplot(num,den)hold on;axis('square');x=-1:0.01:1;y=(1-x.^2).^0.5;y1=-(1-x.^2).^0.5;plot(x,y,'b',x,y1,'b');num1=length(num);den1=length(den);if(num1>1)z=roots(num);elsez=0;endif(den1>1)p=roots(den);elsep=0;endif(num>1&den1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max_z=max(r_max_z,i_max_z);r_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max_p=max(r_max_p,i_max_p);a_max=max(a_max_z,a_max_p);elseif (num1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max=max(r_max_z,i_max_z);elser_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max=max(r_max_p,i_max_p);endaxis([-a_max a_max -a_max a_max]);plot([-a_max a_max],[0 0],'b');plot([0 0],[-a_max a_max],'b');plot([-a_max a_max],[a_max a_max],'b');plot([a_max a_max],[-a_max a_max],'b');Lz=length(z);for i=1:Lz;plot(real(z(i)),imag(z(i)),'bo');endLp=length(p);for j=1:Lpplot(real(p(j)),imag(p(j)),'bx');endtitle('The zeros-pole plot');xlabel('虚部');ylabel('实部');function [Hr,w,a,L]=Hr_Type1(h)M=length(h);L=(M-1)/2;a=[h(L+1) 2*h(L:-1:1)];n=[0:1:L];w=[0:1:500]'*pi/500;Hr=cos(w*n)*a';设计I型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,a,L]=Hr_Type1(h);>> amax=max(a)+1;>> amin=min(a)-1;>> subplot(2,2,1);stem(n,h);>> axis([-1 2*L+1 amin amax]);text(2*L+1.5,amin,'n'); >> xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(0:L,a);>> axis([-1 2*L+1 amin amax]);>> xlabel('n');ylabel('a(n)');title('a(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);>> grid on;text(1.05,-20,'频率pi');>> xlabel('频率');ylabel('Hr');title('I 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);>> title('零极点分布');function [hr,w,b,L]=Hr_Type2(h)M=length(h);L=M/2;b=2*h(L:-1:1);n=[1:1:L];n=n-0.5;w=[0:1:500]'*pi/500;hr=cos(w*n)*b';II型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,b,L]=Hr_Type2(h);Warning: Integer operands are required for colon operator when used as index. > In Hr_Type2 at 2>> bmax=max(b)+1;bmin=min(b)-1;>> subplot(2,2,1);stem(n,h);axis([-1 2*L+1 bmin bmax]);text(2*L+1.5,bmin,'n');xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(1:L,b);axis([-1 2*L+1 bmin bmax]);xlabel('n');ylabel('b(n)');title('b(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);grid on;text(1.05,-20,'频率pi');xlabel('频率');ylabel('Hr');title('II 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);title('零极点分布');function [hr,w,c,L]=Hr_Type3(h)M=length(h);L=(M-1)/2;b=2*h(L+1:-1:1);n=[1:1:L];w=[0:1:500]'*pi/500;hr=cos(w*n)*c';用MA TLAB编程绘制各种窗函数的形状。
如何使用Matlab进行数字信号处理和滤波器设计
如何使用Matlab进行数字信号处理和滤波器设计数字信号处理(Digital Signal Processing,DSP)是一门研究如何对数字信号进行采样、量化和处理的技术。
在现代科学技术和工程应用中,数字信号处理已成为不可或缺的一部分。
而Matlab是一种常用于数字信号处理和控制系统设计的数学软件工具。
本文将介绍如何使用Matlab进行数字信号处理以及如何设计滤波器。
我们将从基础概念开始,逐步深入,帮助读者了解数字信号处理的原理和技术,以及如何在Matlab中实现这些操作。
一、数字信号处理基础知识数字信号是以离散的形式表示的信号,与连续信号相对应。
离散信号是在时间和幅度上都离散的,可以表示为数列的形式。
而连续信号是在时间和幅度上都连续变化的。
数字信号处理就是对数字信号进行处理、分析和变换的过程。
数字信号可以通过采样和量化获得。
采样是将连续信号在时间上取样,将其转换为离散信号。
量化是将连续幅度离散化,在连续幅值上设置特定的量化级别。
二、在Matlab中进行数字信号处理Matlab是一个功能强大的数学软件工具,提供了丰富的函数和工具箱,便于进行数字信号处理。
以下是Matlab中数字信号处理的一些常用函数和操作。
1. 生成信号Matlab中可以使用信号生成函数生成各种类型的信号。
例如,使用sine函数可以生成正弦信号,使用sawtooth函数可以生成锯齿波信号等。
2. 采样和重构信号采样是将连续信号转换为离散信号的过程。
在Matlab中,可以使用resample 函数对信号进行采样,并使用interp函数进行插值重构。
3. 傅里叶变换傅里叶变换是将时域信号转换为频域信号的一种变换方法。
在Matlab中,可以使用fft函数进行快速傅里叶变换,并使用ifft函数进行逆变换。
4. 滤波器设计滤波器是数字信号处理中常用的工具,用于去除噪声、改变信号频谱等。
在Matlab中,可以使用fir1和fir2函数设计FIR滤波器,使用cheby1和cheby2函数设计Chebyshev滤波器等。
基于MATLAB的数字滤波器的设计
基于MATLAB 的数字滤波器的设计1 引言数字滤波器是指完成信号滤波处理功能的,用有限精度算法实现的离散线性非时变系统,其输入是一组(由模拟信号取样和量化的)数字量,其输出是经过变换或说处理的另一组数字量。
数字滤波器具有稳定性高、精度高、灵活性大等突出优点。
这里所说的数字滤波器是指理想带通,低通等的频率选择数字滤波器。
数字滤波器设计的一个重要步骤是确定一个可实现的传输函数H(z),这个确定传输函数H(z)的过程称为数字滤波器设计。
数字滤波器的一般设计过程为:(1)按照实际需要,确定滤波器的性能要求(通常在频域内给定数字滤波的性能要求)。
(2)寻找一满足预定性能要求的离散时间线性系统。
(3)用有限精度的运算实现所设计的系统。
(4)通过模拟,验证所设计的系统是否符合给定性能要求。
2 数字滤波器的设计滤波器分为两种,分别为模拟滤波器和数字滤波器。
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化的过程中,使信号按预定的形式变化。
数字滤波器有多种分类,从数字滤波器功能上分可分为低通、高通、带阻、带通滤波器,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应滤波器(IIR )和有限长冲激响应滤波器(FIR )。
数字滤波器指标:一般来说,滤波器的幅频特性是分段常数的,以低通为例,在通带内逼近于1,阻带内逼近与0,实际设计的滤波器并非是锐截止的通带和阻带两个范围,两者之间总有一个过渡带。
在设计滤波器时事先给定幅频特性允许误差,在通带范围内幅度响应以误差逼近于1,在阻带内幅1σ度响应以误差逼近于0。
2σ (1)πσσ≤≤≤≤≤≤-w w e H w w e H r jwc jw ,2|)(|,1|)(|11式中wc 和wr 分别为通带边界频率和阻带边界频率,wr-wc 为过渡带。
在具体的技术指标中往往用通带波动来表示,用最小阻带衰减At 来表示,其具体的对应公式这里就不详述了。
matlab滤波器设计命令
matlab滤波器设计命令Matlab滤波器设计命令滤波器是数字信号处理中常用的工具,用于去除信号中的噪声、频率干扰或其他不需要的成分。
Matlab提供了一系列有用的滤波器设计命令,使用户能够轻松设计并应用各种类型的滤波器。
在本文中,我们将详细介绍Matlab中常用的滤波器设计命令,包括滤波器设计函数、滤波器类型和设计过程。
I. Matlab中常用的滤波器设计函数在Matlab中,有几种函数可用于设计滤波器,其中最常用的函数是`designfilt`函数和`fir1`函数。
1. designfilt函数`designfilt`函数是Matlab中最灵活和功能强大的滤波器设计函数之一,可用于设计各种类型的IIR和FIR滤波器。
它的基本语法如下:`filt = designfilt(FilterType, 'PropertyName', PropertyValue, ...)`其中,`FilterType`代表滤波器类型,包括低通滤波器(Lowpass)、高通滤波器(Highpass)、带通滤波器(Bandpass)、带阻滤波器(Bandstop)等。
`PropertyName`和`PropertyValue`是可选的参数,用于设置滤波器的各种属性,如阶数(Order)、截止频率(CutoffFrequency)、通带和阻带的最大衰减(MaximumAttenuation)等。
下面是一个使用`designfilt`函数设计低通滤波器的例子:Fs = 1000; 采样频率Fpass = 20; 通带截止频率Fstop = 30; 阻带截止频率designfilt('lowpassiir', 'FilterOrder', 4, 'PassbandFrequency', Fpass, 'StopbandFrequency', Fstop, 'SampleRate', Fs)该命令将设计一个4阶的低通IIR滤波器,其通带截止频率为20Hz,阻带截止频率为30Hz,采样频率为1000Hz。
用MATLAB设计FIR数字滤波器
实验八 用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)。
matlab窗函数法设计数字滤波器
matlab窗函数法设计数字滤波器
好的,下面为你介绍使用matlab窗函数法设计数字滤波器的步骤:
1. 确定指标:确定需要设计的滤波器的指标,如滤波器的类型、过渡带宽度、阻带最小衰减等。
2. 选择窗函数:根据滤波器指标选择合适的窗函数,常见的窗函数有矩形窗、汉宁窗、海明窗等。
3. 计算滤波器系数:根据选择的窗函数和滤波器指标,计算滤波器的系数。
4. 编写matlab代码:使用matlab编写代码,实现数字滤波器的设计。
5. 验证滤波器性能:使用设计好的数字滤波器对信号进行滤波处理,验证滤波器的性能是否符合指标要求。
窗函数法是一种简单实用的设计数字滤波器的方法,你可以根据实际需求选择合适的窗函数和滤波器指标,设计出满足要求的数字滤波器。
MATLAB与窗函数法结合设计FIR数字滤波器的研究
谢谢观看
数字滤波器的基本原理
数字滤波器的基本原理
数字滤波器是一种通过数字信号处理技术对输入信号进行滤波处理的系统。 它通过一定的算法,对输入信号进行线性或非线性的时间域或频率域处理,以达 到特定的信号特征提取、增强或抑制的效果。FIR数字滤波器是一种离散时间滤 波器,其输出仅与过去的输入有关,具有易于实现、稳定性和线性相位等优点。
MATL AB与窗函数法结合 设计FIR数字滤波器的研究
01 引言
目录
02
数字滤波器的基本原 理
03 MATLAB在数字滤波器 设计中的应用
04
窗函数法在数字滤波 器设计中的应用
05 参考内容
引言
引言
随着数字化时代的到来,数字滤波器在信号处理领域的应用越来越广泛。其 中,FIR(有限冲激响应)数字滤波器因其特有的性质,如易于实现、稳定性和 线性相位等,成为应用最广泛的一种数字滤波器。在设计中,窗函数法作为一种 有效的优化技术,可以降低滤波器的复杂性并提高其性能。本次演示将介绍 MATLAB与窗函数法结合设计FIR数字滤波器的研究,旨在为相关领域的研究和实 践提供有益的参考。
1、简单易行,便于实现; 2、可以根据需要选择不同的窗函数,以满足不同的性能要求;
3、设计的滤波器具有稳定的线 性相位特性。
3、设计的滤波器具有稳定的线性相位特性。
1、设计的滤波器在过渡带可能会有较高的旁瓣水平,导致频率选择性能不够 理想;
2、对于某些窗函数,旁瓣衰减速度较慢,导致滤波器性能下降;
3、对滤波器进行实施:将优化后的系数用于滤波器的实现,可采用直接型、 级联型等不同的结构。
3、对滤波器进行实施:将优化 后的系数用于滤波器的实现
3、对滤波器进行实施:将优化后的系数用于滤波器的实现,可采用 直接型、级联型等不同的结构。
基于matlab的FIR数字滤波器设计(多通带,窗函数法)
数字信号处理课程设计报告设计名称:基于matlab的FIR数字滤波器设计彪一、课程设计的目的1、通过课程设计把自己在大学中所学的知识应用到实践当中。
2、深入了解利用Matlab设计FIR数字滤波器的基本方法。
3、在课程设计的过程中掌握程序编译及软件设计的基本方法。
4、提高自己对于新知识的学习能力及进行实际操作的能力。
5、锻炼自己通过网络及各种资料解决实际问题的能力。
二、主要设计内容利用窗函数法设计FIR滤波器,绘制出滤波器的特性图。
利用所设计的滤波器对多个频带叠加的正弦信号进行处理,对比滤波前后的信号时域和频域图,验证滤波器的效果。
三、设计原理FIR 滤波器具有严格的相位特性,对于信号处理和数据传输是很重要的。
目前 FIR滤波器的设计方法主要有三种:窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。
常用的是窗函数法和切比雪夫等波纹逼近的最优化设计方法。
本实验中的窗函数法比较简单,可应用现成的窗函数公式,在技术指标要求高的时候是比较灵活方便的。
如果 FIR 滤波器的 h(n)为实数, 而且满足以下任意条件,滤波器就具有准确的线性相位:第一种:偶对称,h(n)=h(N-1-n),φ (ω)=-(N-1)ω/2第二种:奇对称,h(n)=-h(N-1-n), φ(ω)=-(N-1)ω/2+pi/2对称中心在n=(N-1)/2处四、设计步骤1.设计滤波器2.所设计的滤波器对多个频带叠加的正弦信号进行处理3.比较滤波前后信号的波形及频谱五、用窗函数设FIR 滤波器的基本方法基本思路:从时域出发设计 h(n)逼近理想 hd(n)。
设理想滤波器的单位响应在时域表达为hd(n),则Hd(n) 一般是无限长的,且是非因果的,不能直接作为FIR 滤波器的单位脉冲响应。
要想得到一个因果的有限长的滤波器单位抽样响应 h(n),最直接的方法是先将hd(n)往右平移,再迕行截断,即截取为有限长因果序列:h(n)=hd(n)w(n),并用合适的窗函数迕行加权作为FIR 滤波器的单位脉冲响应。
基于matlab的数字滤波器的设计及仿真
程序编写
clearclose allwls=0.2*pi;wlp=0.35*pi;whp=0.65*pi;B=wlp-wls;N=ceil(12/0.15);wc=[wlp/pi-6/N,whp/pi+6/N];hn=fir1(N-1,wc,blackman(N));n=0:79;subplot(2,1,1);stem(n,hn,".")[h,w]=freqz(hn,1,256);subplot(2,1,2);plot(w/pi,20*log10(abs(h)));grid;
滤波器的仿真
第16第页1/2共页3/3共页33页
三个信号叠加:
第17第页1/2共页3/3共页33页
滤波后的结果:
可见FDAtool设计的滤波器滤波的效果很好!
二、MATLAB环境下FIR数字滤波器的设计
窗函数法等波纹逼近法频率采样法
第18第页1/2共页3/3共页33页
窗函数法
用窗函数法设计FIR滤波器时,先根据wc和N求出相应的理想滤波器单位脉冲响应hd(n);选择合适的窗函数w(n)来截取hd(n)的适当长度(即阶数),以保证实现要求的阻带衰减;最后得到FIR滤波器单位脉冲响应:h(n)= hd(n)*w(n).
第23第页2/2共页3/3共页33页
第24第页2/2共页3/3共页33页
四、两个有趣的实验
1、利用MATLAB进行声音滤波:利用MATLAB读取wav格式的声音文件,对信号进行离散傅里叶变换,得到其频谱图,给信号加杂音,然后设计一个数字滤波器将杂音滤除,得到原音,最后比较滤波器的滤波效果。
第25第页2/2共页3/3共页33页
第31第页2/2共页3/3共页33页
利用MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器
目录目录 (1)摘要 (I)Abstract (II)1 原理说明 (1)1.1 数字滤波技术 (1)1.2 FIR滤波器 (2)1.3 窗函数 (2)2 滤波器设计 (4)2.1 滤波器设计要求 (4)2.2 设计函数的选取 (4)2.3 窗函数构造 (5)2.4 设计步骤 (8)2.5 设计方法 (8)3 滤波器测试 (15)3.1 滤波器滤波性能测试 (15)3.2 滤波器时延测量 (16)3.3 滤波器稳定性测量 (17)4 心得体会 (19)5 参考文献 (20)附件一: (21)附件二: (23)摘要Abstract1 原理说明随着信息时代的到来,数字信号处理已经成为一门极其重要的学科和技术,并且在通信、语音、图像、自动控制等众多领域得到了广泛的应用。
在数字信号处理中,数字滤波器占有极其重要的地位,它具有精度高、可靠性好、灵活性大等特点。
现代数字滤波器可以用软件或硬件两种方式来实现。
软件方式实现的优点是可以通过滤波器参数的改变去调整滤波器的性能。
MATLAB是一种面向科学和工程计算的语言,它集数值分析、矩阵运算、信号处理和图形显示于一体,具有编程效率高、调试手段丰富、扩充能力强等特点。
MATLAB的信号处理工具箱具有强大的函数功能,它不仅可以用来设计数字滤波器,还可以使设计达到最优化,是数字滤波器设计的强有力工具。
1.1 数字滤波技术数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重,故实质上是一种程序滤波。
与此对应的就是模拟滤波,由于模拟滤波牵扯到的其他知识太多在此不详细介绍了,模拟滤波主要无源绿波(直接用电阻、电容、电感等不外接电源的元件组成的)与有源滤波(如运算放大器等需要外接电源组成的),其目的是将信号中的噪音和干扰滤去或者将希望得到的频率信号滤出为我所用。
数字滤波的出现克服了模拟滤波的很多不足,具有以下优点:A.是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。
matlab中利用窗函数设计单一频率滤波器
matlab中利用窗函数设计单一频率滤波器的应用实例如下:%本函数利用窗函数法设计带通滤波器,主要用来滤出单一频率,即中心频率%data是输入的数据, centerFre是带通的中心频率, offsetFre是频偏,最终带通为centerFre +- offsetFre/2 %,sampFre是采样率function y = BPassFilter(data, centerFre, offsetFre, sampFre)%设计I型带通滤波器M = 0 ; %滤波器阶数(必须是偶数)Ap = 0.82; %通带衰减As = 45; %阻带衰减Wp1 = 2*pi*(centerFre - offsetFre)/sampFre; %算出下边频Wp2 = 2*pi*(centerFre + offsetFre)/sampFre; %算出上边频% (1)矩形窗N = ceil(3.6*sampFre/offsetFre); %计算滤波器阶数,采用矩形窗,3dB截频在中心频率到上下边频的中点M = N - 1;M = mod(M,2) + M ; %使滤波器为I型(偶数)%单位脉冲响应的下脚标h = zeros(1,M+1); %单位冲击响应变量赋初值for k = 1:(M+1);if (( k -1 - 0.5*M)==0)h(k) = Wp2/pi - Wp1/pi;elseh(k) = Wp2*sin(Wp2.*(k - 1 - 0.5*M))/(pi*(Wp2*(k -1 - 0.5*M))) - Wp1*sin(Wp1*(k - 1 -0.5*M))/(pi*(Wp1*(k -1 - 0.5*M)));endend% (2) Hann Window% N = ceil(12.4*sampFre/offsetFre); %计算滤波器阶数,采用矩形窗,3dB截频在中心频率到上下边频的中点% M = N - 1;% M = mod(M,2) + M ; %使滤波器为I型(偶数)% h = zeros(1,M+1); %单位冲击响应变量赋初值% for k = 1:(M+1);% if (( k -1 - 0.5*M)==0)% h(k) = Wp2/pi - Wp1/pi;% else% h(k) = Wp2*sin(Wp2.*(k - 1 - 0.5*M))/(pi*(Wp2*(k -1 - 0.5*M))) - Wp1*sin(Wp1*(k - 1 -0.5*M))/(pi*(Wp1*(k -1 - 0.5*M)));% end% end% K = 0:M;% w = 0.5 - 0.5*cos(2*pi*K/M);% h = h.*w;% (3)Hamming Window% N = ceil(14*sampFre/offsetFre); %计算滤波器阶数,采用矩形窗,3dB截频在中心频率到上下边频的中点% M = N - 1;% M = mod(M,2) + M ; %使滤波器为I型(偶数)% h = zeros(1,M+1); %单位冲击响应变量赋初值% for k = 1:(M+1);% if (( k -1 - 0.5*M)==0)% h(k) = Wp2/pi - Wp1/pi;% else% h(k) = Wp2*sin(Wp2.*(k - 1 - 0.5*M))/(pi*(Wp2*(k -1 - 0.5*M))) - Wp1*sin(Wp1*(k - 1 -0.5*M))/(pi*(Wp1*(k -1 - 0.5*M)));% end% end% K = 0:M;% w = 0.54 - 0.46*cos(2*pi*k/M);% h = h.*w;% (4)Blackman window% N = ceil(22.8*sampFre/offsetFre); %计算滤波器阶数,采用矩形窗,3dB截频在中心频率到上下边频的中点% M = N - 1;% M = mod(M,2) + M ; %使滤波器为I型(偶数)% h = zeros(1,M+1); %单位冲击响应变量赋初值% for k = 1:(M+1);% if (( k -1 - 0.5*M)==0)% h(k) = Wp2/pi - Wp1/pi;% else% h(k) = Wp2*sin(Wp2.*(k - 1 - 0.5*M))/(pi*(Wp2*(k -1 - 0.5*M))) - Wp1*sin(Wp1*(k - 1 - 0.5*M))/(pi*(Wp1*(k -1 - 0.5*M)));% end% end% K = 0:M;% w = 0.42 - 0.5*cos(2*pi*K/M) + 0.08*cos(4*pi*K/M);% h = h.*w;y = filter(h,[1],data);。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录目录 (1)摘要 (2)1 MATLAB的概况 (2)2 MATLAB结合窗函数设计法原理 (3)3 各类窗函数简介 (6)3.1 基本窗函数 (6)3.2 矩形窗函数 (6)3.3汉宁窗(升余弦窗) (7)4 方案设计 (8)5 编程实现 (8)5.1信号的编程实现 (8)5.2 带通滤波器的设计 (10)5.3 高通滤波器的设计 (12)5.4 信号的分离 (13)实验总结 (16)致谢 (17)参考文献 (18)摘要现在数字滤波器广泛用于通信与信号处理领域同时MATLAB也在信号处理和仿真开发中,发挥着越来越重要的地位。
此次设计正是基于MATLAB数字滤波器的分频滤波设计。
关键字:MATLAB 数字滤波器分频滤波1 MATLAB的概况MATLAB是矩阵实验室(Matrix Laboratory)之意。
除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.应用MATLAB这一软件来设计滤波器,与传统的设计思路相比是非常的简便的.具体来说主要有以下几点:1) MATLAB的GUID可以提供给使用者一个进行人机交换的环境,在此环境中,使用者没有必要了解程序内部具体的编写情况,在这个界面上他只要输入他所期望的滤波器的性能指标就可以了。
2) 利用MATLAB可以进行系统仿真,也就是说,使用者可以通过计算机进行对数字滤波器的频率响应图据的处理和波形的检测,不像以前必须借助一定的实验器材才可以得到。
3) MATLAB内部有丰富的函数可供调用,使用者只需要根据自己的需要查到所需要的函数名,那就可以直接调用使用了.不需要自己把函数详细的编写出来.使编写内部程序变的简单。
MATLAB包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.2 MATLAB结合窗函数设计法原理数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。
所以IIR 滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。
FIR数字滤波器的单位脉冲响应是有限长序列。
它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。
FIR滤波器具有严格的相位特性,这对于语音信号处理和数据传输是和重要的。
目前FIR滤波器的设计方法主要有三种:窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。
常用的是窗函数法和切比雪夫等波纹逼近的最优化设计方法。
因此设计FIR 滤波器的方法之一可以从时域出发,截取有限长的一段冲击响应作为H(z)的系数,冲击响应长度N 就是系统函数H(z)的阶数。
只要N 足够长,截取的方法合理,总能满足频域的要求。
一般这种时域设计、频域检验的方法要反复几个回合才能成功。
要设计一个线性相位的FIR 数字滤波器,首先要求理想频率响应)(jw d e H 。
)(jw d e H 是w 的周期函数,周期为π2,可以展开成傅氏级数:∑∞-∞=-=n jwndjwd e n h e H )()( (2-1)使用上述的传递函数去逼近)(jwd e H ,一个理想的频率响应)(jw d e H 的傅立叶反变换:ωπωπd de H n h nj jwd d )(21)(20⎰=(2-2)其中)(n h d 是与理想频响对应的理想单位抽样响应序列。
但不能用来作为设计FIR DF 用的h(n),因为)(n h d 一般都是无限长、非因果的,物理上无法实现。
为了设计出频响类似于理想频响的滤波器,可以考虑用)(n h 来近似)(n h d 。
窗函数的基本思想:先选取一个理想滤波器(它的单位抽样响应是非因果、无限长的),再截取(或加窗)它的单位抽样响应得到线性相位因果FIR 滤波器。
这种方法的重点是选择一个合适的窗函数和理想滤波器。
设x(n)是一个长序列,w(n)是长度为N 的窗函数,用w(n)截断x(n),得到N 点序列(n)x n ,即)()()(n w n x n x n = (2-3)在频域上则有()()()()⎰--⋅=ππj j j d e π21eθθωθωW e X X N (2-4) 由此可见,窗函数w(n)不仅仅会影响原信号x(n)在时域上的波形,而且也会影响到频域内的形状。
MATLAB 信号工具箱主要提供了以下几种窗函数,如表1-1所示:窗窗 函 数矩形窗 Boxcar 三角窗 Triang 海明窗 Hamming 汉宁窗 Hanning 布莱克曼 Blackman 切比雪夫窗 Chebyshev 凯塞窗Kaiser表1-1 MATLAB 窗函数加矩形窗后的频谱和理想频谱可得到以下结论:加窗使过渡带变宽,过渡带的带宽取决于窗谱的主瓣宽度。
矩形窗情况下的过渡带宽是N /4π。
N 越大,过渡带越窄、越陡;过渡带两旁产生肩峰,肩峰的两侧形成起伏振荡。
肩峰幅度取决于窗谱主瓣和旁瓣面积之比。
矩形窗情况下是8.95%,与N 无关。
工程上习惯用相对衰耗来描述滤波器,相对衰耗定义为:])0(/)(l g [20])(/)(lg[20)(0H w H e H e H w A j jw == (2-5)这样两个肩峰点的相对衰耗分别是0.74dB 和-21dB 。
其中(-0.0895)对应的点的值定义为阻带最小衰耗。
以上的分析可见,滤波器的各种重要指标都是由窗函数决定,因此改进滤波器的关键在于改进窗函数。
窗函数谱的两个最重要的指标是:主瓣宽度和旁瓣峰值衰耗。
旁瓣峰值衰耗定义为:旁瓣峰值衰耗=20lg(第一旁瓣峰值/主瓣峰值) (2-6)为了改善滤波器的性能,需使窗函数谱满足:(1)主瓣尽可能窄,以使设计出来的滤波器有较陡的过渡带。
(2)尽量减少最大旁瓣的相对幅度,也就是能量集中于主瓣,以减小带内、带外波动的最大幅度,增大阻带衰减。
一般来说,以上两点很难同时满足。
当选取主瓣宽度很窄时,旁瓣的分量势必增加,从而带内、带外的波动也增加了;当选取最小的旁瓣幅度时,降低了带内、带外的波动,但是过渡带的陡度减小了。
所以实际采用的窗函数其特性往往是它们的折中,在保证主瓣宽度达到一定要求的前提下,适当牺牲主瓣宽度来换取旁瓣波动的减小。
3 各类窗函数简介数字信号处理领域中所用到的窗函数主要分为两大类,分别是:基本窗函数与广义窗函数。
3.1 基本窗函数基本窗函数包括以下三类,主要有:矩形窗函数、三角窗函数和巴特利特窗函数。
下面就对这些窗函数展开介绍。
3.2 矩形窗函数矩形窗(Rectangular Window)函数的时域形式可以表示为:⎩⎨⎧-≤≤==其他,010,1)()(N n n R n w N (3-1)它的频域特性为()⎪⎭⎫ ⎝⎛⎪⎭⎫ ⎝⎛=⎪⎭⎫ ⎝⎛--2sin 2sin ee 21j j ωωωωN W N R (3-2) Boxcar 函数:生成矩形窗调用方式w = boxcar (n):输入参数n 是窗函数的长度;输出参数w 是由窗函数的值组成的n 阶向量。
从功能上讲,该函数又等价于w = ones(n,1)。
3.3汉宁窗(升余弦窗)汉宁窗(Hanning )函数时域形式可表示为: ())(12cos 121n R N n n W N ⎥⎦⎤⎢⎣⎡⎪⎭⎫ ⎝⎛--=π (公式3-7)利用傅利叶变换的调制特性,由上式可得汉宁窗的平谱函数为: ()()ωωπωπωω⎪⎭⎫⎝⎛--⎭⎬⎫⎩⎨⎧⎥⎦⎤⎢⎣⎡⎪⎭⎫ ⎝⎛-++⎪⎭⎫ ⎝⎛--+=21121225.05.0N j R R R j e N W N W W eW()ωω⎪⎭⎫⎝⎛--=21N j e W (3-9)式中,()()ωωω⎪⎭⎫ ⎝⎛--=21N j R j R eW e W (3-9)当N 远大于1时,上式可近似表示为:()()⎪⎭⎫ ⎝⎛++⎥⎦⎤⎢⎣⎡⎪⎭⎫ ⎝⎛-+≈N W N W W W R R R πωπωωω2225.05.0(公式3-10)这三部分之和使旁瓣互相抵消,能量更集中在主瓣,汉宁窗函数的最大旁瓣值比主瓣值低31dB ,但是主瓣宽度比矩形窗函数的主瓣宽度增加了1倍,为8π/N 。
hanning 函数:生成汉宁窗 调用方式:(1) w = hanning(n):输入参数n 是窗函数的长度;输出参数w 是由窗函数的值组成的n 阶向量。
注意:此函数不返回是零点的窗函数的首尾两个元素。
(2) w = hanning(n,'symmetric'):与上面相类似。
(3) w = hanning(n,'periodic'):此函数返回包括为零点的窗函数的首尾两个元素。
4 方案设计1、利用MATLAB语言创建不同频段的信号对其进行频谱分析2、根据信号的频谱特征设计不同的数字滤波器,用设计的滤波器对信号进行滤波,并对频谱图进行分析。
将信号进行分离;分析得到的信号的频谱。
3、将不同信号合成一路信号,分析合成信号的时域和频域特点;4、将合成信号分别通过设计好的滤波器,分离出原来的信号。
5 编程实现5.1信号的编程实现subplot(3,3,1)t=linspace(0,80,100)y1=4*cos(10*pi*t)plot(t,y1)title('y1的时域图形')xlabel('t')ylabel('Y1')subplot(3,3,2)z1=fft(y1)plot(t/pi,abs(z1))title('y1经傅里叶变换后的图形')xlabel('w/pi')ylabel('Y1')subplot(3,3,3)t=linspace(0,100,100)y2=10*cos(5000*pi*t)plot(t,y2)title('y2的时域图形')xlabel('t')ylabel('Y2')subplot(3,3,4)z2=fft(y2)plot(t/pi,abs(z2))title('y2经傅里叶变换后的图形') xlabel('w/pi')ylabel('Y2')subplot(3,3,5)t=linspace(0,20000,100)y3=8*cos(1000*pi*t)plot(t,y3)title('y3的时域图形')xlabel('t')ylabel('Y3')subplot(3,3,6)z3=fft(y3)plot(t/pi,abs(z3))title('y3经傅里叶变换后的图形') xlabel('w/pi')ylabel('Y3')subplot(3,3,7)y=y1+y2+y3plot(t/pi,y)title('y的时域图形')xlabel('t')ylabel('Y')z=z1+z2+z3subplot(3,3,8)plot(t/pi,abs(z))title('y的傅里叶变换')xlabel('w/pi')ylabel('Y')5.2 带通滤波器的设计wls = 0.2*pi;wlp = 0.35*pi;whp = 0.65*pi;wc = [wlp/pi,whp/pi];B = wlp-wls;N = ceil(8*pi/B); n=0:N-1; window= hanning(N);[h1,w]=freqz(window,1); subplot(221)stem(window);axis([0 60 0 1.2]);xlabel('n');title('Hanning窗函数'); subplot(222)plot(w/pi,20*log(abs(h1)/abs(h1(1)))); axis([0 1 -350 0]);xlabel('w/pi');ylabel('幅度(dB)');title('Hanning窗函数的频谱');hn = fir1(N-1,wc, hanning (N));[h2,w]=freqz(hn,1,512);subplot(223) stem(n,hn);axis([0 60 -0.25 0.25]);xlabel('n'); ylabel('h(n)');title('Hanning窗函数的单位脉冲响应'); subplot(224)plot(w/pi,20*log(abs(h2)/abs(h2(1)))); xlabel('w/pi');ylabel('幅度(dB)');5.3 高通滤波器的设计wp=0.4*pi;ws=0.3*pi;Bt=wp-ws;N=ceil(8*pi/Bt);wc=(wp+ws)/2/pi;window= hamming(N);[h1,w]=freqz(window,1);subplot(221)stem(window);axis([0 81 0 1.2]);grid;xlabel('n');title('Hamming窗函数');subplot(222)plot(w/pi,20*log(abs(h1)/abs(h1(1))));axis([0 1 -350 0]);grid;xlabel('w/pi');ylabel('幅度(dB)');title('Hamming窗函数的频谱');subplot(223)plot(w/pi,20*log(abs(h2)/abs(h2(1))));grid;xlabel('w/pi');ylabel('幅度(dB)');hn = fir1(N-1,wc, hamming (N));[h2,w]=freqz(hn,1,512); subplot(224)stem(n,hn);grid;xlabel('n');ylabel('h(n)');title('Hamming窗函数的单位脉冲响应');5.4 信号的分离经带通滤波器分离的程序及结果t=linspace(0,2000,1000)y=4*cos(10*pi*t)+10*cos(5000*pi*t)+8*cos(1000*pi*t); wls = 0.2*pi;wlp = 0.35*pi;whp = 0.65*pi;wc = [wlp/pi,whp/pi];B = wlp-wls;N = ceil(8*pi/B);n=0:N-1;window= hanning(N);[h1,w]=freqz(window,1);hn = fir1(N-1,wc, hanning (N)); [h2,w]=freqz(hn,1,512);z=fftfilt(h1,h2,y)plot(abs(z))title('滤波后的频域图') xlabel('w') ylabel('Y') z1=ifft(z)subplot(2,1,2) plot(abs(z1))title('z逆变换后得到的的时域图形') xlabel('t') ylabel('Y')经高通滤波器分离的程序及结果t=linspace(0,2000,1000)y=4*cos(10*pi*t)+10*cos(5000*pi*t)+8*cos(1000*pi*t);wp=0.4*pi; ws=0.3*pi; Bt=wp-ws;N=ceil(8*pi/Bt);wc=(wp+ws)/2/pi;window= hamming(N);[h1,w]=freqz(window,1);hn = fir1(N-1,wc, hamming (N));[h2,w]=freqz(hn,1,512);z=fftfilt(h1,h2,y)plot(abs(z)); title('滤波后的频域图');xlabel('w') ylabel('Y') z1=ifft(z)subplot(2,1,2) plot(abs(z1))title('z逆变换后得到的的时域图形') xlabel('t') ylabel('Y')实验总结经过这次课程设计有进一步学习并熟练了MATLAB,这次课程设计确实是比较基础的东西,也不是很难,可能以后会面临更多、更难的关于MATLAB的问题,但我认为只要有耐心,一般的问题都还是可以一步一步的解决的。