FIR滤波器的一个小例子
本帖最后由 messenger 于 2010-8-16 21:08 编辑网上找了半天fir滤波器应用的例子竟然没有,自己写一个共同交流。
设采样频率为fs=1000Hz, 已知原始信号为x=sin(2*pi*80*t)+2*sin(2*pi*140*t),加噪声后的信号为xn=x+randn(size(t)), 下面通过设计数字FIR滤波器恢复出信号。http://blog.sina.com.cn/greensim
设计的频带“通/阻”标记=用“0”表示阻带=用“1”表示阻带=用“0”表示阻带=用“1”表示阻带=用“0”表示阻带
程序如下:
close all ;
% 采样频率
Fs = 1000 ; % Hz
% 根据采样频率确定采样时间点
t = 0:1/Fs:5 ;
% 产生信号
x = sin(2*pi*80*t) + 2*sin(2*pi*140*t) ;
% 对信号加噪声
xn = x + 3*randn( size(t) ) ;
% 滤波器参数
n = 100 ; % 滤波器的阶数
f = ;% 通、阻带的频点
m = ;% 通、阻带标示
% 构造滤波器
b = firls(n, f, m) ; % 这个函数通过最小方差生成滤波器,具有线性相位。
% b为生成的滤波器抽头系数
% b = fir2(n,f,m); % 若将firls换成fir2,同样可达到目的
% 求出滤波器的频率响应
= freqz(b,1,512,Fs) ;% 求出b/1的频率响应,设置长度为512点,采样率Fs为1000
% 画出频谱图
plot(W, abs(H) ) ;
grid
xlabel('频率(采样频率=1000)') ;
ylabel('幅度') ;
% 进行滤波
xo = filter(b, 1, xn) ;
% 画出滤波前后对比图
nn = 500:800 ;
tt = nn/Fs ;
figure ;
subplot(311) ;
plot(tt,x(nn))
ylabel('原始信号'), grid ;
subplot(312) ;
plot(tt,xn(nn)) ;
ylabel('污染信号'), grid ;
subplot(313) ;
plot(tt,xo(nn)) ;
ylabel('滤波信号'), grid ;
xlabel('时间(秒)');
结果图:
图1 滤波器的幅度谱
图2 含噪信号处理过程
http://blog.sina.com.cn/greensim
页:
[1]