如何在Matplotlib中实现负X轴上的信号幅度谱展示
问题原因分析
你遇到的问题由两个操作错误共同导致:
- Matplotlib的
magnitude_spectrum方法默认针对实输入信号仅展示正频率半轴,默认参数sides='default'对实信号等价于'onesided',不会生成负频率区间的幅值数据,即使手动设置了负半轴的x轴范围也没有对应数据可以渲染。 - x轴范围设置顺序错误,你先调用
set_xlim定义范围,再执行绘图方法,绘图过程会自动覆盖之前设置的x轴范围,导致自定义范围不生效。
修正后代码
import matplotlib.pyplot as plt import numpy as np np.random.seed(0) dt = 1 # 采样间隔 Fs = 11000 # 采样频率 t = np.arange(0,1,1/Fs) # 生成混合余弦信号 s = 20000 * np.cos(2 * np.pi * 5025 * t) + 10000*np.cos(2 * np.pi * 2507 * t -np.pi/2) fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(10, 10)) axs[0, 0].set_title("幅度谱") # 先调用绘图方法,添加sides参数指定输出双边谱 axs[0, 0].magnitude_spectrum(s, Fs=Fs, color='C1', sides='twosided') # 绘图完成后再设置x轴范围 axs[0, 0].set_xlim([-Fs/2, Fs/2]) axs[0, 1].remove() # 隐藏空白子图 axs[1, 0].remove() axs[1, 1].remove() fig.tight_layout() plt.show()
修正说明
- 新增
sides='twosided'参数:强制方法生成包含正负频率区间的完整双边幅度谱,生成负半轴对应幅值数据 - 调整
set_xlim调用顺序到绘图语句之后,避免自定义范围被绘图逻辑自动覆盖
内容的提问来源于stack exchange,提问作者Letho123
相关产品推荐
相关产品推荐

