在 MATLAB 中移动信号

Shifting signals in MATLAB

我想实现一个系统来识别 0-9 之间的数字。我有一个 TemplateSet 和一个 TestSet,其中包含 0-9 之间数字的录制音频信号。我必须在所有音频文件之间进行互相关,以找到它们之间的最佳相似性。之后,我应该对每个信号进行时移以使其同步,以便将其与其他信号进行比较以获得最佳结果。不知道怎么实现时移

MaxSize=[0,0];
for i=1:9
    TempSize=size(temp{i});
    TestSize=size(test{i});
    if(TempSize(1)>MaxSize(1))
        MaxSize(1)=TempSize(1);

    end
    if(TestSize(1)>MaxSize(1))
        MaxSize(1)=TestSize(1); 
    end

end

for j=1:9
    TsSize=(MaxSize-size( temp{j}));

    TpSize=(MaxSize-size( test{j}));
   temp{j}(end+TsSize)=0;
    test{j}(end+TpSize)=0;


end
%------------ Euclidean distance-----
sum=0;
 index=zeros(1,9); 
 Distance=zeros(9,9);
for m =1:9
   MinDistance=10000;

    for n=1:9
      Distance(m,n)= norm(test{m}-temp{n},2);
     if (Distance< MinDistance)
        index(m,n)=n;
          MinDistance=Distance;   
     end 
    end

   if(index(m)==m)
          sum=sum+1;
    end    
end

%--------------------------------------------------------------

TimeDiff=zeros(9,9);
for l=1:9
    for k=1:9
      [c,lag]=xcorr(test{l},temp{k});
      TimeDiff(l,k)=max(abs(c));

    end
end
%euclidean distance

 index=zeros(1,10); 

 Distance=zeros(10,10);

 for m =1:10
   MinDistance=10000;
    for n=1:10
      Distance(m,n)= norm(test{m}-temp{n},2);
     if (Distance < MinDistance)
        index(m,n)=n;
         MinDistance=Distance;   
     end 
    end

end

TimeDiff=zeros(10,10);
euclidean =zeros(10,10);

for l=1:10
    for i=1:10
      [c,lag]=xcorr(test{l},temp{i});
      [~,I]= max(abs(c));  
      shifted= circshift(test{1},I);
      euclidean(l,k)=norm(temp{l}-shifted,2);
    end
end

%.................................................

Index=0;
for i=1:10
    Min=1000000;
    for j=1:10
      if( euclidean(i,j)<Min ) 
          Min=euclidean(i,j);
          index=j;
      end 
    end

end

然后对信号进行交叉关联。