数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现

这篇具有很好参考价值的文章主要介绍了数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数字信号处理翻转课堂笔记17

The Flipped Classroom17 of DSP

对应教材:《数字信号处理(第五版)》西安电子科技大学出版社,丁玉美、高西全著

一、要点

(1)窗函数法设计FIR线性相位滤波器的原理;
(2)加窗效应:加窗对滤波器特性的影响(难点);
(3)典型窗函数及其主要特性和参数(重点);
(4)窗函数法设计FIR滤波器的步骤(重点);
(5)窗函数法设计FIR滤波器的MATLAB函数及其应用。

二、问题与解答

(1)简述窗函数法设计线性相位FIR滤波器的基本原理。在利用窗函数对理想滤波器单位响应进行截取时,如何同时保证所得FIR滤波器的因果性和线性相位特性?

(2)以矩形窗为例,参考教材图7.2.3,分析加窗效应的原理和结果。主瓣宽度、吉布斯效应的影响

(3)基于MATLAB,画出长度N分别为8、16、32的矩形窗函数的幅度谱,并画出基于矩形窗所设计的相应长度线性相位FIR低通滤波器的幅频响应。根据结果,总结分析滤波器长度N对阻带衰减、过渡带宽度的影响。

(4)自行设定一个固定的滤波器长度N,基于Matlab分别用不同的窗函数设计FIR线性相位高通滤波器(利用fir1函数),画出所设计滤波器的单位响应h(n)和幅频特性。根据所得结果,结合教材表7.2.2,总结各种窗函数的特性和参数。与教材给出的各种窗函数所设计的低通滤波器的单位响应进行比较,比较高通和低通FIR线性相位滤波器时域响应的不同特点。

(5)举例说明窗函数法设计FIR线性相位滤波器的步骤:自行给定滤波器类型和技术指标,利用窗函数法设计FIR线性相位滤波器,按照设计步骤手算(不用MATLAB编程)。

(6)设模拟信号x(t)=cos(800πt)+ cos(1000πt)+ cos(1600πt),用2000Hz的采样频率对其数字化,得到相应的序列x(n)。分别设计IIR滤波器和FIR滤波器(窗函数法),对x(n)进行滤波,要求滤除其中的cos(1000πt)分量(衰减到原幅度的1%以下),且保留的两个频率分量幅度变化不超过1%。a) 请根据以上要求,确定数字滤波器的类型和技术指标参数,完成滤波器设计,并画出所设计IIR、FIR数字滤波器的幅频特性和相频特性、x(n)经过两种滤波器滤波前后的时域信号及其幅度频谱,比较其结果的异同并分析其原因。b) 设x1(t)由所保留的2个分量构成(x(t)=cos(800πt) + cos(1600πt)),y(n)是IIR滤波后的输出,yf(n)是FIR滤波后的输出,利用实验一的方法,对y(n)和yf(n)进行时域恢复,恢复结果分别为y(t)和yf(t),分别画出x1(t)、y(t)和yf(t),比较分析其异同,总结线性相位滤波器的优点。

1、窗函数的基本概念

简述窗函数法设计线性相位FIR滤波器的基本原理。在利用窗函数对理想滤波器单位响应进行截取时,如何同时保证所得FIR滤波器的因果性和线性相位特性?


窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
保证因果性:因为a的存在使函数发生延迟而不是超前,所以保证了因果性。
保证线性相位特性:因为a是常数,所以a的存在使不同频率分量都具有相同的延时,满足了线性相位特性。

2、加窗效应

以矩形窗为例,参考教材图7.2.3,分析加窗效应的原理和结果。主瓣宽度、吉布斯效应的影响
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
卷积:一个函数与另外一个函数翻转平移,将抽样函数进行翻转平移,相乘求积分
主瓣宽度:是4π/N,主瓣宽度与N成反比
(c)当抽样函数中线在窗函数右边界时,卷积的结果是0.5,这个0.5不是一个近似,而是精确值,
因为它是离散信号,离散信号的频谱是以2π为周期的,超过2π的部分会叠加到下一个周期,
(d)对照(f)为峰值情况
(e)对照(f)为谷值情况
吉布斯效应:
在w=wc处形成过渡带,宽度为4π/N
波动频率随着N的增加而增大
结果的最大值和最小值的大小与N无关,导致用此方式设计滤波器时,通带/阻带的衰减是无法控制的

3、窗函数长度与加窗效应

基于MATLAB,画出长度N分别为8、16、32的矩形窗函数的幅度谱,并画出基于矩形窗所设计的相应长度线性相位FIR低通滤波器的幅频响应。根据结果,总结分析滤波器长度N对阻带衰减、过渡带宽度的影响。


