如何检测每50行的最小值和最大值

时间:2015-09-01 10:46:42

标签: matlab

我试图在MATLAB中检测峰值。我试图使用findpeaks功能。问题是我的数据包含4200行,我只想检测每50行中的最小和最大点。
在我将此代码用于实时加速度计数据之后。

这是我的代码:

[peaks,peaklocations] = findpeaks( filteredX, 'minpeakdistance', 50 );
plot( x, filteredX, x( peaklocations ), peaks, 'or' )

1 个答案:

答案 0 :(得分:1)

因此,您希望首先将矢量整形为50个样本行,然后计算每行的峰值。

A = randn(4200,1);
B = reshape (A,[50,size(A,1)/50]); %//which gives B the structure of 50*84 Matrix
pks=zeros(50,size(A,1)/50); %//pre-define and set to zero/NaN for stability
pklocations = zeros(50,size(A,1)/50); %//pre-define and set to zero/NaN for stability
for i = 1: size(A,1)/50
[pks(1:size(findpeaks(B(:,i)),1),i),pklocations(1:size(findpeaks(B(:,i)),1),i)] = findpeaks(B(:,i)); %//this gives you your peak, you can alter the parameters of the findpeaks function.
end

这会为每个细分生成2个矩阵,pklocations和pks。 c的缺点是因为你不知道每个段会得到多少个峰值,并且你的矩阵必须具有相同的每列长度,所以我用零填充它,如果你愿意,可以用NaN填充它。

编辑,因为OP每50个样本只需要1个最大值和1个最小值,所以MATLAB中的min / max函数可以很容易地满足这一要求。

 A = randn(4200,1);
 B = reshape (A,[50,size(A,1)/50]); %//which gives B the structure of 50*84 Matrix
 [pks,pklocations] = max(B);
 [trghs,trghlocations] = min(B);

我猜或者,你可以做一个max(pks),但它只是让它变得复杂。