频谱和功率谱
频谱和功率谱¶
1. 频谱(Spectrum)¶
定义:
- 频谱是信号在频域中的表示,描述了信号在不同频率成分上的幅度和相位信息。
- 频谱可以通过傅里叶变换(Fourier Transform)从时域信号中得到。
表示:
- 频谱通常表示为复数形式,其中实部和虚部分别表示信号的余弦和正弦成分。
- 频谱可以分为幅度谱(Magnitude Spectrum)和相位谱(Phase Spectrum)。幅度谱表示频率成分的幅度,而相位谱表示频率成分的相位。
用途:
- 频谱用于分析信号的频率成分,了解信号在不同频率上的分布情况。
- 在通信、音频处理、振动分析等领域中,频谱分析是常用的工具。
2. 功率谱(Power Spectrum)¶
定义:
- 功率谱是信号在频域中的功率分布,描述了信号在不同频率成分上的功率。
- 功率谱通常通过对频谱的幅度平方进行归一化得到。
表示:
- 功率谱表示为信号在每个频率成分上的功率,通常是实数形式。
- 对于离散信号,功率谱可以通过离散傅里叶变换(DFT)或快速傅里叶变换(FFT)计算得到。
用途:
- 功率谱用于分析信号的能量分布,了解信号在不同频率上的能量贡献。
- 在信号处理、通信、雷达、地震学等领域中,功率谱分析是常用的工具。
计算:
- Welch方法:由于分段、加窗和平均的过程,Welch方法计算的功率谱密度通常更加平滑,噪声影响较小。
- 直接使用FFT:直接使用FFT计算的功率谱可能会受到单次FFT计算中的随机噪声影响,结果可能不如Welch方法平滑。
3. 数学表示¶
假设 \(x(t)\) 是一个时域信号,其傅里叶变换为 \(X(f)\),则:
-
频谱 \(X(f)\) 是信号 \(x(t)\) 在频域中的表示,包含幅度和相位信息。
-
功率谱 \(P(f)\) 是频谱 \(X(f)\) 的幅度平方,即:
\[ P(f) = |X(f)|^2 \]
示例¶
import numpy as np
import matplotlib.pyplot as plt
# 生成示例信号
fs = 1000 # 采样频率
t = np.arange(0, 1, 1/fs) # 时间向量
f1, f2 = 50, 120 # 信号频率
x = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t) # 生成信号
# 计算频谱
X = np.fft.fft(x)
frequencies = np.fft.fftfreq(len(X), 1/fs)
# 计算功率谱
P = np.abs(X)**2 / len(X)
# 绘制频谱和功率谱
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(frequencies[:len(frequencies)//2], np.abs(X)[:len(X)//2])
plt.title('频谱')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.subplot(2, 1, 2)
plt.plot(frequencies[:len(frequencies)//2], P[:len(P)//2])
plt.title('功率谱')
plt.xlabel('频率 (Hz)')
plt.ylabel('功率')
plt.tight_layout()
plt.show()
