我想使用 python 来查看扬声器的音频响应是什么。这可以通过将用麦克风测量的扬声器输出与给定输入进行比较来完成。这意味着对于将在时域中的这两个信号,我需要执行 FFT。最终我想播放接近哈曼曲线的目标曲线。我试图生成信号以将其放入 wav 文件中,当检查信号是否符合我对 FFT 的要求时,我得到了一些奇怪的行为。因此,我尝试对具有恒定幅度并在 5 秒内以 44100 Hz 的采样率从 21-19700 Hz 变化的正弦波执行 FFT。我想使用 welch 方法,我将窗口作为样本的全长,因为在这种情况下,我生成的信号没有任何噪声。这给了我以下结果:

我使用了以下python代码
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch
samplerate = 44100
duration = 5
time = np.linspace(0,duration,samplerate*duration, endpoint= False)
frequency = np.linspace(21,19700,len(time),endpoint= False)
Const_wave = np.sin(np.pi*2*frequency*time)
f, check = welch(Const_wave,samplerate,nperseg=len(Wave))
plt.plot(f,check)
plt.xscale('log')
plt.xlabel('Frequency [Hz]')
plt.yscale('log')
plt.ylabel('Power')
plt.grid()
plt.show()
之后,我尝试了 scipy.fft 模块,它产生了不同但也不是预期的结果:
为此,我使用了以下代码:
f = rfftfreq(samplerate*duration,1/samplerate)
check = rfft(Const_wave)
plt.plot(f,check) 
plt.xscale('log')
plt.xlabel('Frequency [Hz]')
plt.yscale('log')
plt.ylabel('Power')
plt.grid()
plt.show()
我希望在所有频率上看到一个平坦的等功率平台,但这并没有发生。我也尝试对 REW 生成的线性扫描 wav 文件做同样的事情并得到类似的结果,那么我对平坦高原的期望是不正确的,还是这里有其他东西在起作用?


