低通滤波器实现过程解析

首先来看一个低通滤波的例子:给定一组波形如下:


      如果想要获取低通0-0.5Hz的波形:需要调用低通滤波器可得到:


很简单的一个例子:程序见:点击打开链接

低通滤波器实现过程:

主函数:

 y=lowp(x,f1,f3,rp,rs,Fs)

X:输入信号;Fs: 采样频率

f1:通带截止频率,rp:通带衰减

f3:阻带截止频率,rs:阻带衰减

Step1:模拟频率/数字频率转换

wp=2*pi*f1/Fs;

ws=2*pi*f3/Fs;

 

Step2:求Chebyshev Type I filter order

[n,wn]=cheb1ord(wp/pi,ws/pi,rp,rs);

N:滤波器阶数

Wn:滤波器截止频率

wp/pi:归一化通带截止频率

ws/pi:归一化阻带截止频率

rp:通带衰减

rs:阻带衰减

 

Step3:求滤波器分子、分母系数

[bz1,az1]=cheby1(n,rp,wp/pi);

bz1:分子系数矩阵;

az1:分母系数矩阵

N:阶数

Rp:通带衰减

wp/pi:归一化通带衰减频率

 

 

Step3.1:get analog, pre-warped frequencies

 

if ~analog,

    fs = 2;

    u = 2*fs*tan(pi*Wn/fs);

else

    u = Wn;

end

 

Step3.2:convert to low-pass prototype estimate

if btype == 1   % lowpass

    Wn = u;

elseif btype == 2   % bandpass

    Bw = u(2) - u(1);

    Wn = sqrt(u(1)*u(2));   % center frequency

elseif btype == 3   % highpass

    Wn = u;

elseif btype == 4   % bandstop

    Bw = u(2) - u(1);

    Wn = sqrt(u(1)*u(2));   % center frequency

end

 

 

Step3.3:Get N-th order Chebyshev type-I lowpass analog prototype

 

[z,p,k] = cheb1ap(n, r);

Z:滤波器零点

P:滤波器极点

K:系数

N:滤波器阶数

r:通带衰减

包含:asinh,exp,flipud,complex,prod

[a,b,c,d] = zp2ss(z,p,k);

状态方程     x = Ax + Bu

             y = Cx + Du

 

A,b,c,d:状态方程的系数

z,p,k:同上

包含:parse_input,

zp2tf,tf2ss,isfinite

cplxpair,poly.

待处理:zp2tf,tf2ss

异常处理:Try...catch

零极点转化为状态方程

 

Step3.4:Transform to lowpass, bandpass, highpass, or bandstop of desired Wn

 

[a,b,c,d] = lp2lp(a,b,c,d,Wn);

 

a,b,c,d:同上

Wn:截止频率

Step3.5 Use Bilinear transformation to find discrete equivalent:

[a,b,c,d] = bilinear(a,b,c,d,fs);

 

双线性变换

den = poly(a);

分子

num = cheb1num(btype,n,Wn,Bw,analog,den,r);

分母

 

Step4:差分方程求滤波后的序列

 

y=filter(bz1,az1,x);

 

bz1:分子系数矩阵;

az1:分母系数矩阵

X:输入序列

 -------------------------------------------------------------------------------------

matlab实现是相当简单的,问题难得是如果要用C语言实现肯定是要费一番功夫的。

under-edit

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值