fir数字滤波器设计与软件实现_数字与信号处理实验6 有限冲激响应(FIR)数字滤波器的设计...

实验六 有限冲激响应(FIR)数字滤波器的设计

 一、实验要求

    综合运用数字信号处理课程的理论知识进行频谱分析以及滤波器设计,通过理论推 导得出相应结论,并进行计算机仿真,从而复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力。   

二、实验原理            

FIR滤波器的设计问题在于寻求一系统函数b84a80599efe325bbbf789638b5db157.png,使其频率响应3b007cc221f03ff2ab3158e67e918268.png逼近滤波器要求的理想频率响应d596065239bca1037c3ba84a1c41fb21.png,其对应的单位脉冲响应ce5275227bef227a5a43e28fda94c9d8.png

1.用窗函数设计FIR滤波器的基本方法

设计思想:从时域从发,设计df5ed23bf39946fc32b256a1d6715c88.png逼近理想6ad34553e7a0f575dcd48c2e117705fe.png。设理想滤波器d596065239bca1037c3ba84a1c41fb21.png的单位脉冲响应为6ad34553e7a0f575dcd48c2e117705fe.png。以低通线性相位FIR数字滤波器为例。

4a2aea8be517c5844742f930304a35a2.png

ce5275227bef227a5a43e28fda94c9d8.png一般是无限长的,且是非因果的,不能直接作为FIR滤波器的单位脉冲响应。要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断7f956043d0a262dcae185bc8ef1bef62.png,即截取为有限长因果序列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应。按照线性相位滤波器的要求,h(n)必须是偶对称的。对称中心必须等于滤波器的延时常数,即

3cf713b560df904efdbc28b625abc692.png47444028a19fa1d5e9d5635746c8fd81.png

用矩形窗设计的FIR低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,这个现象称为吉布斯(Gibbs)效应。为了消除吉布斯效应,一般采用其他类型的窗函数。

2.典型的窗函数

(1)矩形窗(Rectangle Window)

1ee16c520d98c8801d299c6632eb5f21.png

其频率响应和幅度响应分别为: e90b974dcd86c23f1b6089658bef9a0d.png

(2)三角形窗(Bartlett Window)

c02314b2b8439ebc8a480217ea2fb3a6.png  4dc35e3d62a46088daf7e31fbda66f15.png  

75b4c7f3c33ef235bbf65c176ad9ea4e.png 

 16f718fae1b28c95ab71ba656658c860.png

其频率响应为: 81f5cf95b761dd14af420e2345297288.png

(3)汉宁(Hanning)窗,又称升余弦窗

c9c1941fd5ecbabee088a98a0b5139d4.png 

其频率响应和幅度响应分别为:

267eabe3d666d96a0594a2e0a23a826f.png

 

(4)汉明(Hamming)窗,又称改进的升余弦窗

d439818d5d595180b15d1215a2eb7e6e.png

其幅度响应为: 

0fd4ff0f81d7391231eb077b4a0d1dee.png

(5)布莱克曼(Blankman)窗,又称二阶升余弦窗

e98f6615630462a15c5f3fed1989dbac.png

其幅度响应为:

14280864ccd857762a9e33b5e558fd0d.pngfe5946d71c1373e3628521b8088ac1e7.png

(6)凯泽(Kaiser)窗

 d4c96cae71d375921e13442e292747e9.png

其中:β是一个可选参数,用来选择主瓣宽度和旁瓣衰减之间的交换关系,一般说来,β越大,过渡带越宽,阻带越小衰减也越大。I0(·)是第一类修正零阶贝塞尔函数。

若阻带最小衰减表示为464a6f021757eb1eee4185a0f2b2ac47.png,β的确定可采用下述经验公式:

8f00c37deb8e50126eacffbed2a5d27f.png

若滤波器通带和阻带波纹相等即δp=δs时,滤波器节数可通过下式确定: 9101e96ec790fa343f8b019c9c67fb09.png

式中:8324dee094f28495f8436a56766bd7dd.png

3.利用窗函数设计FIR滤波器的具体步骤如下:

(1)按允许的过渡带宽度△ω及阻带衰减AS,选择合适的窗函数,并估计节数N:

其中A由窗函数的类型决定。

