如何固定MATLAB函数'mscohere'

时间:2015-06-13 14:35:01

标签: matlab

是否有任何黑客如何加强MATLAB功能mscohere?我正在计算26个大向量中每2个之间的一致性。需要很多时间。

我正在为每对向量使用这段代码。

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

1 个答案:

答案 0 :(得分:1)

我不知道改进mscohere的黑客攻击,但如果你需要多次调用mscohere,并行计算工具箱可以帮助加快这个过程。当我使用parfor与常规for循环的四名工作人员时,以下代码的运行速度提高了2.5倍(4.7秒对11.8秒):

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

编辑:为了保存输出结果,parfor对变量如何切片有一些规则 - 因此“单元阵列的单元阵列”