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

Python实现LCR带通滤波器频率响应绘图异常求助

问题分析与修正方案

核心问题1:传递函数推导错误

你在将角频率域传递函数转换为频率域时,错误保留了多余的2π因子,导致幅度响应被严重压缩(除谐振点外,其他点幅度远低于预期)。

原始传递函数归一化后,正确的频率域表达式应基于**频率带宽(而非角频率带宽)**推导:
$$H(F)=\frac{1}{1 + j\frac{F^2 - F_0^2}{F \cdot BW}}$$

你的H(F)函数中,错误地用角频率w0=2πF0代入,导致虚部被放大了2π倍,最终计算出的幅度响应完全偏离预期。

核心问题2:采样步度过大

你的频率采样步长是0.1kHz,而滤波器带宽仅0.1kHz,这会错过通带内的关键细节(比如幅度为1/√2的截止点),导致绘图粗糙且无法反映真实的带通特性。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

def H(F):
    # 修正后的传递函数,基于频率带宽和谐振频率
    out = 1 / (1 + 1j * (F**2 - F0**2) / (F * BW))
    return out

BW = 0.1  # 频率带宽,单位kHz
F0 = 21   # 谐振频率,单位kHz
# 缩小采样步长,覆盖通带细节
F = np.arange(20.5, 21.51, 0.01)

plt.figure(figsize=(10,5))
plt.suptitle('LRC带通滤波器频率响应幅度曲线')
plt.plot(F, abs(H(F)))
plt.ylabel('|H(F)|', color="blue")
plt.xlabel('F (kHz)', horizontalalignment='right', x=1.0, color="blue")
plt.yticks([0, 1/np.sqrt(2), 1], color="red")
plt.xticks([21 - BW/2, 21, 21 + BW/2], color="red")  # 添加截止频率刻度
plt.grid(True)
plt.show()

修正效果说明

  • 谐振点F=21kHz处幅度为1,符合预期;
  • 截止频率21±0.05kHz处幅度为1/√2≈0.707,正确反映带通滤波器的带宽特性;
  • 更密集的采样步长能清晰展示通带内的响应变化。

内容的提问来源于stack exchange,提问作者Dayrse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:12:06