MATLAB freqz代码迁移Python后频率响应h输出不一致问题求解
MATLAB freqz转Python结果不一致解决方案
错误原因
你对MATLAB中滤波器分母系数的构造逻辑理解错误,MATLAB代码[1 -flipud(testlist)']的执行逻辑是:
- 第一步:对列向量
testlist执行上下翻转操作(flipud) - 第二步:将翻转后的所有元素统一乘以-1
- 第三步:在处理后的数组最前端拼接数值1,最终得到IIR滤波器的分母系数向量
你原有Python代码中1 - testlist[i]的操作是将每个元素单独计算为1减去自身,和MATLAB的逻辑完全不符,是导致输出h值错误的核心原因。
修正后的Python代码
import numpy as np from scipy.signal import freqz # 此处testlist为你已填入和MATLAB完全一致数值的列表 testlist_np = np.array(testlist) # 构造和MATLAB完全一致的分母系数a reversed_test = np.flip(testlist_np) a = np.concatenate([[1], -reversed_test]) # 调用freqz计算 w, h = freqz(b=0.0215654, a=a, worN=2048) # 频率转换逻辑和MATLAB的freqz(...,2)对齐 f = w / np.pi
验证说明
修正分母系数构造逻辑后,计算得到的复数h值将和MATLAB输出完全匹配。你看到的MATLAB第一个h值量级极大,是该滤波器在直流点(f=0)的增益极高导致的正常输出,和代码逻辑无关。
内容的提问来源于stack exchange,提问作者Oguzhan
相关产品推荐
相关产品推荐

