Scipy 查找信号的平均峰峰值电压

问题描述 投票:0回答:1

我有不同频率的嘈杂正弦波。我将该正弦波的所有样本(以 mV 为单位)保存在变量

data_mV

我可以使用

find_peaks
python 库中的
scipy
通过以下函数找到正弦波的峰值

def find_peaks_in_signal(data_mV,sampling_rate,signal_frequency,plot):
    if(debug_prints):
        print("Sampling rate = ",sampling_rate)
        print("Expected signal frequency = ",signal_frequency)
    distance = (sampling_rate / signal_frequency) - 100
    print("Distance = ",distance)
    peaks, _ = find_peaks(data_mV, distance=distance)
    if plot:
        plt.plot(data_mV)
        plt.plot(peaks, data_mV[peaks], "x")
        plt.plot(np.zeros_like(data_mV), "--", color="gray")
        plt.show()
    return peaks

结果是: enter image description here

如您所见,我能够很好地检测到峰值。我的绝对目标是能够计算正弦波的平均峰峰值电压。也许有人可以为我指明正确的方向,什么是最可靠的方法?

这可以使用 scipy 函数来完成吗?还是 scipy 没有实现这种功能?

python scipy
1个回答
0
投票

我也在尝试这样做,我想出的最佳解决方案是获取所有峰值,然后反转信号,并找到波谷。然后,您可以取所有谷值和峰值的平均值,得到平均 pk-pk。

例如

import numpy as np
peaks, _ = find_peaks(data_mV, distance=distance)
troughs, _ = find_peaks([x*-1 for x in data_mV], distance=distance)
pk_list = []
tr_list = []

for peak in peaks:
    pk_list.append(peaks[peak])

for trough in troughs:
    tr_list.append(troughs[trough])

pkpk = np.average(pk_list)-np.average(tr_list)

但是,看起来 numpy 也有一个 pk-pk 函数,因此也值得一试:https://numpy.org/doc/2.1/reference/ generated/numpy.ptp.html

© www.soinside.com 2019 - 2024. All rights reserved.