代码如下:

%%      代码:
close all;
wc=1/4;
N=8;
alph=(N-1)/2;
wrn=boxcar(N);              %用boxcar函数产生一个矩形窗函数
WRg=fft(wrn,512);           %对矩形窗函数进行快速傅里叶变换
hn=fir1(N-1,wc,boxcar(N));
Hg=fft(hn,512)
Hk=fft(hn,512);
w=(0:511)*2*pi/512;

subplot(2,3,1)
plot(w/pi,20*log10(abs(WRg)/max(abs(WRg))))     %画出窗函数的频域幅度波形
xlabel('ω/π');
ylabel('W_R_g(\omega)/dB')              %学一下怎么写下标和希腊字母
title('(a) N=8')
axis([0,1,-40,5])
grid on;

subplot(2,3,4)
plot(w/pi,20*log10(abs(Hg)/max(abs(Hg))))
xlabel('ω/π');
ylabel('H_g(\omega)/dB')
title('(d) N=8')
axis([0,1,-60,5])
grid on;

N=16;
alph=(N-1)/2;
wrn=boxcar(N);
WRg=fft(wrn,512);
hn=fir1(N-1,wc,boxcar(N));
Hg=fft(hn,512)
Hk=fft(hn,512);
w=(0:511)*2*pi/512;

subplot(2,3,2)
plot(w/pi,20*log10(abs(WRg)/max(abs(WRg))))
xlabel('ω/π');
title('(b) N=16')
axis([0,1,-40,5])
grid on;

subplot(2,3,5)
plot(w/pi,20*log10(abs(Hg)/max(abs(Hg))))
xlabel('ω/π');
title('(e) N=16')
axis([0,1,-60,5])
grid on;

N=32;
alph=(N-1)/2;
wrn=boxcar(N);
WRg=fft(wrn,512);
hn=fir1(N-1,wc,boxcar(N));
Hg=fft(hn,512)
Hk=fft(hn,512);
w=(0:511)*2*pi/512;

subplot(2,3,3)
plot(w/pi,20*log10(abs(WRg)/max(abs(WRg))))
xlabel('ω/π');
title('(c) N=32')
axis([0,1,-40,5])
grid on;

subplot(2,3,6)
plot(w/pi,20*log10(abs(Hg)/max(abs(Hg))))
xlabel('ω/π');
title('(f) N=32')
axis([0,1,-60,5])
grid on;

运行结果:
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

由图分析可知,N越大,过渡带宽度越窄,阻带衰减不变。

4、matlab实现不同窗函数设计FIR高通滤波器

自行设定一个固定的滤波器长度N,基于Matlab分别用不同的窗函数设计FIR线性相位高通滤波器(利用fir1函数),画出所设计滤波器的单位响应h(n)和幅频特性。根据所得结果,结合教材表7.2.2,总结各种窗函数的特性和参数。与教材给出的各种窗函数所设计的低通滤波器的单位响应进行比较,比较高通和低通FIR线性相位滤波器时域响应的不同特点。


代码如下:

clear
N=25;
wc=0.5;
window = boxcar(N);     %矩形窗
% window = bartlett(N); %三角窗
%window = hanning(N);   %汉宁窗
%window = hamming(N);   %哈明窗
%window = blackman(N);  %布莱克曼窗
%window = kaiser(N);    %凯塞窗

hn=fir1(N-1,wc,'high',window);
subplot(2,1,1)
stem(hn)
title('单位脉冲响应')
subplot(2,1,2)
Hn=fft(hn,512);
Hn=Hn';
plot((0:length(Hn)-1)/length(Hn)*2,20*log10(abs(Hn)))
title('滤波器的幅频响应')
xlabel('w/pi')
ylabel('db')

矩形窗:
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

三角窗:
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

汉宁窗:
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

哈明窗:
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

布莱克曼窗:
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

凯塞窗:
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
低通滤波器在N/2两侧的相邻两点为正值,高通滤波器在N/2两侧的相邻两点为负值。

5、窗函数法设计FIR线性相位滤波器的步骤

举例说明窗函数法设计FIR线性相位滤波器的步骤:自行给定滤波器类型和技术指标,利用窗函数法设计FIR线性相位滤波器,按照设计步骤手算(不用MATLAB编程)。

窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习

6、用matlab设计一个FIR滤波器和一个IIR滤波器并滤波

