jijinjiang 发表于 2010-8-15 15:03:56

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]
查看完整版本: FIR滤波器的一个小例子