别再被频谱图搞晕了!用Python的Scipy库5分钟搞定信号功率谱分析(附Welch和CSD代码)
第一次看到频谱图时,那些起伏的曲线和密集的频率刻度让我头皮发麻。直到在实验室里导师扔给我一段Python代码:"用这个分析你的振动数据,比公式直观多了。"三行 scipy.signal.welch() 调用就输出了清晰的功率谱——那一刻我才明白,现代信号处理早已不是纸笔推演的时代。
对于需要快速分析噪声特征、设备振动或生物信号的工程师和学生,功率谱密度(PSD)是揭示信号频率成分的利器。但传统教材往往陷于傅里叶变换的数学推导,而实际工作中我们更关心:如何用代码快速获得可信的频谱?怎样设置参数才能避免频谱泄露?两个信号的相干性如何量化?本文将用 完全可复现的代码示例 带你绕过理论沼泽,直击APSD(自功率谱)和CPSD(互功率谱)的实战要点。
1. 五分钟上手指南:从数据到频谱
假设你刚拿到一组工业传感器的振动数据,需要立即评估其主要频率成分。打开Jupyter Notebook,跟着以下步骤操作:
# 基础分析套件
import numpy as np
from scipy.signal import welch
import matplotlib.pyplot as plt
# 生成模拟信号(实际替换为你的数据)
fs = 1000 # 采样率1000Hz
t = np.arange(0, 5, 1/fs) # 5秒时长
signal = 0.6 * np.sin(2*np.pi*50*t) + 0.3 * np.sin(2*np.pi*120*t) # 50Hz+120Hz复合信号
# 关键参数设置
nperseg = 1024 # 每个分析段长度
noverlap = 512 # 段间重叠样本数
# 计算功率谱
freqs, psd = welch(signal, fs=fs, nperseg=nperseg, noverlap=noverlap)
# 可视化
plt.figure(figsize=

686

被折叠的 条评论
为什么被折叠?



