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
相关产品推荐
相关产品推荐

