为记录信号的 FFT 绘制 x 轴
Plotting an x-axis for an FFT of a recorded signal
我在这里遗漏了一些非常明显的东西,因为我对此还很陌生。我已经阅读了一些教程并四处询问,但我仍然难以理解它。我有一个 3 秒的录音,我尝试对其进行过滤,然后执行 FFT 以查看我是否成功。然而,我绘制的 x 轴显然是错误的(它只是一个与 fft returns 的数组大小相同的 np.arange())。
到目前为止我有以下内容:
import numpy as np
from scipy.fft import fft
import matplotlib.pyplot as plt
import sounddevice as sd
fs = 44100
s = 3
recording = sd.rec(int(s*fs), samplerate = fs, channels = 1)
fft_r = fft(recording)
plt.plot(np.arange(22050), abs(fft_r[:22050]))
plt.show()
除其他外,但它们与此问题无关...
情节很好,但我真诚地怀疑我产生这么高的频率:D
如何为持续 3 秒并以 44100 Hz 采样的录制音频信号的 fft 正确绘制 x 轴?任何关于计算的详细说明我都会很感激,因为我非常想最终理解...
阅读 np.fft.fftfreq() 和 np.fft.fftshift() 尝试将其添加到您的代码中。 fftfreq 将 return 采样频率,而 fftshift 将以零频率分量为中心,尝试我在下面的内容或尝试取出偏移并查看差异。
fs = 44100
s = 3
recording = sd.rec(int(s*fs), samplerate = fs, channels = 1)
x=np.fft.fftfreq(len(recording),1/fs)
x=np.fft.fftshift(x)
fft_r = fft(recording)
plt.plot(x, abs(fft_r[:22050]))
plt.show()
我在这里遗漏了一些非常明显的东西,因为我对此还很陌生。我已经阅读了一些教程并四处询问,但我仍然难以理解它。我有一个 3 秒的录音,我尝试对其进行过滤,然后执行 FFT 以查看我是否成功。然而,我绘制的 x 轴显然是错误的(它只是一个与 fft returns 的数组大小相同的 np.arange())。
到目前为止我有以下内容:
import numpy as np
from scipy.fft import fft
import matplotlib.pyplot as plt
import sounddevice as sd
fs = 44100
s = 3
recording = sd.rec(int(s*fs), samplerate = fs, channels = 1)
fft_r = fft(recording)
plt.plot(np.arange(22050), abs(fft_r[:22050]))
plt.show()
除其他外,但它们与此问题无关...
情节很好,但我真诚地怀疑我产生这么高的频率:D
如何为持续 3 秒并以 44100 Hz 采样的录制音频信号的 fft 正确绘制 x 轴?任何关于计算的详细说明我都会很感激,因为我非常想最终理解...
阅读 np.fft.fftfreq() 和 np.fft.fftshift() 尝试将其添加到您的代码中。 fftfreq 将 return 采样频率,而 fftshift 将以零频率分量为中心,尝试我在下面的内容或尝试取出偏移并查看差异。
fs = 44100
s = 3
recording = sd.rec(int(s*fs), samplerate = fs, channels = 1)
x=np.fft.fftfreq(len(recording),1/fs)
x=np.fft.fftshift(x)
fft_r = fft(recording)
plt.plot(x, abs(fft_r[:22050]))
plt.show()