在for循环matlab中实现findpeaks

时间:2015-04-26 13:44:13

标签: matlab signal-processing

我已经编写了以下代码来计算for循环中的局部最大值及其位置,但是我得到一个错误,我有一个尺寸不匹配。我错过了什么?

这是我的代码:

   for col = 1:3000;
         c1(:,col)=xc(2:end,col);
% matrix xc is my matrix, it could be any random 2d matrix, and for each column i want to implement the findpeaks function

         [cmax(:,col),locs(:,col)]=findpeaks(c1(:,col));

    end

1 个答案:

答案 0 :(得分:0)

findpeaks最有可能为每次对函数调用的检测到的峰值和位置提供不同的数量。因为你试图切入一个没有参差不齐的矩阵(MATLAB不支持参差不齐的矩阵),你会得到尺寸不匹配。

解决方案可能是使用单元格数组:

%// Declare cell arrays here
cmax = cell(3000,1);
locs = cell(3000,1);
for col = 1:3000;
     c1(:,col)=xc(2:end,col);
     %// Change
     [cmax{col},locs{col}]=findpeaks(c1(:,col));
end

但是,如果您不喜欢使用单元格数组,那么您要做的是创建一个NaN值的矩阵,并且只填充最多可达到每个结果检测到的峰值数量将其余条目保持为NaN ....这样的事情:

%// Declare cmax and locs to be an array of nans
cmax = nan(size(xc));
locs = nan(size(xc));
for col = 1:3000;
     c1(:,col)=xc(2:end,col);
     %// Change
     [c,l]=findpeaks(c1(:,col));
     %// Determine total number of peaks and locations
     N = numel(c);

     %// Populate each column up to this point
     cmax(1:N,:) = c;
     locs(1:N,:) = l;
end