【MATLAB数字信号处理】数字滤波器的设计

滤波器指标通常按照其幅度响应指定。例如,低通滤波器 G ( z ) G(z) G(z)的幅度响应 ∣ G ( e j w ) ∣ |G(e^{jw})| G(ejw)通常如图所示,在由 0 ≤ w ≤ w p 0≤w≤w_{p} 0wwp所定义的通带中,我们要求:
在这里插入图片描述
换句话说,幅度以误差 ± σ p ±σ_{p} ±σp逼近于1。在由 w s ≤ ∣ w ∣ ≤ π w_{s}≤|w|≤\pi wswπ定义的阻带中,我们要求:
在这里插入图片描述
即幅度以误差 σ s σ_{s} σs接近于零。频率 w p w_{p} wp w s w_{s} ws分别称为通带边界频率和阻带边界频率,在通带和阻带内的最大容限, σ p σ_{p} σp σ s σ_{s} σs称为波纹。
在这里插入图片描述
在大多数应用中,给定的数字滤波器指标如下图所示:
在这里插入图片描述
此时,在由 0 ≤ w ≤ w p 0≤w≤w_{p} 0wwp定义的通带中,幅度的最大值和最小值分别是 1 1 1 1 / 1 + ϵ 2 1/\sqrt{1+\epsilon^2} 1/1+ϵ2 ,单位为dB的峰通带波纹是
在这里插入图片描述
w s ≤ ∣ w ∣ ≤ π w_s≤|w|≤\pi wswπ定义的阻带中,最大波纹由 1 / A 1/A 1/A表示;单位为dB的最小阻带衰减为
在这里插入图片描述
若通带边界频率 F p F_{p} Fp和阻带边界频率 F s F_{s} Fs与数字滤波器的抽样率 F τ F_{\tau} Fτ一起以Hz为单位给定,则以弧度为单位的归一化角边界频率为:
在这里插入图片描述
滤波器设计过程的第一步是估计传输函数阶数。对于基于模拟低通滤波器 H a ( s ) H_{a}(s) Ha(s)的转换的无限冲激响应数字低通滤波器 G ( z ) G(z) G(z)的设计,存在估计滤波器阶数的一个解析公式。对于有限冲激响应低通或高通数字滤波器的设计,可以通过几种设计公式,由下列数字滤波器指标来直接估计最小滤波器长度 N N N;归一化通带边界角频率 w p w_{p} wp;归一化阻带边界角频率 w s w_{s} ws;峰通带波纹 σ p σ_{p} σp;峰阻带波纹 σ s σ_{s} σs。由Kaiser生成的一个相对简单的逼近式为:
在这里插入图片描述
其中 Δ w = ∣ w p − w s ∣ Δw=|w_{p}-w_{s}| Δw=wpws是过渡带的宽度。上述公式也可用于设计多过渡带有限冲激响应滤波器,在这种情况下, Δ w Δw Δw是所有过渡带的最小宽度。对于具有不等过渡带的多频带滤波器,用上述公式设计的滤波器可能在那些较宽的过渡带中表现出令人无法接受的幅度响应,在这种情况下,这些频带将被处理得比较小,直到得到一个可接受的幅度响应。
​广泛用于设计无限冲激响应滤波器的方法是基于从 s s s平面到 z z z平面的双线性变换,即
在这里插入图片描述
使用上述变换,模拟传输函数 H a ( z ) H_{a}(z) Ha(z)按照下式被转换成数字传输函数 G ( z ) G(z) G(z)
在这里插入图片描述
通过简单截断前一节给出的理想滤波器的冲激响应系数得到的因果有限冲激响应滤波器,在它们各自的幅度相应中会出现一种摆动行为,称为吉布斯现象。吉布斯现象可用如下方式减弱:用一个两端平滑地降为零的窗口来加窗,或提供一个从通带到阻带平滑的转换。使用渐进窗口会引起旁瓣高度的减小和响应主瓣宽度的增加,得到不连续点处的一个较宽过渡。在所有基于窗口的低通滤波器设计中,截止频率 w ϵ w_{\epsilon} wϵ是通带和阻带边界频率总和的一半。

常用的固定窗函数:
​① 矩形窗
在这里插入图片描述
② Barlett窗
在这里插入图片描述
③ Hann窗
在这里插入图片描述
⑤ Blackman窗
在这里插入图片描述

可调节窗函数(这里主要介绍Kaiser窗):
​Kaiser窗:
在这里插入图片描述
式中, β β β是可调参数,而 I o ( μ ) I_{o}(\mu) Io(μ)是修正的零阶贝塞尔函数,可用幂级数的形式表示为:
在这里插入图片描述

% 这里主要介绍基于窗函数的数字滤波器设计方法
% 载入txt格式的信号幅度数据
data = load('data2.txt');
figure(1);plot(data);grid on
xlabel('time');ylabel('amplitude');title('时域原始信号');
w = 0:0.0114:2*pi;
yf = fft(data);
figure(2);plot(w/pi,abs(yf));grid on
xlabel('frequency');ylabel('amplitude');title('信号的幅度谱');

