1. 程式人生 > >MATLAB實現兩組不同資料的時間對齊/同步

MATLAB實現兩組不同資料的時間對齊/同步

兩組不同資料的時間同步

對兩組不同資料進行融合的過程中,需要保證兩組資料的時間標籤的完全對齊的。這裡利用MATLAB實現兩組資料的時間標籤對齊,其中要求資料Data1的取樣頻率大於資料Data2的取樣頻率。

function SynMatrix = TimeSyn2Data(Data1, Data2)
% Data1: N Rows & 1 Column;   Data2: M Rows & 1 Column
% Assume: N >= M & Data1(1) <= Data2(1) & Data1(end) >= Data2(end)
k1 = 1;    k2 = size(Data2,1);    k3 = 2;
if Data2(1,1) < Data1(1,1)
    while Data2(k1,1) < Data1(1,1)
        k1 = k1 + 1;
        Index1 = k1;
    end
else
    Index1 = 1;
end
if Data2(end,1) > Data1(end,1)
    while Data2(k2,1) > Data1(end,1)
        k2 = k2 - 1;
        Index2 = k2;
    end
else
    Index2 = size(Data2,1);
end
N = size(Data1, 1);
M = Index2 - Index1 + 1;
SynMatrix = zeros(M, 4);
for i = 1 : Index2 - Index1 + 1
    Index3 = i + Index1 - 1;
    if Data2(Index3,1) == Data1(1,1)
        SynMatrix(i,:) = [1, Index3, Data1(1,1), Data2(Index3,1)];
    elseif Data2(Index3,1) == Data1(end,1)
        SynMatrix(i,:) = [N, Index3, Data1(N,1), Data2(Index3,1)];
    else
        for j = k3 : N -1
            vec1 = abs(Data2(Index3,1) - Data1(j-1,1));
            vec2 = abs(Data2(Index3,1) - Data1(j,1));
            vec3 = abs(Data2(Index3,1) - Data1(j+1,1));
            if vec2 <= vec1 && vec2 <= vec3
                SynMatrix(i,:) = [j, Index3, Data1(j,1), Data2(Index3,1)];
            end
        end
    end
end
end

生成的矩陣格式為:[Data1Data2Data1Data2][Data1的行數,Data2的行數,Data1對應的時間,Data2對應的時間]

簡單的測試

生成兩組不同頻率的資料:Data1=[1:0.02:100]TData2=[0.1:0.1:102]T Data1 = [1: 0.02: 100]{^T};Data2 = [0.1: 0.1: 102]^T呼叫函式得到對齊後的矩陣命令列 對齊結果

通過上述結果可以看出,對齊函式基本無誤[完].