Matlab中(dirac(t+1)+2*dirac(t-1))*dirac(t-3)卷积异常咨询
问题原因及修正方案
核心错误
冲激幅值被错误覆盖
你在处理x_2 = 2*dirac(t-1)时,将Inf位置设为1,直接丢弃了系数2,导致x_2的实际幅值为1,而非理论要求的2,这会直接导致卷积结果的幅值和位置判断错误。卷积时间轴计算完全错误
Matlab的conv函数输出长度为length(x)+length(y)-1,你用linspace(-5,5,length(w))生成的时间轴不符合卷积的时间映射规则:
原信号采样步长为0.1,x的时间起点是-5,y的时间起点也是-5,卷积后的时间起点应为-5 + (-5) = -10,终点为5 + 5 = 10,步长保持0.1,才能正确对应冲激的位置。冲激位置映射偏差
由于时间轴错误,卷积后的冲激位置被错误映射,导致你看到“2*dirac(t-1)处于t=2”的异常,实际正确位置应为t=4。
修正后的代码
%Chapter 3_a clear all close all clc %% excercise 3 dt = 0.1; t = -5:dt:5; % 构造x(t) = δ(t+1) + 2δ(t-1) x_1 = dirac(t+1); x_1(x_1 == Inf) = 1; x_2 = 2*dirac(t-1); x_2(x_2 == Inf) = 2; % 保留系数2,不覆盖为1 x = x_1 + x_2; figure stem(t,x) title('原信号 x(t)') % 构造卷积核y(t) = δ(t-3) y = dirac(t-3); y(y == Inf) = 1; figure stem(t,y) title('卷积核 y(t)') % 计算卷积并生成正确时间轴 w_full = conv(x,y,'full'); t_full = t(1)+t(1) : dt : t(end)+t(end); % 正确的卷积时间轴 figure stem(t_full, w_full) title('卷积结果 w(t) = x(t) * y(t)')
理论验证
修正后,卷积结果完全符合预期:
- δ(t+1)与δ(t-3)卷积得到δ(t-2)(t=-2处幅值1的冲激)
- 2δ(t-1)与δ(t-3)卷积得到2δ(t-4)(t=4处幅值2的冲激)
内容的提问来源于stack exchange,提问作者le_P_de_la_T
相关产品推荐
相关产品推荐

