[B,A] = BUTTER(N,Wn) designs an Nth order lowpass digital
Butterworth filter and returns the filter coefficients in length
N+1 vectors B (numerator) and A (denominator).
The cutoff frequency Wn must be 0.0 < Wn < 1.0, with 1.0
corresponding to half the sample rate.
If Wn is a two-element vector, Wn = [W1 W2], BUTTER returns an
order 2N bandpass filter with passband W1 < W < W2.
[B,A] =
BUTTER(N,Wn,'high') designs a highpass filter.
[B,A] =
BUTTER(N,Wn,'low') designs a lowpass filter.
[B,A] =
BUTTER(N,Wn,'stop') is a bandstop filter if Wn = [W1 W2].
当设计低通和高通时,Wn是一个值,表示截止频率;当设计带通和带阻时,Wn是一个二个元素的数组,表示通带或阻带的上下截止频率。频率的归一化是对fs/2进行归一。
例如,fs=10000,则fs/2=5000,500归一化为0.1,1000归一化为0.2。
一个论坛上的例子:http://www.chinavib.com/forum/thread-72656-1-1.html
fs=100;%采样频率为100Hz
fc=30;%截止频率为30Hz
[b,a]=butter(4,0.6,'high');
[h,w]=freqz(b,a);
plot(w/pi*fs/2,abs(h)); grid;
title('Amplitude Response');
xlabel('Frequency (Hz)'); ylabel('Amplitude');
figure;
x=randn(1,fs*6);
y=filter(b,a,x);
subplot 211; plot(x); title('Original Signal');
subplot 212; plot(y); title('Output of High-pass
filter');
其中信号是用随机数产生的,长6s。笫1张图是高通滤波器的幅值响应曲线,笫2张图是信号滤波前后的波形。
[b,a]=butter(n,Wn),根据阶数n和截止频率Wn计算ButterWorth滤波器分子分母系数(b为分子系数的矢量形式,a为分母系数的矢量形式)
butter函数是求Butterworth数字滤波器的系数,在求出系数后对信号进行滤波时用filter函数。
说白了,设计滤波器就是设计滤波器系数[B,A]。
[B,A] = BUTTER(N,Wn,'high') ---用来设计高通滤波器
[B,A] = BUTTER(N,Wn,'low') designs a lowpass
filter.--低通滤波器
[B,A] = BUTTER(N,Wn)--带通滤波器
N是滤波器的阶数,不熟的话,大概取个整数就可以了。Wn的确定跟你的采样频率Fs有关。
对于原始信号x。
比如说你的采样频率Fs=1000Hz,设计一个8阶、通带为100-200Hz的带通滤波器:
[b,a]=butter(8,[0.2 0.4])=butter(8,[100/(1000/2) 200/(1000/2)
])
这里Fa=Fs/2,Fa是分析频率
得到滤波器系数后,就可以直接用了。
y=filter(B,A,x)
filter(ones(1,5)/5,1,data)
这里b=(1/5 1/5 1/5 1/5 1/5), a=1。
好像有这么个说法:
a=1是FIR----------有限冲激响应滤波器
a不等于1是IIR----无限冲激响应滤波器