使用matplotlib绘制滤波器波特图出现xy维度不匹配报错如何解决
错误根源
- 函数内部硬编码了全局变量而非使用传入参数:你定义的
H(Freq1)、P(F)函数内部没有使用传入的频率参数计算,而是直接调用了全局变量w、wc,而全局w是长度为10000的数组,不管你给函数传入多长的输入,输出永远是10000个值,和长度为1000000的x轴数组维度不匹配,直接触发报错。 - 变量名不统一:你计算得到的截止频率弧度值变量是
wc1,但函数内调用的是未定义的wc,会额外触发变量未定义报错。 - 重复定义函数:最先定义的
H(w)会被后续的H(Freq1)覆盖,无实际作用。 - 两幅图画在同一画布会出现坐标冲突,未分开创建画布。
- 相频特性x轴从0开始设置对数刻度会出现无效值,建议起始值调整为1Hz。
修正后完整代码
import numpy as np import matplotlib.pyplot as plt # 全局参数定义 Fc = 2500 # 截止频率 单位Hz wc = Fc * 2 * np.pi # 截止频率转换为弧度每秒 # 幅频特性计算与绘图 def H(F): w = F * 2 * np.pi # 用传入的F计算对应弧度频率 return (1/(1+((w)/wc)**2))**0.5 Freq1 = np.arange(0, 10000, 1) plt.figure(figsize=(8,4)) # 单独创建幅频特性画布 plt.plot(Freq1, H(Freq1), color="red") # 绘制截止频率标记线 plt.plot([0, 2500, 2500], [(1/2**0.5), (1/2**0.5), 0], color="blue") plt.ylabel('H(F)', color="blue") plt.xlabel('F', horizontalalignment='right', color="blue") plt.yticks(np.arange(0, 1.1, 0.1), color="green") plt.xticks(np.arange(0, 10000, 1000), color="green") plt.grid(True) plt.title("幅频特性曲线") plt.show() # 相频特性计算与绘图 def P(F): w = F * 2 * np.pi # 用传入的F计算对应弧度频率 return -np.arctan(w/wc) F = np.arange(1, 1000000, 1) # 起始值改为1避免对数刻度出错 plt.figure(figsize=(8,4)) # 单独创建相频特性画布 plt.plot(F, P(F), color="red") plt.ylabel('P(F)', color="blue") plt.xlabel('F', horizontalalignment='right', color="blue") plt.xscale("log") plt.grid(True) plt.title("相频特性曲线") plt.show()
内容的提问来源于stack exchange,提问作者Matthew Howe
相关产品推荐
相关产品推荐

