フィルターのクリア

Info

この質問は閉じられています。 編集または回答するには再度開いてください。

Replacing a for loop?

3 ビュー (過去 30 日間)
jnaumann
jnaumann 2013 年 11 月 14 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
Hi,
I've written a small script to calculate the short time energy function of a signal. However it feels a bit clunky and my data sets are quite large so processing takes a while. Is there a way to speed up this process using vectorisation? This is the code at the moment.
function EImat=EI_mod(A,seg_length)
rms=sqrt(((sum(A.^2))/length(A)));
for i=1:(length(A))/seg_length;
A1=A((i*seg_length)-(seg_length-1):(i*seg_length));
rms1=sqrt(((sum(A1.^2))/seg_length));
EImat(i)=rms1;
end
Any help will be greatly appreciated.
Thanks
Jack
  1 件のコメント
dpb
dpb 2013 年 11 月 14 日
編集済み: dpb 2013 年 11 月 14 日
nSeg=floor(length(A)/seg_length);
EImat=zeros(1,nSeg);
for i=1:nSeg
...
Gotta' run--but preallocating will surely at least help...

回答 (1 件)

Roger Stafford
Roger Stafford 2013 年 11 月 14 日
編集済み: Roger Stafford 2013 年 11 月 14 日
EImat=sum(reshape(A,seg_length,[]).^2,1)/seg_length;
(Note: I assume here that the length of A is some integral multiple of seq_length.)
(Note 2: You don't return the 'rms' quantity in your function, so I haven't computed it here.)

この質問は閉じられています。

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by