MATLAB中LTI系统卷积绘图报错:向量尺寸不匹配问题咨询
解决MATLAB卷积后绘图的长度不匹配问题 & ty的取值逻辑
我来给你拆解这个问题——你遇到的Vectors must be the same length报错,本质是卷积输出的y和你手动定义的时间向量ty长度对不上,核心是没搞懂离散卷积后时间轴的计算规则。
首先搞清楚:卷积输出y的长度怎么来的
当你用conv(x,h)(默认是'full'模式,完整卷积结果),输出向量y的长度固定是:
length(y) = length(x) + length(h) - 1
你手动设置的ty = 0:steps:7,它的长度是(7 - 0)/steps + 1,除非这个数刚好等于length(x)+length(h)-1,否则必然出现长度不匹配的报错。
时间向量ty的正确取值逻辑
离散卷积是连续时间卷积的数值近似,所以卷积结果的时间范围,是输入信号x(t)的时间范围与冲激响应h(t)的时间范围的叠加,具体规则分两种情况:
- 如果用
conv(x,h,'full')(完整卷积结果):
假设x的时间轴是tx = t_x_start : steps : t_x_end,h的时间轴是th = t_h_start : steps : t_h_end,那么卷积结果的时间轴ty应该是:
这个ty_start = tx(1) + th(1); ty_end = tx(end) + th(end); ty = ty_start : steps : ty_end;ty的长度正好等于length(x)+length(h)-1,和y完全匹配。 - 如果用
conv(x,h,'same')(输出和x长度一致的卷积结果):
这种情况下ty直接和x的时间轴tx保持一致即可,因为结果被截断/补零到了x的长度。
结合你的场景修正代码
你的h(t)是exp(-t/2).*((t>=2)-(t>=7)),对应的时间轴是从2到7(步长steps)。假设你的x(t)是从t=0开始的(比如tx=0:steps:T),那完整卷积的时间轴起点应该是0+2=2,终点是T+7,而不是你设的0到7。
给你一份修正后的示例代码:
steps = 0.01; % 根据你的实际步长调整 % 定义输入x(t)的时间轴和信号(这里用单位阶跃示例,你替换成自己的x) tx = 0:steps:5; x = ones(size(tx)); % 定义冲激响应h(t)的时间轴和信号 th = 2:steps:7; h = exp(-th/2).*((th>=2)-(th>=7)); % 计算完整卷积 y = conv(x,h); % 生成匹配的时间向量ty ty_start = tx(1) + th(1); ty_end = tx(end) + th(end); ty = ty_start : steps : ty_end; % 现在绘图就不会报错了 plot(ty,y);
内容的提问来源于stack exchange,提问作者h4kr
相关产品推荐
相关产品推荐