% 添加随机噪声
scale = 4;
noise = rand(552,1) - 0.5;
noise = scale*noise;
yy = data + noise;
yyf = fft(yy);
figure(3);plot(w/pi,abs(yf),'b');hold on
plot(w/pi,abs(yyf),'r');grid on
xlabel('frequency');ylabel('amplitude');
legend('原始信号','合成信号');
% 将幅度谱变换为分贝
db = 20*log10(abs(yf));
figure(4);plot(db);grid on
xlabel('db');ylabel('amplitude');title('将幅度谱变换为分贝');

%% 矩形窗
wp = 0.2*pi;ws = 0.4*pi;
transWidth = ws - wp;
M1 = 0.92*pi/transWidth;
N1 = ceil(2*M1 + 1);
% N1 = 11
Rwin = rectwin(N1 + 1);
wc1 = (wp + ws)/2;
Wn1 = wc1/pi;
b1 = fir1(N1,Wn1,Rwin);
[h1,omega1] = freqz(b1,1,512);
figure(5);plot(omega1/pi,abs(h1));grid on;
xlabel('\omega/\pi'); ylabel('Magnitude');title('矩形窗的幅度谱')
figure(6);plot(omega1/pi,20*log10(abs(h1)));grid on;
xlabel('\omega/\pi'); ylabel('Gain/dB');title('矩形窗的增益图')
y1 = filtfilt(b1,1,yy);
figure(7);plot(y1,'r');hold on
plot(data);grid on
legend('矩形窗滤波器滤波结果','时域原始信号');

%% Hamming窗
wp = 0.2*pi;ws = 0.4*pi;
transWidth = ws - wp;
M2 = 3.32*pi/transWidth;
N2 = ceil(2*M2 + 1);
% N2 = 35
Hamwin = hamming(N2 + 1);
wc2 = (wp + ws)/2;
Wn2 = wc1/pi;
b2 = fir1(N2,Wn2,Hamwin);
[h2,omega2] = freqz(b2,1,512);
figure(8);plot(omega2/pi,abs(h2));grid on;
xlabel('\omega/\pi'); ylabel('Magnitude');title('Hamming窗的幅度谱')
figure(9);plot(omega2/pi,20*log10(abs(h2)));grid on;
xlabel('\omega/\pi'); ylabel('Gain/dB');title('Hamming的增益图')
y2 = filtfilt(b2,1,yy);
figure(10);plot(y2,'r');hold on
plot(data);grid on
legend('Hamming窗滤波器滤波结果','时域原始信号');

%% Kaiser窗
fpts = [0.2 0.4];
mag = [1,0];
dev = [0.01 0.01];  % 容许误差
[N,Wn,beta,ftype] = kaiserord(fpts,mag,dev);
% N = 23;Wn = 0.3000;beta = 3.3953;ftype = low
Kwin = kaiser(N + 1,beta);
b = fir1(N,Wn,Kwin);
[h,omega] = freqz(b,1,512);
figure(11);plot(omega/pi,abs(h));grid on;
xlabel('\omega/\pi'); ylabel('Magnitude');title('Kaiser窗的幅度谱')
figure(12);plot(omega/pi,20*log10(abs(h)));grid on;
xlabel('\omega/\pi'); ylabel('Gain, dB');title('Kaiser窗的增益图')
y = filtfilt(b,1,yy);
figure(13);plot(y,'r');hold on
plot(data);grid on
legend('Kaiser窗滤波器滤波结果','时域原始信号');

%% 对比三个窗函数的增益图和相位谱
figure(14);
freqz(b1,1);title('矩形窗的增益图和相位谱');
figure(15);
freqz(b2,1);title('Hamming窗的增益图和相位谱');
figure(16);
freqz(b,1);title('Kaiser窗的增益图和相位谱');

%% 原始信号与添加噪声后的合成信号的时域对比
figure(17);plot(data,'b');hold on
plot(yy,'r');grid on
xlabel('time');ylabel('amplitude');
legend('原始信号','合成信号');
figure(18);plot(data,'b');hold on
plot(yy,'r');axis([0 200 -25 25]);grid on
xlabel('time');ylabel('amplitude');
legend('原始信号','合成信号');

在这里插入图片描述
figure 1. 原始信号与合成信号(时域局部)
在这里插入图片描述
figure 2. 原始信号与合成信号(时域)
在这里插入图片描述
figure 3. 原始信号与合成信号(频域)
在这里插入图片描述
figure 4. 原始信号的幅度谱
在这里插入图片描述
figure 5. 时域原始信号
在这里插入图片描述
figure 6. 将幅度谱变换为分贝
在这里插入图片描述
figure 7. 矩形窗的幅度谱
在这里插入图片描述
figure 8. 矩形窗的增益图
在这里插入图片描述
figure 9. 矩形窗的增益图和相位谱
在这里插入图片描述
figure 10. 矩形窗滤波结果对比
在这里插入图片描述
figure 11. Hamming的幅度谱
在这里插入图片描述
figure 12. Hamming窗的增益图
在这里插入图片描述

figure 13. Hamming的增益图和相位谱
在这里插入图片描述
figure 14. Hamming窗滤波结果对比
在这里插入图片描述
figure 15. Kaiser窗的幅度谱
在这里插入图片描述
figure 16. Kaiser窗的增益图
在这里插入图片描述
figure 17. Kaiser窗的增益图和相位谱
在这里插入图片描述
figure 18. Kaiser窗滤波结果对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值