#python #matplotlib #scipy
#python #matplotlib #scipy
Вопрос:
я получил следующий код:
Frequency = df['x [Hz]']
Spectrum = df['test_spec']
x = Spectrum
peaks, _ = find_peaks(x, distance=20)
plt.plot(peaks, x[peaks], "xr"); plt.plot(x); plt.legend(['distance'])
plt.show()
Переменная «Частота» содержит частоты октавного спектра третьей полосы частот от 5 до 315 Гц. «Спектр» содержит связанные уровни шумового давления. Теперь я хочу найти пики в этом спектре. нужное мне значение — это частота, на которой находится пик.
Проблема в том, что на графике показана ось x с шагами 0,5,10,15, но я хочу масштаб по оси x с моими частотами, сохраненными в переменной «Частота».
Надеюсь, вы сможете мне помочь.
Спасибо за вашу поддержку.
Ответ №1:
Документация find_peaks() может быть немного запутанной, поскольку она вызывает свой ввод x
, в то время как в большинстве ситуаций этот ввод будет отображаться по оси y. find_peaks()
не заботится об оси x, предполагая, что она такая же, как индекс массива ( 0,1,2,...
).
Чтобы нарисовать свою кривую, вам нужно построить график с использованием Frequency
по оси x и Spectrum
по оси y. Вы можете визуализировать пики, используя их в качестве индекса в обоих массивах:
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
import numpy as np
Frequency = np.linspace(5, 315, 200)
Spectrum = np.random.randn(200).cumsum()
Spectrum = 1 - Spectrum.min()
peaks, _ = find_peaks(Spectrum, distance=20)
plt.plot(Frequency[peaks], Spectrum[peaks], "xr")
plt.plot(Frequency, Spectrum)
plt.legend(['distance'])
plt.tight_layout()
plt.show()
Комментарии:
1. Спасибо вам оооочень большое!! Я застрял на этом уже целый час! И все примеры, которые я нашел в Интернете, игнорируют эту маленькую, но важную деталь.