如何在Matlab中缩放两个信号
我想通过计算缩放因子将信号(如何在Matlab中缩放两个信号,matlab,Matlab,我想通过计算缩放因子将信号(Sig)缩放到其参考(Ref)。通常,我通过将max(Ref)除以max(Sig)来计算比例因子。但是,只有当两个信号都从零开始时,它才起作用 如果信号如下,如何缩放: Ref = [2 2 2 2 3 4 4 4 4 4 4 4 3 2 2 2 2 2 2 2 2 3 4 4 4 4 4 4 4 3 2 2 2 2]; Sig = [2 2 2 2 4 6 6 6 6 6 6 6 4 2 2 2 2 2 2 2 2 4 6 6 6 6 6 6 6 4 2 2 2 2
Sig
)缩放到其参考(Ref
)。通常,我通过将max(Ref)
除以max(Sig)
来计算比例因子。但是,只有当两个信号都从零开始时,它才起作用
如果信号如下,如何缩放:
Ref = [2 2 2 2 3 4 4 4 4 4 4 4 3 2 2 2 2 2 2 2 2 3 4 4 4 4 4 4 4 3 2 2 2 2];
Sig = [2 2 2 2 4 6 6 6 6 6 6 6 4 2 2 2 2 2 2 2 2 4 6 6 6 6 6 6 6 4 2 2 2 2];
这是我的算法:
maxSig = max(Sig);
maxRef = max(Ref);
sf = (maxRef/maxSig);
figure('color','w')
hold on
plot(Ref, 'r')
plot((Sig)*sf, 'b')
legend('Reference','Signal')
grid on
hold off
编辑:这就是我希望实现的目标:Sig
乘以比例因子,它与Ref
注:两个信号的长度始终相同,并且没有时间间隔。这不是Matlab独有的问题,因此我将给出更一般的答案: 通常的标准化方法是用平均值减去,再除以标准偏差。由于您不想修改参考信号,这是我的解决方案:
mRef = mean(Ref)
stdRef = std(Ref)
mSig = mean(Sig)
stdSig = std(Sig)
newSig = ((Sig - mSig)/stdSig) * stdRef + mRef
正如评论中所说,您还可以根据两个信号的最小值和最大值之间的差值进行缩放。您必须在某个地方减去最小值,但这取决于您想做什么。在你的例子中,期望的输出是什么?如果tehre没有偏移,那么它们从零开始,对吗?@AnderBiguri我认为OP意味着没有x轴offset@LuisMendo哦,我假设没有timelag意味着没有x轴offest从你的例子来看,看起来你想做
Sig_scaled=(max(Ref)-min(Ref))/(max(Sig)-min(Sig))*(Sig-min(Sig))+min(Ref)代码>但是由于您提供的解释非常少,这涉及到很多猜测。例如,min(Sig)
是否总是等于min(Ref)
,如果不是,行为应该是什么?它是有效的!非常感谢你。它是如何工作的?你能简单解释一下吗?如果你规范化你的信号和你的参考,如果它们是线性相关的,你应该得到相同的输出。但是你想保持你的参考完整,所以你只需要乘以stdRef,然后在两者上加上mRef,就可以回到你的参考信号。