设模拟信号x(t)=cos(800πt)+ cos(1000πt)+ cos(1600πt),用2000Hz的采样频率对其数字化,得到相应的序列x(n)。分别设计IIR滤波器和FIR滤波器(窗函数法),对x(n)进行滤波,要求滤除其中的cos(1000πt)分量(衰减到原幅度的1%以下),且保留的两个频率分量幅度变化不超过1%。a) 请根据以上要求,确定数字滤波器的类型和技术指标参数,完成滤波器设计,并画出所设计IIR、FIR数字滤波器的幅频特性和相频特性、x(n)经过两种滤波器滤波前后的时域信号及其幅度频谱,比较其结果的异同并分析其原因。b) 设x1(t)由所保留的2个分量构成(x(t)=cos(800πt) + cos(1600πt)),y(n)是IIR滤波后的输出,yf(n)是FIR滤波后的输出,利用实验一的方法,对y(n)和yf(n)进行时域恢复,恢复结果分别为y(t)和yf(t),分别画出x1(t)、y(t)和yf(t),比较分析其异同,总结线性相位滤波器的优点。

代码:

%%      代码:

clear
T=1/2000;
n=0:500;
t=n*T;
N=256;
x=cos(800*pi*t)+cos(1000*pi*t)+cos(1600*pi*t);
X=fft(x(1:256),N);

%%      IIR滤波器设计
fpl=800*T;                  %技术指标
fsl=950*T;
fsu=1050*T;
fpu=1200*T;
wp=[fpl,fpu];
ws=[fsl,fsu]
rp=0.083;                   %衰减不大于???
rs=40;                      %衰减不小于???

[Nf,wc]=buttord (wp,ws,rp,rs)
[B,A]=butter(Nf,wc,'stop')

figure(1)
freqz(B,A)
title('IIR滤波器频率响应');

%%      FIR滤波器设计
Bt=fpu-fpl;
M0=ceil(6.2*pi/Bt);
M=M0+mod(M0+1,2);
Wc=[900*T 1300*T];
hn=fir1(M-1,Wc,'stop',hanning(M));      %汉宁窗

figure(2)
A1=[1,zeros(1,M-1)];
freqz(hn,A1)
title('FIR滤波器频率响应');

%滤波及结果
y=filter(B,A,x)
Y=fft(y(240:495),256);
yf=filter(hn,A1,x);
Yf=fft(yf(240:495),256);


figure(3)
subplot(3,2,1)
stem(x(301:360));
title('原信号');
subplot(3,2,3)
stem(y(301:360));
title('IIR滤波输出');
subplot(3,2,5)
stem(yf(301:360));
title('FIR滤波输出');
subplot(3,2,2)
plot((0:127)/127,abs(X(1:128)))
title('原信号幅度频谱');
xlabel('×πrad')
subplot(3,2,4)
plot((0:127)/127,abs(Y(1:128)))
title('IIR滤波输出幅度频谱');
xlabel('×πrad')
subplot(3,2,6)
plot((0:127)/127,abs(Yf(1:128)))
title('FIR滤波输出幅度频谱');
xlabel('×πrad')

t1=-0.1:0.0001:0.1;
x1=cos(800*pi*t1)+cos(1600*pi*t1);
y1=y(300:363);
yf1=yf(300:363);

figure(4)

subplot(3,1,1)
plot((0:0.001:0.099),x1(1001:1100))
title('cos(800*pi*t)+cos(1600*pi*t)');
xt=0;
for n=1:length(y1)
sc=sin(pi*(t1-(n-1)*T)/T)./(pi*(t1-(n-1)*T));
xt=xt+T*y1(n)*sc;
end;
xtf=0;
for n=1:length(yf1)
sc=sin(pi*(t1-(n-1)*T)/T)./(pi*(t1-(n-1)*T));
xtf=xtf+T*yf1(n)*sc;
end;

subplot(3,1,2)
plot((0:0.001:0.099),xt(1001:1100))
axis([0,0.1,-2,2])
title('IIR滤波恢复信号');

subplot(3,1,3)
plot((0:0.001:0.099),xtf(1001:1100))
axis([0,0.1,-2,2])
title('FIR滤波恢复信号');

运行结果:

窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
窗函数法设计滤波器的原理,数字信号处理,信号处理,笔记,matlab,学习
分析:
有关此题的说法,判断正误
A、IIR滤波器输出有明显失真,对,如图4
B、FIR滤波器输出无明显失真,对,如图4
C、相同技术指标下,IIR滤波器的阶次低,FIR滤波器的阶次高,对
D、本题FIR滤波器的长度一定是奇数,错,因为E错
E、必须使用带阻滤波器,错,可以用两个低通滤波器

三、反思总结

暂无文章来源地址https://www.toymoban.com/news/detail-794729.html

