[英]Get maximum of spectrum from audio file with python (audacity-like)
[英]How to get an audio frequency spectrum like audacity with python?
當我同時使用numpy和scipy的fft生成音頻頻譜時,我沒有得到與大膽的結果相同的結果。 我得到正dBm,必須有負dBm。
這是我的代碼
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()
通過發送值並通過javascript繪制它們來實現:
不同的FFT實現使用不同的比例因子。 如果您需要的縮放因子與默認設置不同,請根據需要重新縮放輸入。
參見: https : //electronics.stackexchange.com/questions/25900/scaling-fft-output-by-number-of-points-in-fft/25941#25941
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.