在Python中,我们可以使用Scipy库的fft函数将时域波形转换为频谱。

假设我们有一个长度为N的时域波形x,采样频率为fs,我们可以使用以下代码将其转换为频谱X:

import numpy as np
from scipy.fft import fft

# 生成一个长度为N的随机时域波形
N = 1024
fs = 1000
t = np.arange(N) / fs
x = np.sin(2 * np.pi * 50 * t) + np.sin(2 * np.pi * 120 * t) + np.random.randn(N)

# 做FFT变换
X = fft(x)

# 计算频率轴
freqs = np.fft.fftfreq(N, 1/fs)

# 取一半的频谱(另一半是镜像)
X_half = X[:N//2]
freqs_half = freqs[:N//2]

# 绘制频谱
import matplotlib.pyplot as plt
plt.plot(freqs_half, 20*np.log10(np.abs(X_half)))
plt.xlabel('Frequency [Hz]')
plt.ylabel('Magnitude [dB]')
plt.show()

上面的代码会生成一个长度为N的随机时域波形,然后使用fft函数将其转换为频谱X。我们还计算了频率轴freqs,并取出一半的频谱(另一半是镜像),并绘制了频谱图。注意,我们使用20*np.log10(np.abs(X_half))将振幅转换为分贝(dB)单位,以便更好地观察频谱中的峰值。

运行上面的代码,我们会得到如下的频谱图:

频谱图

从图中可以看出,该随机时域波形包含两个频率分别为50Hz和120Hz的正弦波,并且有一些噪声。在频谱中,我们可以清晰地看到这两个频率的峰值,以及噪声产生的宽带能量。


原文地址: https://www.cveoy.top/t/topic/nGgG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录