Python 3.x 使用Scipy';s去卷积函数用于去卷积皮肤电活动数据

Python 3.x 使用Scipy';s去卷积函数用于去卷积皮肤电活动数据,python-3.x,scipy,signal-processing,deconvolution,Python 3.x,Scipy,Signal Processing,Deconvolution,我希望使用所述的贝特曼函数作为滤波器,使用Scipy的去卷积函数来解卷积EDA(皮肤电活动)信号 然而,当我尝试这样做时,反褶积图并不像我期望的那样。也就是说,它通常呈现一条大致平坦的线的形状,有时在滤波器长度的倍数处出现尖峰: 我错过了什么?我应该平滑EDA曲线吗?我是否希望从去卷积中得到太多?我的代码如下: import csv import numpy as np import matplotlib.pyplot as plt import scipy.signal as signal

我希望使用所述的贝特曼函数作为滤波器,使用Scipy的去卷积函数来解卷积EDA(皮肤电活动)信号

然而,当我尝试这样做时,反褶积图并不像我期望的那样。也就是说,它通常呈现一条大致平坦的线的形状,有时在滤波器长度的倍数处出现尖峰:

我错过了什么?我应该平滑EDA曲线吗?我是否希望从
去卷积
中得到太多?我的代码如下:

import csv
import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as signal
import math

with open('test session 1.csv', newline='') as csvfile: 
    filereader = csv.reader(csvfile, delimiter=' ')
    i = 0

    timestamps = []
    conductances = []

    for row in filereader: 
        i += 1

        fields = ' '.join(row).split()

        if i > 3:
            timestamps.append(float(fields[0]))
            conductances.append(float(fields[5]))

    timestamps = [timestamp - timestamps[0] for timestamp in timestamps]

    c = 10.
    tau1 = 300
    tau2 = 2000

    bateman = [c * ( math.exp(-time / tau2) - math.exp(-time / tau1)) for time in timestamps]
    bateman = bateman[3:1700]

    deconv, remain = signal.deconvolve(conductances, bateman)

    fig, ax = plt.subplots(nrows=4)

    ax[0].plot(conductances, label="EDA Signal")
    ax[1].plot(bateman, label="Bateman Function")
    ax[2].plot(deconv, label="Deconvolution Result")
    ax[3].plot(remain, label="Remainder")


    for i in range(len(ax)):
        ax[i].legend(loc=4)

    plt.show()

“我是不是希望从
去卷积
中得到太多?”。您有可以共享的示例数据集吗?还有,你是如何确定贝特曼函数的参数的?你确定它准确地表示了脉冲响应函数(又名传递函数,又名内核)吗?@WarrenWeckesser如果需要,我可以共享数据集。它将反映上述EDA信号图。选择Bateman参数以匹配EDA图中显示的表观时间尺度。我相信,具有适当选择参数的贝特曼函数准确地表示IRF是基于链接PDF的。你建议我如何继续?你认为曲线平滑会有成效吗?分享数据(Dropbox、GitHub等),我们来看看
deconvolve
应该做得更好。反褶积在对数尺度(
符号学
)上是什么样的?