You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于自适应滤波器去除PPG信号呼吸伪影的技术求助

使用LMS与频域自适应滤波器无法去除PPG信号中的呼吸伪影

我正在开发一个Python项目,目标是去除PPG信号中的呼吸伪影。尝试采用LMS时域自适应滤波器与频域自适应滤波器,但均未达到预期效果。

相关参数

遇到的问题

  • LMS算法输出仍含噪声,呼吸伪影未被有效去除
  • 频域自适应滤波器的输出不符合预期

相关代码

import numpy as np
from numpy.fft import fft, ifft

def lms(self, x, d, N, mu):
    nIters = min(len(x), len(d)) - N
    u = np.zeros(N)
    w = np.zeros(N)
    e = np.zeros(nIters)
    for n in range(nIters):
        u[1:] = u[:-1]
        u[0] = x[n]
        e_n = d[n] - np.dot(u, w)
        w = w + mu * e_n * u
        e[n] = e_n

    return e

def freq_adap_filter(self, x, d, M, mu):
    num_block = min(len(x), len(d)) // M
    w_k = 0
    n_zeros = np.zeros(M)
    e = np.zeros(num_block * M)

    for n in range(num_block):
        # 计算滤波器输出
        x_n = np.concatenate([n_zeros, x[n * M:(n + 1) * M]])  # 尺寸2M
        x_k = fft(x_n)  # 尺寸2M
        y_k = x_k * w_k  # 尺寸2M的滤波器输出

        d_n = d[n * M:(n + 1) * M]  # 尺寸M
        y_n = ifft(y_k)  # 尺寸2M
        y_n = y_n[M:2 * M]  # 取后半段,尺寸M
        e_n = d_n - y_n  # 尺寸M
        e[n * M:(n + 1) * M] = e_n

        # 更新滤波器系数
        e_n = np.concatenate([n_zeros, e_n])  # 尺寸2M
        e_k = fft(e_n)  # 尺寸2M

        x_k_conj = x_k.conj()  # 尺寸2M
        g_k = x_k_conj * e_k  # 尺寸2M
        g_n = ifft(g_k)  # 尺寸2M
        g_n = g_n[0:M]  # 保留前M个,删除后半段
        g_n = np.concatenate([g_n, n_zeros])  # 尺寸2M
        w_k = w_k + mu * fft(g_n)  # 尺寸2M

    return e

恳请各位提供排查思路或改进方案,谢谢!

内容的提问来源于stack exchange,提问作者Baili.As

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:15:39