如何用MATLAB进行高通FIR滤波器仿真
1、实际应用背景:一个信号由5Hz余弦信号与15Hz余弦信号相加构成,如何滤除15Hz分量,得到5Hz分量。
2、产生原始信号:y=cos(2π*5t)+cos(2π*15t);
Matlab程序:
f1=5;%第一个点频信号分量频率
f2=15;%第二个点频信号分量频率
fs=100;%采样率
T=2;%时宽
B=10;%FIR截止频率
n=round(T*fs);%采样点个数
t=linspace(0,T,n);
y=cos(2*pi*f1*t)+cos(2*pi*f2*t);
3、观察原始信号时域与频谱:
频谱中可以观察到信号的5Hz分量和15Hz分量
Matlab程序:
figure;
plot(t,y);
title('原始信号时域');
xlabel('t/s');
ylabel('幅度');
figure;
fft_y=fftshift(fft(y));
f=linspace(-fs/2,fs/2,n);
plot(f,abs(fft_y));
title('原始信号频谱');
xlabel('f/Hz');
ylabel('幅度');
axis([ 0 50 0 100]);
4、生成高通FIR滤波器冲击响应:
MATLAB程序:
b=fir1(80, B/(fs/2),'high'); %滤波产生指定带宽的噪声信号
figure;
freqz(b);
5、原始信号经过高通滤波器:
MATLAB程序:
y_after_fir=filter(b,1,y);
6、滤波后信号时域及频谱:
滤波后得到15Hz的信号,5Hz信号被滤除。
MATLAB程序:
figure;
plot(t,y_after_fir);
title('滤波后信号时域');
xlabel('t/s');
ylabel('幅度');
fft_y1=fftshift(fft(y_after_fir));
f=linspace(-fs/2,fs/2,n);
figure;
plot(f,abs(fft_y1));
title('滤波后信号频谱');
xlabel('f/Hz');
ylabel('幅度');
axis([ 0 50 0 100]);