【问题标题】:Filter ecg signal with wavelet用小波过滤心电信号
【发布时间】:2015-11-17 23:46:31
【问题描述】:

我正在处理心电图信号,我想删除漂移噪声。 在 Matlab 中,这段代码运行良好:

[c, l]=wavedec(ecgsignal,8,'coif5'); 
a9=wrcoef('a',c,l,'coif5',8);

其中 ecgsignal 是带有噪声的原始信号,a9 是滤波后的信号。 我正在尝试用这段代码在 python 中做同样的事情:

coeffs=pywt.wavedec(ecgsignal,'coif5', level=8)
renc=pywt.waverec(coeffs, 'coif5')

但是重建的信号renc 有噪声。 有人可以帮我理解什么是不正确的吗?我使用了 PyWavelet 库的错误命令?

【问题讨论】:

  • 看起来您将所有分解后的系数都输入到重构函数中。
  • 我打算评论同样的事情。我不习惯使用小波,只使用 FFT,但您似乎应该只使用 几个选定的系数重建信号,而不是全部。
  • 以PyWavelet的文档为例:coeffs = pywt.wavedec([1,2,3,4,5,6,7,8], 'db2', level=2) print pywt.waverec(coeffs, 'db2') 它是所有系数。
  • @GiuseppeRicci 文档显示 wavedec 和 waverec 这两个函数完全相反。
  • @AndyKubiak 在 Matlab 中是一样的吗?为什么这条指令在 python 中不起作用?

标签: python matlab noise wavelet


【解决方案1】:

目前pywt还没有实现wrcoef等效功能。但您仍然可以分解一维多电平信号,然后分别重构其分量。

https://stackoverflow.com/a/47591523/2845274

【讨论】:

    【解决方案2】:

    您只是在解构信号,然后重构信号。您尚未完成实际执行您正在寻找的信号过滤的关键阈值步骤。

    在python中草绘所需步骤的基本大纲:

    // DWT
    coeffs = pywt.wavedec(ecgsignal,'coif5', level=8); 
    // Compute threshold something like this.  You need an estimate
    // of the noise sigma.
    threshold=noiseSigma*sqrt(2*log2(ecgsignal.size)); 
    // Apply the threshold.  Pseudocode here.
    newcoeffs = pywt.thresholding.soft( coeffs , threshold);
    // IDWT
    renc = pywt.wavedec(newcoeffs , 'coif5');              
    

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 2015-07-03
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 2020-09-16
      • 1970-01-01
      相关资源
      最近更新 更多