如果您遵循该公式,则interp1
根本不需要。如果我正确解释了您的问题,您可以F(10k)
认真地计算介于...之间。alpha*F1 + (1-alpha)*F2
alpha
[0,1]
在 的情况下,这是在 处看到的值和在 处alpha
看到的值之间的分数。在您的情况下,这很简单:F1
F2
alpha = (ffnew - ff1) / (ff2 - ff1)
ff1
并且ff2
是您想要的值之间的价格,即ffnew
. 您可以验证 if ffnew = ff1
, thenalpha = 0
并且您得到原始F2
曲线。同样,如果ffnew = ff2
, thenalpha = 1
等你会得到原始F1
曲线。F1
任何介于两者之间的价格值F2
,您只需要谨慎地指定您的指定方式即可alpha
。
因此,alpha
对于您的情况,并且ff1 = 9.5k
将 是:ff2 = 11k
fnew = 10k
alpha = (10e3 - 9.5e3) / (11e3 - 9.5e3) = 0.33333...
因此,假设F1
和分别是和F2
处的曲线:9.5k
11k
alpha = (10e3 - 9.5e3) / (11e3 - 9.5e3);
Fnew = alpha*F1 + (1-alpha)*F2;
以上假设您的信号长度相同。如果不是,那么您必须对较小的信号进行插值,使其在长度上与较大的信号匹配。 interp1
是在这里使用的工具(恕我直言)。您可以将关键点/控制点指定为来自 的点F1
。但是,interp1
需要(x,y)
对并且我们没有任何x
值....y
尽管这些值来自F1
. 因此,您将人为x
地创建值作为增加的数值向量。我能想到的最简单的是一个从 1 到与较小信号一样多的值的向量。要扩展信号,您将生成另一个向量,该向量再次从 1 到较小信号中的多个值,但我们linspace
.
因此,尝试这样的事情:
max_len = max(numel(F1),numel(F2));
F1_interp = interp1(1:numel(F1), F1(:).', linspace(1,numel(F1),max_len));
F2_interp = interp1(1:numel(F2), F2(:).', linspace(1,numel(F2),max_len));
alpha = (10e3 - 9.5e3) / (11e3 - 9.5e3);
Fnew = alpha*F1_interp1 + (1-alpha)*F2_interp2;
第一行代码找到两个信号长度中最大的一个。接下来我们确保两者F1
的F2
长度相同。效果是其中一个不会改变,但另一个会扩展以匹配更大的信号。以上是为了保证两个信号的长度相同,不管是什么F1
和F2
是。完成此操作后,您就可以将我们上面讨论的操作照常应用于新信号。