基本使用
先上代码,下面是带通滤波器在matlab中的使用
function [ pc ] = m_bandpass( pc )
freq = [0.1 0.5];
fs= 50;
% Fa=Fs/2,Fa是分析频率
[b,a] = butter(3,freq/(fs/2),'bandpass');
pc = filter(b,a,pc);
end
freq中设置的是滤波频率范围。
其中butter函数是求Butterworth数字滤波器的系数,在求出系数后对信号进行滤波时用filter函数。
适用范围
带通滤波器主要可以使用在需要保留的波的频率在一定的范围内,用于去除周围的噪声,可以起到良好的效果。下图是本人对声波测呼吸得到的波形进行带通滤波后得到的效果,可以使得波形更平滑。
注意事项
- 在滤波器中的fs 即采样率要设置正确,比如波形中的点一秒内有n个,则采样率为n。
- freq的设置 即低频率与高频率的设置,比如正常人的呼吸为一分钟16-20次,则低频率为16/60=0.27HZ,高频率为20/60=0.33HZ,频率就是单位时间内完成周期性变化的次数。
原理解释
Y = FILTER(B,A,X) ,输入X为滤波前序列,Y为滤波结果序列,B/A 提供滤波器系数,B为分子, A为分母
整个滤波过程是通过下面差分方程实现的:
a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + … + b(nb+1)*x(n-nb)-a(2)*y(n-1) - a(3)*y(n-2) + … + a(nb+1)*y(n-nb)
eg:
a = [1 2];
b = [2 3];
x = [1 2 3 4 5 6];
y = filter(b, a, x)
y =
2 3 6 5 12 3
下面给出具体的计算过程如下:
a(1)y(1) = b(1)x(1); %可以求出y(1)
a(1)y(2) = b(1)x(2)+b(2)x(1) –a(2)y(1); %可以由y(1)求出y(2)
a(1)y(3) = b(1)x(3)+b(2)x(2)-a(2)y(2); %可以由y(2)求出y(3)
a(1)y(4) = b(1)x(4)+b(2)x(3)-a(2)y(3); %可以由y(3)求出y(4)
a(1)y(5) = b(1)x(5)+b(2)x(4)-a(2)y(4); %可以由y(4)求出y(5)
a(1)y(6) = b(1)x(6)+b(2)x(5)-a(2)y(5); %可以由y(5)求出y(6)
求到的y(n) (n=1···6)则是滤波后的返回序列