用于信号处理的butterworth滤波器

时间:2015-11-19 12:01:52

标签: matlab signals

我有一个学校项目,可以根据用户指示移动轮椅。我目前正在使用matlab开始我的项目,并为培训目的获取了几个数据。我坚持将butterworth过滤器应用于信号,

这是我的训练数据样本'go'link

这是我的代码

[x,Fs] = audioread('go10.wav'); % to read the data

plot(x) ; % plot the data before aprplying the filter

n = 3; % the number of order

beginFreq = 800 / (Fs/2);
endFreq = 2000 / (Fs/2);
[b,a] = butter(n, [beginFreq, endFreq], 'bandpass');

y = filter(b, a, x);

figure;
plot(y) ; % plot the data after applying the filter

p = audioplayer(y,Fs);
play(p) ; % play the record after applying the filter

这里是绘图结果, this is the signal after the filter

所以我的问题是,

1)我做得对吗?关于开始和结束频率?我的答案是否正确?

2)你能告诉我关于这款butterworth过滤器的信息吗?我知道它试图专注于人声,但究竟是什么呢?

1 个答案:

答案 0 :(得分:0)

n,butterworth滤波器的顺序决定了从通带到阻带的转换是多么陡峭。较高的n =在所需频率处的尖锐截止。请注意,虽然大的滤波器顺序可能会使滤波器不稳定,因为它是一个IIR滤波器(无限脉冲repsonse,所以它可以永远响铃)。 您可以使用

检查滤波器的幅度/相位响应
freqz(b,a,NFFT,Fs)

当NFFT是所需的频率分辨率时,NFFT = 2 ^ 15。 正如此图也将显示,butterworth滤波器具有非线性相位失真,当您使用音频数据时也需要考虑。

如果离线处理数据,可以使用filtfilt而不是filt来校正相位失真(这将有效地使滤波器顺序加倍)。这不是实时处理的好选择。