You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:36:00