Единицы амплитуды в БПФ - PullRequest
0 голосов
/ 09 мая 2020

Я совершенно новичок в python, scipy, matplotlib и программировании в целом. Я использую следующий код, с которым я столкнулся в Интернете, для применения БПФ к файлам .wav:

import scipy.io.wavfile as wavfile
import scipy
import scipy.fftpack as fftpk
import numpy as np
from matplotlib import pyplot as plt

s_rate, signal = wavfile.read("file.wav")

FFT = abs(scipy.fft.fft(signal))
freqs = fftpk.fftfreq(len(FFT), (1.0/s_rate))

plt.plot(freqs[range(len(FFT)//2)], FFT[range(len(FFT)//2)])
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()

Полученные графики дают значения амплитуды от 0 до нескольких тысяч, в зависимости от файлов. , и я понятия не имею, в каких единицах они находятся. Я предполагаю, что это могут быть относительные амплитуды, и мне было интересно, есть ли способ превратить это в децибелы, поскольку мне нужно указать c значений.

Спасибо

Танги

1 Ответ

2 голосов
/ 10 мая 2020

Это амплитуды относительно единиц квантования, используемых для выборок в вашем входном сигнале. Таким образом, без калибровки входного сигнала относительно известного уровня входного сигнала источника (чтобы получить вольт на изменение одного бита и т. Д. c.), Фактические единицы измерения неизвестны. После калибровки вам все равно может потребоваться разделить величину выходного сигнала БПФ на N (длина БПФ), в зависимости от конкретной реализации БПФ.

Чтобы получить децибелы, выполните преобразование, взяв 20 * log10 (абс (. ..)) результатов БПФ и смещение на ваш уровень калибровки 0 дБ.

...