求信号关于Y轴的对称信号x(-t)及移位的Matlab代码问题
解决Matlab中信号反射(x(-t))与移位的问题
我明白你现在卡在信号反射这一步了,之前的尝试没成功是因为混淆了数组索引和自变量t的取值——x是和t一一对应的数组,x(i)代表的是x(t(i)),而不是x这个函数在数值t(i)处的调用结果(除非你把x定义成函数句柄,但你这里x是数组)。
先分析你的原信号:x(t)在0≤t≤1时是t/5,其余时刻为0。那x(-t)应该是在-1≤t≤0时取值为(-t)/5,其余时刻为0,我们一步步来实现:
正确实现v(t)=x(-t)
方法1:利用t的对称性(适用于t对称且步长均匀的情况)
你的t是从-5到5、步长0.01的对称数组,对于每个索引i,t(i)的相反数正好对应t(1002-i)(因为t总共有1001个元素)。所以直接翻转x数组就能得到x(-t):
t = [-5:0.01:5]; wt = (t>=0)&(t<=1); r = @(t) t/5; x = r(t).*wt; % 实现v(t) = x(-t) v = fliplr(x);
验证一下:当t=-0.5时,v中对应位置的值是x(0.5)=0.1,完全符合预期。
方法2:通用插值法(适用于任意t的情况)
如果你的t不是对称的,或者步长不均匀,用interp1插值更稳妥,它会根据t的取值找到x在-t处的对应值:
v = interp1(t, x, -t);
这个方法不受t的范围和步长限制,通用性更强。
实现y = v(t-2)
v(t-2)等价于x(-(t-2))=x(-t+2),同样可以用插值法直接计算:
% 从v计算y y = interp1(t, v, t-2); % 或者直接从x计算,跳过v的步骤 y = interp1(t, x, -(t-2));
为什么你之前的尝试失败了?
v = x(t(1:end)):t是数值数组,把它作为索引传入x时,Matlab会自动取整(负数索引会被视为1),结果完全不是x(-t)。v = x(t(end:-1:1))/v = x(fliplr(t)):同样是把倒序的t数值当索引,取整后得到的是x数组中错误位置的元素,和x(-t)的逻辑完全不符。
内容的提问来源于stack exchange,提问作者Zap
相关产品推荐
相关产品推荐

