我有不同频率的嘈杂正弦波。我将该正弦波的所有样本(以 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
如您所见,我能够很好地检测到峰值。我的绝对目标是能够计算正弦波的平均峰峰值电压。也许有人可以为我指明正确的方向,什么是最可靠的方法?
这可以使用 scipy 函数来完成吗?还是 scipy 没有实现这种功能?
我也在尝试这样做,我想出的最佳解决方案是获取所有峰值,然后反转信号,并找到波谷。然后,您可以取所有谷值和峰值的平均值,得到平均 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