【问题标题】:Low pass butterworth filter in Matlab for PPGMatlab中用于PPG的低通巴特沃斯滤波器
【发布时间】:2017-02-09 11:09:24
【问题描述】:

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

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

如何设计这个过滤器?如何确定巴特沃斯滤波器 ([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 

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

【问题讨论】:

    标签: matlab lowpass-filter


    【解决方案1】:

    由于您正在设计数字滤波器,因此采样率无关紧要。数字滤波器接受一个值流并输出一个值流,它没有机会知道它们被采用的速率,也没有关系。

    因此,数字滤波器中的频率始终是相对的。其实butter的帮助说明了:

    截止频率 Wn 必须为 0.0

    因此,如果您的自然采样率为 115200 Hz,并且您想以 10 kHz 的频率截止,我不知道,那么传递给黄油的频率是 10000/(115200/2) = 0.1736。

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

    【讨论】:

    • 谢谢,但是在上面的算法中:W1=0.5/60; % lower cutoff W2=4/60; %higher cutoff到底是什么? 0.5/604/60 哪里来的?
    • 尝试绘制信号的FFT。根据该图,您可以判断信号中的重要频率以及应在何处使用截止频率。
    • 具体值可能是根据您找到的示例所依据的应用程序选择的。有时,您可以从应用程序中知道可以过滤掉哪些频率。如果不这样做,则必须手动检查频谱以查看相关部分在哪里以及可以过滤掉哪些部分(例如尝试 STFT)。
    • 感谢您的意见。你能告诉我如何设计一个简单的低通滤波器来减少输出中的噪声吗?我不太擅长过滤器设计。
    • 要设计低通滤波器,请使用[b,a] = butter(n,w);,其中n 是滤波器阶数,w 是截止频率。我无法告诉您如何选择截止频率,因为它取决于您的数据。您可以使用 STFT 查看光谱以找出答案。否则,我真的建议您尝试几个值来了解它的作用和外观。您将在去噪和丢失关于峰值等的信息之间进行权衡(如果w 更低,则两者都更多)。没有一般规则,因为它取决于数据......
    猜你喜欢
    • 2017-04-26
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2017-12-21
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多