(2)由给定的滤波器的幅频响应参数求出理想的单位脉冲响应6ad34553e7a0f575dcd48c2e117705fe.png

(3)确定延时值

(4)计算滤波器的单位取样响应df5ed23bf39946fc32b256a1d6715c88.png7f956043d0a262dcae185bc8ef1bef62.png

(5)验算技术指标是否满足要求。

三、实验仪器

       微型计算机、Matlab6.5 教学版、TC 编程环境。

四、实验内容

     (1)编制能产生矩形窗、汉宁窗、汉明窗、三角形窗、布莱克曼窗和凯塞-贝塞尔窗        的窗函数子程序。 

     (2)编写主程序。用不同窗设计线性相位低通FIR 数字滤波器。观察3dB 和20dB 带 宽以及阻带最小衰减,比较四种窗函数对滤波特性的影响。

     (3)对结果进行分析; 

     (4)完成实验报告。 

五、实验结果

1、编制能产生矩形窗、汉宁窗、汉明窗、三角形窗、布莱克曼窗和凯塞-贝塞尔窗的子程序。

      (1)编写amplres.m文件

      function [Hw, w, type, tao] = amplres(h)

N = length(h); tao = (N - 1)/2;

L = floor((N - 1)/2);

n = 1 : L + 1; w = [0 : 1000] * 2 * pi/1000;

if all(abs(h(n) - h(N - n + 1)) < 1e-10)

Hw = 2 * h(n) * cos(((N + 1)/2 - n)' * w) - mod(N, 2) * h(L + 1);

                  type = 2 - mod(N, 2);

                  elseif all(abs(h(n) + h(N - n + 1)) < 1e-10)&&(h(L + 1) * mod(N, 2) == 0)

               Hw = 2 * h(n) * sin(((N + 1)/2-n)' * w);

               type = 4 - mod(N, 2);

else

                  error('错误,这不是线性相位FIR滤波器');

end

       (2)利用amplres求四种线性相位FIR滤波器的幅度函数127d58080723ae2f40fc9e510e879428.png

              2038e76412ec8ecb6387540ec7c4e8a8.png

              1)在命令行窗口输入如下程序

                     h1 = [2, 1, -3, 5, 4, 5, -3, 1, 2]; h2 = [2, 1, -3, 5, 5, -3, 1, 2];

h3 = [2, 1, -3, 5, 0, -5, 3, -1, -2]; h4 = [2, 1, -3, 5, -5, 3, -1, -2];

[H1, w1, type, tao] = amplres(h1);

type1 = type, tao1 = tao,

subplot(221); plot(w1/pi, H1); grid

title('线性相位Ⅰ型FIR滤波器幅度函数');

xlabel('\omega/\pi'); ylabel('H(\omega)');

[H2, w2, type, tao] = amplres(h2);

type2 = type, tao2 = tao,

subplot(222); plot(w2/pi, H2); grid

title('线性相位Ⅱ型FIR滤波器幅度函数');

xlabel('\omega/\pi'); ylabel('H(\omega)');

[H3, w3, type, tao] = amplres(h3);

type3 = type, tao3 = tao,

subplot(223); plot(w3/pi, H3); grid

title('线性相位Ⅲ型FIR滤波器幅度函数');

xlabel('\omega/\pi'); ylabel('H(\omega)');

[H4, w4, type, tao] = amplres(h4);

type4 = type, tao4 = tao,

subplot(224); plot(w4/pi, H4); grid

title('线性相位Ⅳ型FIR滤波器幅度函数');

xlabel('\omega/\pi'); ylabel('H(\omega)');

              2)得到如下图

0ed198f3eab8e1d52b8ee3c271bec84b.png

2、编写主程序。用不同窗设计线性相位低通FIR 数字滤波器。观察3dB 和20dB 带宽以及阻带最小衰减,比较四种窗函数对滤波特性的影响。

(1)分别将如下代码写入命令行窗口

N = 33; wc = pi/4;

a = (N-1)/2;

n = 0:(N-1);

m = n - a + eps;

hdn = sin(wc*m)./(pi*m);

wn = boxcar(N);

