介绍
为了减少频谱的泄漏误差,频谱泄漏就是因为FFT只能对有限长度的时域数据进行变换,需要对信号进行截断,即使是周期信号,如果截断的时间长度不是周期的整数倍,那么截取之后会出现泄漏,加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏,红色的那个函数与原信号想乘就是加窗,这样就减少了频谱泄漏的情况。
汉宁窗
clear
close all
clc
N=45;
wn=[0.3,0.5];%截止频率
window=hanning(N+1); %计算长度为N的汉宁窗
b=fir1(N,wn,window); %N是阶数,wn是截止频率
[H,w]=freqz(b);
subplot(2,1,1);plot(w/pi,20*log10(abs(H)));grid; xlabel('归一化频率');ylabel('幅度');title('幅频响应');
subplot(2,1,2);plot(w/pi,angle(H));grid; xlabel('归一化频率');ylabel('相位');title('相位响应');
后面的矩形窗和布莱克曼窗的原理同理,matlab已经给我们准备好了函数直接去调用
clear
close all
clc
%矩形窗N=15
% N=input('请输入 N 的值\n');wn=[0.3,0.5];
% b=fir1(N,wn,boxcar(N+1));
% [H,w]=freqz(b,1,512);
% subplot(2,1,1);plot(w/pi,20*log10(abs(H)));grid; xlabel('归一化频率');ylabel('幅度');title('幅频响应');
% subplot(2,1,2);plot(w/pi,angle(H));grid; xlabel('归一化频率');ylabel('相位');title('相频响应');
%布莱克曼窗:(N=15 时)
%
N=input('请输入 N 的值\n');
wn=[0.3,0.5];
window=blackman(N+1);
b=fir1(N,wn,window);
[H,w]=freqz(b);
subplot(2,1,1);plot(w/pi,20*log10(abs(H)));grid; xlabel('归一化频率');ylabel('幅度');title('幅频响应');
subplot(2,1,2);plot(w/pi,angle(H));grid; xlabel('归一化频率');ylabel('相位');title('相频响应');