【问题标题】:Shifting signals in MATLAB在 MATLAB 中移动信号
【发布时间】:2015-03-09 20:57:54
【问题描述】:

我想实现一个系统来识别 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

【问题讨论】:

    标签: matlab signal-processing


    【解决方案1】:
    %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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2012-06-09
      • 2015-06-12
      • 1970-01-01
      • 2017-08-01
      相关资源
      最近更新 更多