我在FPGA上实现了脉搏血氧仪,我正在sampling rate = 115200
收集数据。因此,当我在Matlab中绘制数据时,我得到以下波形:
我想设置一个简单的低通滤波器来滤除噪声。所以过滤后的数据看起来像这样:
如何设计此过滤器?如何确定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
上面提到的算法是有效的,我是从互联网上得到的,但我不知道它是如何工作的?在上面的算法中没有提到采样率,但它确实有效!我甚至不知道它是否正确。
答案 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),因此是采样率是有意义的最高频率。