您的位置首页生活百科

如何用MATLAB进行高通FIR滤波器仿真

如何用MATLAB进行高通FIR滤波器仿真

的有关信息介绍如下:

如何用MATLAB进行高通FIR滤波器仿真

之前的文章中介绍了如何产生FIR低通滤波器,本文将介绍如何用fir2函数产生高通滤波器,并举出一个简单的应用案例。

实际应用背景:一个信号由5Hz余弦信号与15Hz余弦信号相加构成,如何滤除15Hz分量,得到5Hz分量。

产生原始信号: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);

观察原始信号时域与频谱:

频谱中可以观察到信号的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]);

生成高通FIR滤波器冲击响应:

MATLAB程序:

b=fir1(80, B/(fs/2),'high'); %滤波产生指定带宽的噪声信号

figure;

freqz(b);

原始信号经过高通滤波器:

MATLAB程序:

y_after_fir=filter(b,1,y);

滤波后信号时域及频谱:

滤波后得到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]);