返回

FFT 幅度校正:如何从信号 FFT 中获取准确的频率幅度

python

如何从信号 FFT 中提取准确的频率幅度

问题:从 FFT 获取准确的频率幅度

FFT(快速傅里叶变换)是一种强大的工具,可将时域信号转换为频域信号,显示不同频率的幅度和相位信息。然而,直接从 FFT 获取频率幅度可能存在误差,因此需要进行校正。

解决方法:校正 FFT 幅度

要从信号 FFT 中获得准确的频率幅度,需要遵循以下步骤:

  1. 计算 FFT: 使用 np.fft.rfft() 函数计算 FFT。

  2. 获取幅度: 计算复数频谱的绝对值,以获得幅度。

  3. 校正幅度: 将 FFT 幅度乘以归一化因子:normalization_factor = N / 2,其中 N 为信号的长度。

  4. 绘制 FFT: 绘制校正后的 FFT 幅度,以查看信号中不同频率的分布。

示例代码

import numpy as np
import matplotlib.pyplot as plt

# 信号参数
total_time = 5
sampling_frequency = 200

# 生成信号
t = np.linspace(0, total_time , total_time * sampling_frequency)
signal = np.sin(2 * np.pi * 1 * t) + 0.5 * np.sin(2 * np.pi * 10 * t)

# 计算 FFT
fft_spectrum = np.fft.rfft(signal)
fft_spectrum_abs = np.abs(fft_spectrum)

# 获取归一化因子
normalization_factor = signal.size / 2

# 校正幅度
fft_spectrum_abs_corrected = fft_spectrum_abs * normalization_factor

# 计算频率
freq = np.fft.rfftfreq(signal.size, d=1./sampling_frequency)

# 绘制 FFT
plt.plot(freq, fft_spectrum_abs_corrected)
plt.xlabel("频率 (Hz)")
plt.ylabel("幅度")
plt.show()

通过校正 FFT 幅度,您可以获取信号中不同频率的准确幅度。

常见问题解答

1. FFT 幅度为什么需要校正?

FFT 幅度通常归一化,表示相对幅度。为了获得实际幅度,需要乘以归一化因子。

2. 归一化因子如何计算?

归一化因子是信号长度的一半,即 normalization_factor = N / 2

3. 校正后的 FFT 幅度表示什么?

校正后的 FFT 幅度表示信号中不同频率的实际幅度。

4. 如何判断 FFT 幅度是否准确?

与原始信号的频谱进行比较。如果它们相似,则 FFT 幅度可能是准确的。

5. FFT 幅度校正是否适用于所有类型的信号?

校正方法适用于大多数类型的信号,但可能需要针对特定类型的信号进行调整。