声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2727|回复: 7

[滤波] 求救,如何在matlab里从脉冲响应得到滤波结果?

[复制链接]
发表于 2006-9-12 11:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
目前,我在我在matlab里使用2RC滤波器对数字信号进行滤波。我现在遇到这么一个问题:
我想知道的是:
(1):我现在只知道2RC滤波器的脉冲响应和幅度、相位响应,我想知道如何使用2RC滤波器进行数字滤波,
(2)更进一步的:怎么样在知道滤波器的脉冲响应和幅度、相位响应的情况下如何得到滤波结果。
哪位高手知道这些办法,希望能够不吝赐教。最好能给我点matlab的相关程序参考一下
回复
分享到:

使用道具 举报

发表于 2006-9-13 16:43 | 显示全部楼层
原帖由 greenbug 于 2006-9-12 11:39 发表
(1):我现在只知道2RC滤波器的脉冲响应和幅度、相位响应,我想知道如何使用2RC滤波器进行数字滤波,

知道“2RC滤波器的脉冲响应和幅度、相位响应”, 是否是模拟滤波器的激冲响应和幅度、相位响应?
 楼主| 发表于 2006-9-13 18:37 | 显示全部楼层
是的,是模拟的
发表于 2006-9-13 20:06 | 显示全部楼层
你知道了滤波器的脉冲响应函数了,对吧?拿你的脉冲响应和输入数据做卷积就行了,这是时域的方法。原理上,如果你知道滤波器幅频特性和相频特性,你就知道了它的频率响应函数,你还可以在频域与输入相乘,然后IFFT获得时域结果。

评分

1

查看全部评分

发表于 2006-9-13 21:26 | 显示全部楼层
我在这里介绍的方法是根据从模拟滤波器经激冲不变法,转换成数字滤波器的方法。一般在数字滤波器的设计中,使用激冲不变法时是先已知模拟滤波器的传递函数的系数,也就是在S函数中的系数,经转变得到Z函数中的系数,即IIR数字滤波器的系数。
为了要进行这样的转换,又要证明这种方法的正确性,我在这帖中先设一个模拟低通滤波器,求出它的传递函数和激冲响应,用模拟滤波器的传递函数经激冲不变法给出数字滤波器的传递函数,即笫I组数字滤波器系数。其程序为:
[b,a]=butter(2,.2,'s');  % 使用Butterworth低通滤波器
sys=tf(b,a);
fprintf('b=  %5.6f    %5.6f    %5.6f\n',b);
fprintf('a=  %5.6f    %5.6f    %5.6f\n',a);
[y,t] = impulse(sys,[0:0.25:40]);  % 把滤波器系数转变成激冲响应
t_increment=t(2)-t(1);   % 求出采样周期
fs=1/t_increment;        % 求出采样频率
plot(t,y,'r','linewidth',2); hold on;  % 作出模拟滤波器激冲响应曲线
fprintf('\nFs= %5.6f\n\n',fs);
[bb,aa]=impinvar(b,a,fs);    % 经激冲不变法求出数字滤波器系数
fprintf('bb=  %5.6f    %5.6f    %5.6f\n',bb);
fprintf('aa=  %5.6f    %5.6f    %5.6f\n',aa);
[y1,t1]=impz(bb,aa,length(t),fs);
plot(t1,fs*y1); hold off;  % 作出数字滤波器激冲响应曲线
grid on;
legend('analog','digital');

用激冲不变法求出的笫I组数字滤波器的系数是
bb=  0.000000    0.002413    0.000000
aa=  1.000000    -1.929318    0.931731
同时我们可以看到经激冲不变法得到的数字滤波器,它的激冲响应和模拟滤波器完全一致。

激冲响应曲线

激冲响应曲线
发表于 2006-9-13 21:37 | 显示全部楼层
在本帖中还是利用激冲不变法,但是不是从模拟滤波器的传递函数来进行变换,而是从已知模拟滤波器的激冲响应来进行转换。因为激冲不变法的前提就是模拟滤波器和数字滤波器的激冲响应是“相同”的,它们在数值上只差一个常数。因此在已知模拟滤波器的激冲响应后,就能求出数字滤波器的激冲响应,再进一步求出数字滤波器的传递函数,就给出了IIR滤波器的系数。程序是
clear all; clc;
[b,a]=butter(2,.2,'s');  % 使用Butterworth低通滤波器
sys=tf(b,a);
fprintf('b=  %5.6f    %5.6f    %5.6f\n',b);
fprintf('a=  %5.6f    %5.6f    %5.6f\n',a);
[y,t] = impulse(sys,[0:0.25:40]);  % 把滤波器系数转变成激冲响应
t_increment=t(2)-t(1);   % 求出采样周期
fs=1/t_increment;        % 求出采样频率
y1=y/fs;               % 给出数字滤波器激冲响应
[bb,aa]=prony(y1,2,2);   % 从激冲响应求出数字滤波器系数
fprintf('bb=  %5.6f    %5.6f    %5.6f\n',bb);
fprintf('aa=  %5.6f    %5.6f    %5.6f\n',aa);

求出的笫II组数字滤波器系数:
bb=  0.000000    0.002413    -0.000000
aa=  1.000000    -1.929318    0.931731
我们可以看到这笫II组数字滤波器系数和笫I组系数完全一致。
有了IIR数字滤波器系数,也就不难进行数字滤波运算了。

评分

1

查看全部评分

 楼主| 发表于 2006-9-14 15:58 | 显示全部楼层
非常非常感谢您的帮助
发表于 2006-9-15 15:28 | 显示全部楼层
我也来学习下
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 02:33 , Processed in 0.079650 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表