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

实现含双重求和的滤波器冲激响应:t变化时输出异常求助

问题分析与代码修正

嘿,我帮你梳理下代码里的问题,这正是导致区间内t无法输出正确结果的原因:

1. 关键变量T未定义

你的代码里直接用了T,但完全没给它赋值,这会直接触发运行错误,更别说正确计算区间内的响应了。首先得根据你的实际需求给T设值,比如假设T=5(你可以换成自己的周期值)。

2. 缺失区间判断逻辑

当前代码对所有t(1到14)都累加了n=0和n=1的所有项,但按照你的描述,应该是只有当t处于[nT, (n+1)T)区间时,才计算对应n的项,而不是把所有n的结果都硬叠加到每个t上。这就是为什么t是常量(刚好落在nT点)时看似正确,但区间内变化时结果出错的核心原因——你错误地混合了不同区间的计算项。


修正后的代码示例

我假设t代表实际时间值,你可以根据需求调整时间范围和步长。修正后的代码如下:

a = 3; 
b = 4; 
T = 5; % 替换成你实际的周期值
t_start = 0;
t_end = 14;
t_step = 1; % 时间步长,按需调整
t_values = t_start:t_step:t_end;
H = zeros(size(t_values)); 
c = [9 10]; 

for m = 0:2
    for n = 0:1
        % 筛选出当前n对应的时间区间:[n*T, (n+1)*T)
        t_mask = (t_values >= n*T) & (t_values < (n+1)*T);
        % 只对区间内的t计算并累加响应值
        H(t_mask) = H(t_mask) + c(n+1) * ((a * ((t_values(t_mask) - n*T)/T) + b).^m);
    end
end

% 查看时间t=4对应的响应结果
disp(H(t_values == 4));

关键改动说明

  • 补上了T的定义,明确了周期参数;
  • 用t_mask精准筛选当前n对应的时间区间,只对区间内的t进行计算,避免了不同区间项的错误叠加;
  • 用t_values存储实际时间值,逻辑更清晰,也方便你调整时间范围和步长;
  • 最后查看结果时,通过t_values == 4精准定位到目标时间对应的响应,避免索引混淆。

如果你是把t作为时间索引(比如t=1对应时间T),只需要调整t_values的定义,比如t_values = 1:14;,再把区间判断改成(t_values >= n*T + 1) & (t_values < (n+1)*T + 1)就行,完全适配你的索引规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:59:28