Как получить спектр звуковых частот, как Audacity с Python? - PullRequest
1 голос
/ 18 июня 2019

Когда я использовал fft для numpy и scipy для генерации звукового частотного спектра, я не получаю тот же результат, что и дерзкий.Я получаю положительные дБм, у меня должны быть отрицательные.

Вот мой код

import numpy as np
from numpy import fft
from scipy.io import wavfile
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

rate,audData = wavfile.read("test.wav")
n = len(audData)
fourier=fft.fft(audData)
fourier = fourier / float(n)
freqArray = np.arange(0, (n/2), 1.0) * (rate*1.0/n);
freq = freqArray/1000
power = 10*np.log10(fo
power = np.abs(power)
plt.plot(freq, power, color='#ff7f00', linewidth=0.02)
plt.xlabel('Frequency (kHz)')
plt.ylabel('(dBm)')
plt.show()

И я пытался по-другому использовать периодограмму от scipy.signal

from scipy import signal
freqs, Pxx = signal.periodogram(audio, fs=rate, window='hanning',
                                      detrend=False, scaling='density')

freqs=freqs / 1000
Pxx = 10 * np.log10(Pxx)

plt.plot(freqs, Pxx, color='#ff7f00', linewidth=0.02)
plt.xlabel('Frequency (kHz)')
plt.ylabel('Power (dB)')

plt.show()

Я ожидал, что у меня будет такой график для дерзости с отрицательным дБм enter image description here

, но я получил диапазон дБм от отрицательного до положительного: enter image description here

И это путем отправки значений и построения их из JavaScript:

enter image description here

1 Ответ

0 голосов
/ 20 июня 2019

Различные реализации FFT используют разные масштабные коэффициенты.Если вам нужен коэффициент масштабирования, отличный от указанного по умолчанию, измените масштаб ввода по мере необходимости.

См .: https://electronics.stackexchange.com/questions/25900/scaling-fft-output-by-number-of-points-in-fft/25941#25941

...