实现含双重求和的滤波器冲激响应: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
相关产品推荐
相关产品推荐

