本文是这篇文章的后续,讨论了两类离散时间滤波器(无限冲激响应IIR和通过Kaiser窗函数法得到的有限冲激响应FIR)在Matlab中的实现。进行了对比分析。给出了代码
本篇目录:
- 待处理信号
- 离散时间滤波器
- 滤波器指标
- IIR滤波器设计
- FIR滤波器设计
- FIR和IIR的效果对比
- IIR和FIR的对比
- 完整代码
- 参考
待处理信号
与连续时间情况一样,待处理的信号是gamme.m函数生成的一段依次从Do、 Re、Mi、...一直到升Do的音频,每个频率持续一秒钟。
function [gam,t] = gamme(duree,fe)
% [do re mi fa sol la si doo]
freqnotes = [262 294 330 349 392 440 494 523];
t = 0:1/fe:duree;
gam = [];
for note=1:8,
gam = [gam, sin(2*pi*freqnotes(note)*t)];
end
N = length(gam);
t = (0:N-1)/fe;
调用函数,生成音频,并使用matlab的soudnsc函数试听
clear all
fe = 8192 ; %采样频率
duree = 1; %每个音符持续1秒
[sig,t] = gamme(duree,fe);
soundsc(sig, fe); % listen
对原始信号进行频率分析
fmin = 250;
fmax = 550;
f = [0:length(sig)-1]*(fe/length(sig));
S = fft(sig)/fe;
figure()
plot(f, abs(S));
axis([fmin fmax 0 0.5])
离散时间滤波器
滤波器指标
与连续时间情况不同,此时我们希望除去FA这个音,此时的滤波器指标
类型:陷波滤波器
通带容许的最小增益:-1dB
阻带增益:-40dB
过渡带中心频率:340Hz和360Hz(【Mi和Fa的中点】和【Fa和Sol的中点】)
过渡带宽度:10Hz
IIR滤波器设计
0、IIR滤波器介绍
这里引用一段话[1]
历史上,随着数字信号处理领域的兴起 ,离散时间IIR滤波器的设计依赖于将连续时间滤波器变换成满足预定指标的离散时间滤波器的方法。该方法过去是,并且现在仍然是一种合理的方法, 其理由如下:
•连续时间IIR滤波器的设计技巧十分成熟,并已取得许多有用的成果.因此可以方便地利用这些为连续时间滤波器推导出的设计方法。
•许多有用的连续时间滤波器设计方法有比较简单的完整设计公式。因此,以这种标准的连续时间IIR滤波器设计公式为基础的离散时间IIR滤波器的设计方法实现起来十分简单。