首页 > 解决方案 > 'resample' 具有相同大小的信号

问题描述

我有 4 个(2 个速率和 2 个时间)信号,我需要均衡它们的大小。我先把它们剪掉,因为我也需要。第一次和速率信号的大小是 3901,另一个是 830。但不仅仅是删除元素,我想保持曲线。我认为我需要插值并尝试“重新采样”,但它并不完美。看起来像照片。我应该如何改进我的代码?任何想法?

 index=time >= 9.6 & tsyn <= 13.5; %time boundaries of first time signal
 time1=tsyn(index); %first time signal
 time_f=resample(time1,830,3901);
 Rate1=CLU_YR1(index)              %first rate signal
 Rate_f=resample(Rate1,830,3901);

 index2 = cm.Time.data >= 26.3 & cm.Time.data <= 30.45; %time boundaries of second time signal
 time2=cm.Time.data(index2)   %second time signal
 Rat2=cm.BodySensor_SC1_Omega_B_z.data*(-180/pi)        %second rate signal
 Rate_p=Rat2(index2)

在此处输入图像描述

标签: matlabsizesignalsinterpolationresampling

解决方案


我想你的曲线的一些不匹配源于原始序列在向量末尾不是(接近)0这一事实。从 matlab重采样文档

过滤时,重采样假定输入序列 x 在给定样本之前和之后都为零。x 端点与零的较大偏差可能导致 y 出现意外值。

最好的选择取决于您接下来要做什么。如果您想拥有一个新的上采样版本(即长度为 3901 的两个信号),您可以查看interp1,它支持几种不同的方法。如果您选择这样做,请记住,其中的值y(t)将根据t您提供的值进行插值。由于您的时间数组似乎没有对齐(一个在 9.6 到 13 秒之间,另一个在 26 到 30 秒之间),您最好按照以下方式进行操作:

y_new = interp1( linspace(1,100,830), rate_p, linspace(1,100,3901), 'linear');

时间数组也是如此。


推荐阅读