用于PPG的Matlab低通滤波器滤波器

时间:2017-02-09 11:09:24

标签: matlab lowpass-filter

我在FPGA上实现了脉搏血氧仪,我正在sampling rate = 115200收集数据。因此,当我在Matlab中绘制数据时,我得到以下波形:

enter image description here

我想设置一个简单的低通滤波器来滤除噪声。所以过滤后的数据看起来像这样:

enter image description here

如何设计此过滤器?如何确定butterworth滤波器的截止频率([b,a] = butter(n,Wn))?

W1=0.5/60;  % lower cutoff 
W2=4/60;    %higher cutoff
[b,a]=butter(2,[W1,W2]); % Bandpass digital filter design 
h = fvtool(b,a); % Visualize filter
low_pass_data1 = filtfilt(b,a,data); % applying filter to our data 

上面提到的算法是有效的,我是从互联网上得到的,但我不知道它是如何工作的?在上面的算法中没有提到采样率,但它确实有效!我甚至不知道它是否正确。

1 个答案:

答案 0 :(得分:0)

由于您正在设计数字滤波器,因此采样率无关紧要。数字滤波器采用一系列值并输出一组值,它无法知道它们采用的速率,也不重要。

因此,数字滤波器中的频率始终是相对的。实际上,butter的帮助解释了它:

  

截止频率Wn必须为0.0 < Wn&lt; 1.0,1.0对应于采样率的一半。

因此,如果你的自然采样率是115200赫兹并且你想要切断,我不知道,10千赫,那么传递给黄油的频率是10000 /(115200/2)= 0.1736。

如果你想知道为什么它是采样率的一半:采样率为Fs,我们可以看到[-Fs / 2,Fs / 2]中的频率成分(由于Shannon-Nyquist),因此是采样率是有意义的最高频率。