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

使用Kaiser窗设计FIR低通滤波器出现频率响应全NaN问题求助

Kaiser窗FIR低通滤波器频率响应NaN问题解决

核心问题排查点

  • 阶数与Beta参数计算错误:若阻带衰减或过渡带宽的单位/公式出错,会生成异常的窗函数或滤波器系数,直接导致NaN。
  • 理想冲激响应的0/0未处理:理想低通的冲激响应在中心采样点会出现$\sin(0)/0$的情况,必须手动替换为极限值$\omega_c/\pi$,否则直接产生NaN。
  • freqz参数误用:FIR滤波器的传递函数分母为1,若freqz输入参数不规范(比如漏写分母),可能引发计算异常。

修正后的可运行代码

% 给定设计参数
wp = 0.4*pi;
ws = 0.6*pi;
delta1 = 0.01;
delta2 = 0.001;

% 计算阻带衰减与过渡带宽
A = -20*log10(delta2);
delta_w = ws - wp;

% 计算Kaiser窗的阶数N和beta参数
N = ceil((A - 7.95)/(2.285*delta_w));
beta = 0.5842*(A-21)^0.4 + 0.07886*(A-21);
alpha = N/2;

% 生成理想低通冲激响应(处理0/0情况)
n = 0:N;
h_ideal = zeros(1, length(n));
wc = (wp + ws)/2; % 取通阻带中点为截止频率
for idx = 1:length(n)
    k = n(idx) - alpha;
    if k == 0
        h_ideal(idx) = wc/pi;
    else
        h_ideal(idx) = sin(wc*k)/(pi*k);
    end
end

% 施加Kaiser窗得到FIR系数
window = kaiser(N+1, beta);
h = h_ideal .* window;

% 计算并验证频率响应
[H, w] = freqz(h, 1, 1024);
if any(isnan(H))
    error('仍存在NaN,请检查参数计算');
else
    disp('频率响应计算正常');
    % 绘制幅频特性
    figure;
    plot(w/pi, 20*log10(abs(H)));
    xlabel('归一化频率 (\times\pi rad/sample)');
    ylabel('幅度 (dB)');
    title('Kaiser窗FIR低通滤波器幅频响应');
    grid on;
end

关键修正说明

  • 强制处理了理想冲激响应的中心采样点,避免0/0导致的NaN
  • 严格按照Kaiser窗的标准公式计算阶数和beta参数,确保窗函数生成正常
  • freqz明确指定分母为1(FIR滤波器特性),并指定1024点FFT计算,避免默认参数的潜在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:31:04