1.创建信号
首先创建一个信号
T = 2 ** 13
x = generate_harmonic_signal(T)
plt.figure(figsize=(8, 2))
plt.plot(x)
plt.title("Original signal")
长这样:
2.画频谱图
然后画信号的频谱图,先看看plt.specgram的参数
2.1 plt.specgram入口参数
x : 一维数组或序列
Fs : 采样频率, default: 2
window : 长度为NFFT的函数或向量。参见 scipy.signal.get_window, default: window_hanning
sides : {‘default’, ‘onesided’, ‘twosided’}, 返回光谱的哪一边。 对于默认数据,“默认”为单面;对于复杂数据,“默认”为单面。 “单面”强制返回单侧频谱,而“单面”强制双向。
noverlap : 块之间的重叠点数。 default: 128。
NFFT : 每个块中用于FFT的数据点数。 幂2是最有效的。 不应将其用于填充零,否则结果的缩放比例将不正确; 使用pad_to代替。default: 256
mode: {‘default’, ‘psd’, ‘magnitude’, ‘angle’, ‘phase’}
使用哪种频谱。 默认值为“ psd”,它采用功率谱密度。 “magnitude”返回幅度谱。 “angle”返回相位光谱而无需展开。 'phase’返回展开的相位谱。
2.2 plt.specgram返回参数
spectrum:2-D array,列是连续段的周期图。
freqs:1-D array, 对应于频谱中各行的频率。
t:1-D array, 与段的中点相对应的时间(即频谱中的列)。
im:由imshow创建的包含频谱图的图像。
以上都是抄的,原文链接: https://blog.csdn.net/Winds_Up/article/details/108899873
2.3 画它
这里只修改mode参数
plt.figure(figsize=(8, 4))
#mode: {‘default’, ‘psd’, ‘magnitude’, ‘angle’, ‘phase’}
plt.specgram(x, Fs=1024, mode='psd)
plt.title("Time-Frequency spectrogram of signal-psd")
分别长这样:
psd:返回功率谱密度
magnitude:返回幅度谱
angle:返回相位光谱而无需展开
phase:返回展开的相位谱
3.频谱图解释
具体解释有空再补。
结束语
拿捏。