窗函数法设计FIR中,如何选择窗函数和阶数N

在用窗函数法设计FIR滤波器时,给出了滤波器要求的具体指标,包括通带频率fp、阻带频率fs、通带波纹Rp和阻带衰减As等,有了这些指标后,是否什么窗函数都可以选择呢?答案是否定的。那么怎么选择窗函数呢?在本小节中将说明窗函数的选择和滤波器阶数N的选择。

不同窗函数的阻带最小衰减是不相同的,例如我们要求阻带衰减为50dB,则矩形窗和汉宁窗的最小衰减分别为21dB和44dB,若用这两种窗函数,无论N有多长,都没有办法满足阻带衰减达到50dB。为了满足阻带衰减达到50dB,只有选择海明窗,因为它的阻带衰减能达到53dB。所以窗函数的选择主要是根据滤波器指标中对As的要求。在选择窗函数后又怎么决定滤波器的阶数N呢?在设定的滤波器指标中给出了通带频率fp和阻带频率fs,在通带频率fs和阻带频率fs之间是过渡带,设△f=fs-fp,,则过渡带应与对应窗函数的“精确过渡带宽”相等。设把精确过渡带宽表示为dw/N,则对于任意某一种窗函数就应有

△f=dw/N

这样可得N为

N=dw/△f

根据上表,以海明窗为例,N=6.6π/△f,注意在计算中,△f是归一化的角频率。综上所述,经过渡带可求出FIR滤波器的阶数。对于带通滤波器或带阻滤波器,通带频率有fp1及fp2,阻带频率有fs1及fs2,以带通滤波器为例,分别求出△f1=fp1-fs1及△f2=fs2-fp2,从△f1和△f2之间选择小的一个作为△f:

△f=min[△f1,△f2]

式中:min[·]表示选用最小值。

案例、要求设计一个低通滤波器,采样频率为100Hz,通带频率fp=3Hz,阻带频率fs=5Hz;而通带波纹Rp=3dB,阻带衰减As=50dB。由于设计要求As=50dB,分析可知选择海明窗能满足要求,所以在窗函数法中用海明窗。程序如下:

clear all; clc; close all

Fs=100;                          % 采样频率 
Fs2=Fs/2;                        % 奈奎斯特频率
fp=3; fs=5;                      % 通带和阻带频率
Rp=3; As=50;                     % 通带波纹和阻带衰减
wp = fp*pi/Fs2; ws = fs*pi/Fs2;  % 通带和阻带归一化角频率
deltaw= ws - wp;                 % 过渡带宽Δω的计算
N = ceil(6.6*pi/ deltaw);        % 按海明窗计算所需的滤波器阶数N(按式(3-13-1))
N = N + mod(N,2);                % 保证滤波器系数长N+1为奇数
wind = (hamming(N+1))';          % 海明窗计算
Wn=(3+5)/100;                    % 计算截止频率
b=fir1(N,Wn,wind);               % 用fir1函数设计FIR第1类滤波器
[db,mag,phs,gdy,w]=freqz_m(b,1); % 计算滤波器响应
% 作图
subplot 211; plot(w*Fs/(2*pi),db,'k','linewidth',2);
title('(a)低通滤波器的幅值响应');
grid; axis([0 20 -70 10]); 
xlabel('频率/Hz');  ylabel('幅值/dB')
set(gca,'XTickMode','manual','XTick',[0,3,5,20])
set(gca,'YTickMode','manual','YTick',[-50,0])
subplot 212; stem(1:N+1,b,'k');
xlabel('频率/Hz');  ylabel('幅值/dB')
title('(b)低通滤波器的脉冲响应');
xlabel('样点');  ylabel('幅值')
axis([0 167 -0.05 0.1]); 
set(gca,'XTickMode','manual','XTick',[1,84,167])
set(gcf,'color','w');

运行结果如下:

说明:
①因为选择了海明窗,按式N=dw/△f求出滤波器阶数N:
N = ceil(6.6 * pi/ deltaw)
②一般设计的FIR滤波器都是第1类FIR滤波器,要求脉冲序列长N是奇数。而从①
中求得的滤波器阶数N不知是偶数还是奇数。通过N = N + mod(N,2)

保证滤波器阶数N为偶数,而脉冲响应序列长将是N+1,即为奇数,满足第1类FIR滤波器要求。滤波器阶数若为N,脉冲响应序列的长度总为N+1,在FIR滤波器中脉冲响应序列的长度与滤波器阶数总差1。

③在计算窗函数长度时用的deltaw是归一化角频率,而在fir1函数中的Wn用的是归一化频率,这两者的单位是不同的,且截止频率Wn的计算是用Wn=(fp+fs)/2。

运行程序后得上图,从图中可看出滤波器完全满足设计的要求,在5Hz处阻带衰减大于50dB。

参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)

  • 12
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在数字信号处理FIR滤波器是一种常用的数字滤波器,它具有线性相位和稳定性等优点,广泛应用于信号处理设计FIR滤波器的一种常见方是使用窗函数。下面我们来介绍一下窗函数设计FIR滤波器的步骤。 1. 确定滤波器的阶数和截止频率 首先需要确定滤波器的阶数和截止频率,这通常是根据实际应用的要求来确定的。阶数决定了滤波器的复杂度,截止频率决定了滤波器的频率特性。 2. 计算归一化的数字正弦函数 根据滤波器的阶数和截止频率,可以计算出相应的归一化的数字正弦函数。假设滤波器的阶数为N,截止频率为ωc,归一化的数字正弦函数为: h(n) = (sin(ωc(n-N/2)))/(π(n-N/2)) 其n表示滤波器的序号,N表示滤波器的阶数,ωc表示归一化的截止频率。 3. 选择窗函数 窗函数是一种衰减函数,用于将滤波器的频率响应逐渐变为零。常用的窗函数有矩形窗、汉宁窗、汉明窗、布莱克曼窗等。在选择窗函数时需要考虑窗函数的主瓣宽度和旁瓣衰减等因素。 4. 计算窗函数 根据选择窗函数,可以计算出相应的窗函数系数。以矩形窗为例,窗函数系数为1,即w(n)=1。 5. 计算滤波器系数 将窗函数系数和归一化的数字正弦函数相乘,即可计算出滤波器的系数。假设窗函数系数为w(n),归一化的数字正弦函数为h(n),则滤波器系数为: b(n) = h(n) * w(n) 6. 归一化 最后需要对滤波器系数进行归一化处理,以便在实际应用得到正确的滤波效果。归一化方通常是将滤波器系数除以系数之和。 以上就是窗函数设计FIR滤波器的步骤。通过这种方可以得到一种滤波器的数字实现。在实际应用,可以选择不同的窗函数和截止频率,以满足不同的滤波要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值