2015-06-13 2 views
0

Есть ли какой-нибудь взломать, как закрепить MATLAB funcion mscohere? Я вычисляю согласованность между двумя из 26 больших векторов. Занимает много времени.Как закрепить функцию MATLAB 'mscohere'

Я использую этот кусок кода для каждой пары векторов.

coherenceMatrix{i,j} = mscohere(double(data.ch(indexes(i)).data),double(data.ch(indexes(j)).data),WINDOW,NOVERLAP) ; 

ответ

1

Я не знаю, хак, чтобы улучшить mscohere, но если вам нужно несколько вызовов mscohere, параллельные вычисления инструментов может помочь ускорить этот процесс. Следующий код работает 2.5x быстрее (4,7 с против 11.8s), когда я использую четыре рабочих с parfor против регулярной for цикла:

rng default 
r = randn(16384,26); 
h = fir1(30,0.2,rectwin(31)); 
h1 = ones(1,10)/sqrt(10); 
tic 
cxy_outer=cell(size(r,2),1); 
parfor i =1:size(r,2) 
    cxy_inner=cell(size(r,2),1); 
    for j= 1:size(r,2) 
     if i<j 
      x=filter(h1,1,r(:,i)); 
      y=filter(h,1,filter(h1,1,r(:,j))); 
      cxy_inner{j}=mscohere(x,y,hanning(1024),512,1024); 
     end 
    end 
    cxy_outer{i}=cxy_inner; 
end 
toc 

Edit: Для того, чтобы сохранить результаты вывода, parfor имеет некоторые правила о том, как переменная могут быть нарезаны, следовательно, «матрица ячеек массивов ячеек»

Смежные вопросы