hn = hdn.*(wn');

[H, w] = freqz(hn, [1], 1024, 'whole' );

dbH = 20 * log10((abs(H) + eps) / max(abs(H))) ;

figure(1); subplot(1,3,1);

stem(n, hn,'.');

xlabel('n'); ylabel('h(n)' ); title('N=33时设计矩形窗h(n)');

subplot(1,3,2);

plot(w, abs(H));

xlabel('w'); ylabel('H(jw)'); title('h(n)的幅度谱'); axis([0,3,0,1.5]);

subplot(1,3,3);

plot(w/pi,dbH);

xlabel('w/pi'); ylabel('dB'); title('损耗特性'); axis([0, 1,20, 3]);

N = 33; wc = pi/4;

a = (N-1)/2;

n = 0:(N-1);

m = n - a + eps;

hdn = sin(wc*m)./(pi*m);

wn = hanning(N);

hn = hdn.*(wn');

[H, w] = freqz(hn, [1], 1024, 'whole' );

plot(w/pi, dbH);

xlabel('w/pi'); ylabel('dB' ); title('损耗特性'); axis([0, 1,-100, 0]);

dbH = 20 * log10((abs(H) + eps) / max(abs(H))) ;

figure(1); subplot(1,3,1);

stem(n, hn,'.');

xlabel('n'); ylabel('h(n)' ); title('汉宁窗函数设计h(n)');

subplot(1,3,2);

plot(w, abs(H));

xlabel('w'); ylabel('H(jw)'); title('h(n)的幅度谱'); axis([0,3,0,1.5]);

subplot(1,3,3);

plot(w/pi,dbH);

xlabel('w/pi'); ylabel('dB'); title('损耗特性'); axis([0, 1,20, 3]);

N = 33; wc = pi/4;

a = (N-1)/2;

n = 0:(N-1);

m = n - a + eps;

hdn = sin(wc*m)./(pi*m);

wn = hamming(N);

hn = hdn.*(wn');

[H, w] = freqz(hn, [1], 1024, 'whole' );

dbH = 20 * log10((abs(H) + eps) / max(abs(H))) ;

figure(1); subplot(1,3,1);

stem(n, hn,'.');

xlabel('n'); ylabel('h(n)' ); title('哈明窗函数设计h(n)');

subplot(1,3,2);

plot(w, abs(H));

xlabel('w'); ylabel('H(jw)'); title('h(n)的幅度谱'); axis([0,3,0,1.5]);

subplot(1,3,3);

plot(w/pi,dbH);

xlabel('w/pi'); ylabel('dB'); title('损耗特性'); axis([0, 1,20, 3]);

N = 33; wc = pi/4;

a = (N-1)/2;

n = 0:(N-1);

m = n - a + eps;

hdn = sin(wc*m)./(pi*m);

wn = blackman(N);

hn = hdn.*(wn');

[H, w] = freqz(hn, [1], 1024, 'whole' );

dbH = 20 * log10((abs(H) + eps) / max(abs(H))) ;

figure(1); subplot(1,3,1);

stem(n, hn,'.');

xlabel('n'); ylabel('h(n)' ); title('布莱克曼函数设计h(n)');

subplot(1,3,2);

plot(w, abs(H));

xlabel('w'); ylabel('H(jw)'); title('h(n)的幅度谱'); axis([0,3,0,1.5]);

subplot(1,3,3);

plot(w/pi,dbH);

xlabel('w/pi'); ylabel('dB'); title('损耗特性'); axis([0, 1,20, 3]);

(2)分别运行后得如下图

     6b3ce06ff0daa3a823bf98cc0831b6ce.png3a8663b22b284104137f39e9b8624be5.png

d7c86d4cac5ff89d62bc608e472764df.png86c97c0fcaa2bfc3dbe594166e1b7bdc.png

同一个窗函数,N值不同,过渡带的宽度不同,改善不了滤波器阻带的衰减。N的值大,斜率大,N的值小,斜率小。同一窗函数,不同的窗口长度,达到的阻带衰减是相同。

六、实验总结

       通过本次实验我学会了用matlab编制能产生矩形窗、汉宁窗、汉明窗、三角形窗、布莱克曼窗和凯塞-贝塞尔窗的窗函数子程序,以及用不同窗设计线性相位低通FIR 数字滤波器程序;掌握了用matlab设计用不同窗设计线性相位低通FIR 数字滤波器程序;发现了自己在编程方面的不足;在今后的学习中,自己的编程能力有待提高。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值