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

求信号关于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:08