簡體   English   中英

如何使用python獲取像audacity這樣的音頻頻譜?

[英]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()

我期望有一個這樣的圖可以顯示負dBm的膽量 在此處輸入圖片說明

但是我得到的是從負到正的dBm范圍: 在此處輸入圖片說明

通過發送值並通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM