【问题标题】:How to scale two signals in Matlab如何在 Matlab 中缩放两个信号
【发布时间】:2022-01-19 23:23:19
【问题描述】:

我想通过计算缩放因子将信号 (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 完美对齐

注意:两个信号的长度总是相同,并且不会有时滞。

【问题讨论】:

  • 你必须在某处减去最小值,但这取决于你想做什么。在您的示例中,期望的输出是什么?
  • 如果 tehre 没有偏移量,那么它们从零开始,对吗?
  • @AnderBiguri 我认为 OP 意味着没有 x 轴偏移
  • @LuisMendo 哦,我认为 没有时间延迟 意味着没有 x 轴偏移
  • 从你的例子看来你想做Sig_scaled = (max(Ref)-min(Ref))/(max(Sig)-min(Sig))*(Sig-min(Sig)) + min(Ref); 但是由于你提供的解释很少,这涉及到很多猜测。例如,min(Sig) 是否总是等于 min(Ref),如果不是,应该是什么行为?

标签: matlab


【解决方案1】:

这不是 Matlab 独有的问题,所以我将给出一个更笼统的答案: 标准化的常用方法是减去均值并除以标准差。由于您不想修改参考信号,这是我的解决方案:

mRef = mean(Ref)
stdRef = std(Ref)
mSig = mean(Sig)
stdSig = std(Sig)
newSig = ((Sig - mSig)/stdSig) * stdRef + mRef

正如评论中所说,您还可以根据两个信号的最小值和最大值之间的差异进行缩放。

【讨论】:

  • 有效!太感谢了。它是如何工作的?你能简单解释一下吗?
  • 如果你标准化你的信号和你的参考,如果它们是线性相关的,你应该得到相同的输出。但是您希望保持参考信号完整,因此您只需乘以 stdRef 并在两者上添加 mRef 即可返回参考信号。
猜你喜欢
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
相关资源
最近更新 更多