Dynamic moving average with specific criteria
5 ビュー (過去 30 日間)
古いコメントを表示
I have some code that takes a column vector and performs a moving average on these data. The results from the moving average are placed in a cell array. Then, the window size of the averaging function increases (window size is set by i=1:60; amd n=round(10.^(i/10)); ) and the moving average is repeated. The results are then placed in to the next column of the cell array...and the process repeated:
m=cell(1000001:60);
sd=zeros(1,60);
for i=1:60;
n=round(10.^(i/10));
mask=ones(n,1)/n;
a=conv(P,mask,'valid');
m{i}=a;
sd(i)=std(a);
end
The problem:
In the original data being analysed (i.e. P), all values are either positive or 0. My goal is to only perform the averaging function on windowed data that do not either begin or end with a zero. It's ok for the block of data to contain zeroes, its just I don't want the averaging function to return a value to the cell array if the block begins or ends with a 0. I'm pretty new to matlab, and can't see how I can tell the code this, so any suggestions would be greatly appreciated.
0 件のコメント
採用された回答
Jan
2013 年 1 月 17 日
編集済み: Jan
2013 年 1 月 20 日
1000001:60 is the vector of the numbers from 1000001 to 60 in steps of 1. Because 60 is smaller than 1000001, this is the scalar 1000001 only. Therefore m=cell(1000001:60) is a large {1000001 x 1000001} cell. What do you want instead?
You can remove the values, which belong to the zero margins, after the calulations:
P0 = P == 0;
ignore = and(P0(1:end - n + 1), P0(n:end)); % Perhaps (n-1) etc.
a(ignore) = [];
[EDITED] Doh! No, 1000001:60 is not 1000001, but the empty matrix. Therefore m is not large, but empty.
5 件のコメント
Cedric
2013 年 1 月 21 日
編集済み: Cedric
2013 年 1 月 21 日
I think that what Jan had in mind is that:
P = [1 2 0 3 4 5 0 6 7] ;
n = 2 ; % 1,..,numel(P)
mask = ones(n, 1) / n ;
a = conv(P, mask, 'valid') ;
P0 = P == 0 ;
ii = find(P0)-n+1 ;
ii = ii(ii>0) ;
ignore = P0(1:end-n+1) ;
ignore(ii) = true ;
a(~ignore) % in your loop, m{i} = a(~ignore) ;
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!