%File my01;
%把你的数据转化为比较通用的表示形式;
%Fs=10,Fstop=0.001,Fpass=0.01,Astop=90,Apass=1;
Wp=0.01;Ws=0.001;Rp=1; Rs=90;Fs=10;
= BUTTORD(Wp, Ws, Rp, Rs);
= BUTTER(N,Wn,'high');
%如果楼主想用极零点表示,二者等价;
= BUTTER(N,Wn,'high');
%可画出模拟滤波器的频谱;
figure(1);
FREQS(B,A);
axis();
%用频率响应不变法转化为数字滤波器;
= IMPINVAR(B,A,Fs);
%可画出数字滤波器的频谱;
figure(2);
FREQZ(B,A);
axis();
%可以看出的确是高通;
把你的要处理的信号通过这一滤波器就是你想要的结果了,0.2HZ,离0.01HZ远着呢,完全可以放心使用。 Wp、Ws是归一化频率,其值在0~1之间,其中1对应抽样频率的一半(胡广书《数字信号处理》p290),如果之间将通带和阻带的频率带入而不做归一化处理的话,好像不太正确吧?
求助
哪位用过、或编写过数字高通滤波器的原程序代码呀,能否可以提供一下下呀,我现在用vb编的算法实现起来好像有问题!!![ 本帖最后由 frankneu 于 2006-12-22 14:34 编辑 ] 原帖由 vib 于 2006-12-16 20:13 发表
全错了,iir滤波器的设计,要先设计 模拟滤波器,然后通过一些方法(如频率响应不变法)转化为数字滤波器;绝对不是s换成z这末简单!
%File my01;
%把你的数据转化为比较通用的表示形式;
%Fs=10,Fstop=0.001,F ...
IIR滤波器的设计不必先设计模拟滤波器,也不是把s换成z,但可以直接设计成数字滤波器。如果要设计模拟滤波器,调用buttord和butter函数的格式是:
=buttord(Wp,Ws,Rp,Rs,'s');
=butter(n,Wn,'ftype,'s');
其中都带有's',而且Wp和Ws的单位是弧度。如果没有's',表示是设计数字滤波器,Wp和Ws要用fs/2进行归一。 楼上的朋友,再请教一个直接的问题,请帮忙设计一个数字高通滤波器:
其中传感器数据通过串口与计算机通讯,每秒钟通讯100次,所采集的信号为加速度信号,周期约为5-10秒,谢谢!
[ 本帖最后由 frankneu 于 2006-12-29 21:54 编辑 ] 原帖由 frankneu 于 2006-12-29 14:45 发表
楼上的朋友,再请教一个直接的问题,请帮忙设计一个数字高通滤波器:
其中传感器数据通过串口与计算机通讯,每秒钟通讯100次,所采集的信号为加速度信号,周期约为5-10秒,谢谢!
请楼主能把要求说得具体一点,例如采样频率是多少(串口与计算机通讯,每秒钟通讯100次,这不是采样频率),截止频率(通带和阻带)是多少,阻带上衰减多大等。加速度信号的周期约为5-10秒(频率为0.1~0.2Hz),如果设计数字高通滤波器,截止频率要小于0.1Hz。 我对采样频率的设定不是很了解,现在通过计算机串口采集陀螺的数据,用到的就是Z轴的加速度。现在需要对加速度信号进行积分得到速度,但是直接积分的话速度曲线很快就发生漂移,我打算设计高通滤波器以消除误差,也不知道采样频率应该定多少,反正就是想用vb语言编写算法实现,衰减多少我也没有什么确定的数据,就是要能实现高通滤波功能就可以。
让我一个学机械的整数字信号处理,太难为我了。 经过串口通信进计算机,怎么叫每秒钟通讯100次?每秒钟取得多少数据? to frankneu:是应该归一化的,我不小心弄错了。
to songzy41:不好意思,是我搞错了,呵呵,向你道歉!我只是想照着书本上的设计iir滤波器的流程来做,没想到butter设计出来的居然已经是数字滤波器了, 我竟然一直都不知道,谢谢你了,不过我还是有一个疑问啊,就是impinvar,lp2hp这些从模拟到数字滤波器转换过程中用到的函数这样的话岂不是完全没用了? 我的说话可能不准确,通过串口计算机每秒钟可以得到100个加速度数据。
不知道这种情况可不可以认为采样频率是100??
[ 本帖最后由 frankneu 于 2006-12-30 14:22 编辑 ] 原帖由 vib 于 2006-12-30 14:00 发表
不过我还是有一个疑问啊,就是impinvar,lp2hp这些从模拟到数字滤波器转换过程中用到的函数这样的话岂不是完全没用了?
lp2hp,lp2bp....等都是针对模拟滤波器的。
把模拟滤波器变成数字滤波器,常用的是激冲不变法和双线性Z变换法。在我的影像中,用butter等函数设计数字滤波器,好象是用的双线性Z变换的方法(过去曾做过在相同的参数下,把模拟滤波器变成数字滤波器,用激冲不变法和双线性Z变换法,和数字滤波器设计的进行比较)。所以要用激冲不变法还得用impinvar函数来完成。又impinvar函数并不限于用在滤波器设计上,可以用在任意的S函数上。已知一个系统的S响应函数H(S)=B(S)/A(S),用impinvar函数能求出相应的Z平面的响应函数:
=impinvar(B,A,fs)
所以不能说它没有用,而是很有用。 我所设计的滤波器如下
'四阶高通滤波
'10;0.001,0.01;60,1dB
滤波器函数为
0.99539 (z-1)^4
-------------------------------------------------
(z^2- 1.993z + 0.9935) (z^2- 1.997z + 0.9973)
转换成递推结构并编成实现语句如下:
x2 = Speed '待滤数据
w2 = 1.993 * w1 - 0.9935 * w0 + x2 - 2 * x1 + x0
x0 = x1
x1 = x2
v2 = 1.997 * v1 - 0.9973 * v0 + w2 - 2 * w1 + w0
w0 = w1
w1 = w2
y2=0.99539*v2
v0 = v1
v1 = v2
但是对比后递推计算的结果和用Matlab/Simulink仿真的结果不一致,仿真的结果是正确的(曲线见附件),,但是实际中我只能通过递推计算实现,不知哪位能帮我解释这种情况,谢谢! 原帖由 frankneu 于 2006-12-31 09:07 发表
我所设计的滤波器如下
'四阶高通滤波
'10;0.001,0.01;60,1dB
滤波器函数为
0.99539 (z-1)^4
-------------------------------------------------
(z^2- 1.993z + 0.9935) (z^2- 1.997z + 0.9973)
...
差分方程表达不正确,所以计算结果也是错的。 恳请楼上的朋友指明错误的地方,如有可能请指教正确的差分方程表达式如何表示,谢谢!!! 哪一位老师能帮我指点指点呀,一直停留在这里,就是整不出来,着急呀!!!