到了这里,关于数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 数字信号处理学习1

    数字信号处理学习1

    基本上算是没怎么学过数字信号处理这门课,因为本科的时候,专业方向用不上,现在没法子了,专业使然,只能自己自学了,但是我又不知道该从何学起,就买了一本现代数字信号处理,结果发现人家把第一章基础知识给删了,这我就斯巴达了。。。所以就又搞了本绿皮的

    2024年02月02日
    浏览(13)
  • 数字信号处理6

    数字信号处理6

    昨天简单的复习了一下离散时间信号是什么以及系统的概念、系统要做的工作和系统中几个简单的原件,今天跟着昨天的内容继续学习。 一、离散时间系统的分类: 为什么要对系统进行分类呢,这就像是我们对函数进行分类一样,有些函数有的性质其他函数没有,相同的,

    2024年02月06日
    浏览(10)
  • 数字信号处理5

    数字信号处理5

    好长时间没有更新了,一是这段时间事情比较多,另外一个,我觉得抄书其实意义不大,不如先看书,一个章节看完之后,再写,那样子的话,会效果更好一些,所以我就花了一段时间去把离散时间信号与系统这一章节看完,也有很多的问题,也还没有解决,希望能够在这几

    2024年02月06日
    浏览(19)
  • 【数字信号处理课程设计】基于MATLAB实现语音信号的采集与处理(偏重滤波)

    【数字信号处理课程设计】基于MATLAB实现语音信号的采集与处理(偏重滤波)

    目录 一、目标与任务 二、原理介绍 2.1 录音原理 2.2 滤波器的设计原理及设计方法 2.3 IIR 数字滤波器设计原理 2.4 双线性变换法 三、GUI界面设计与实现 四、基于MATLAB仿真 4.1实验过程 4.2 结果分析 五、总结 5.1 函数用法总结 5.2 心得体会 六、参考文献 这个项目在我的B站上有专

    2024年01月18日
    浏览(15)
  • 实时频谱-2.2数字信号处理

    实时频谱-2.2数字信号处理

    数字信号处理 (digital signal processing),是以数字运算方法实现信号变换、滤波、检测、估值、调制解调以及快速算法等处理的一门学科。数字信号处理具有高精度、高可靠性、可程序控制、可时分复用、便于集成化等优点。其应用领域十分广泛。 图 2-3 显示了泰克 RSA 系列中使

    2024年02月06日
    浏览(10)
  • 数字信号处理实验:数字滤波器的设计与应用

    数字信号处理实验:数字滤波器的设计与应用

    一. 实验目的         1.掌握模拟滤波器的设计方法,以及脉冲响应不变法和双线性变换法设计IIR数字滤波 器的方法,针对实际信号能设计相应的 IIR 数字滤波器,并按要求进行滤波。         2.掌握用窗函数法设计FIR数字滤波器的方法,并通过实验了解各种窗函数对滤

    2024年02月03日
    浏览(12)
  • 使用matlab进行回声处理(三重回声)-数字信号处理课设

    使用matlab进行回声处理(三重回声)-数字信号处理课设

    1.录制一段声音信号,作为原音频信号,生成频域与时域图形,观察与分析其时域 与频域图形。 2.对该音频信号进行时域处理,并且实现对该声音信号添加第一层回声。 3.对该音频信号再继续一次进行时域处理,实现对该声音信号添加第二层回声。 4.将三段音频信号进行合成

    2024年02月03日
    浏览(15)
  • matlab函数转C++(数字信号处理)

    近期主要利用QT完成一个本科的通信教学软件,其中涉及大量matlab转C++的工作,本来是想利用matlab的Coder模块进行转换的,本人小白不太会用,还是自己按着matlab内置函数的代码进行转换,函数写的比较笨,希望大家能够多多指导. 使用的是C++的armadillo矩阵库进行矩阵的运算,

    2024年02月06日
    浏览(13)
  • 数字信号处理----数字上变频和下变频都FPGA实现

    数字信号处理----数字上变频和下变频都FPGA实现

    数字上变频器(DUC)和数字下变频器(DDC)广泛应用于通信系统,用于信号采样速率的转换。当信号从基带转换至中频( IF )带,需要使用数字上变频器。而数字下变频器是用于将信号从中频( IF )带转换为基带。DUC和DDC通常包括使用混频器进行频率转换,此外还有采样率

    2024年01月16日
    浏览(17)
  • 数字信号处理实验:IIR数字滤波器设计及软件实现

    数字信号处理实验:IIR数字滤波器设计及软件实现

    目录 一、实验目的 二、实验原理 三、实验设备 四、实验内容及步骤 五、实验结果及分析 六、实验主程序框图及程序清单 七、实验总结 熟悉用双线性变换法设计IIR数字滤波器的原理与方法; 学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具FDATool)设

    2024年02月12日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包