当我同时使用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绘制它们来完成的:
答案 0 :(得分:0)
不同的FFT实现使用不同的比例因子。如果您需要的缩放因子与默认设置不同,请根据需要重新缩放输入。