problem in applying loop

2 views (last 30 days)
Ali Asghar
Ali Asghar on 18 Sep 2019
Commented: Ali Asghar on 19 Sep 2019
I have emg signal (30000x4) and want to apply function on it in loop....
function waveLen = find_waveform_length(signal)
sum=0;
for i=2:length(signal)
sum= sum + abs(signal(i)-signal(i-1));
end
waveLen = sum;
%%%%%% New file %%%%%%%
load ('dath001.mat');
x = dath001; % 30000x4
for i = 1:4
waveLen(i) = find_waveform_length(x(i))
end
but it give output of 0 0 0 0
instead if i run waveLen function separately it give output of
463.6428 200.0671 411.7511 372.9306 ... I want this output by simple apply loop command
Thank you

Accepted Answer

Raj
Raj on 18 Sep 2019
What is the 'y' you have used in your main script loop? Its not defined anywhere. Use this line in main script:
waveLen(i) = find_waveform_length(x(:,i))
Since you have not shared your MAT file, I tried with a random 30000x4 matrix and it works.
Few other recommendations:
1) Put an 'end' for your function
2) Don't use variable 'i' or any other inbuilt Matlab variable as index in your 'for' loop.
  4 Comments
Raj
Raj on 18 Sep 2019
Again you have not mentioned what is 'y' here.
Lets see your expression in the loop:
datawindow(i) = w.*buffer(y(:,i),2000,-500)
You are trying to dynamically name the variable datawindow. It is not recommended. See this:
Now coming to your error. The right side of this expression will give you a matrix of some size and you are trying to assign that to a single element of matrix datawindow hence you are getting the size mismatch error.
Wayout: Define datawindow as a cell array like this:
datawindow=cell(4,1);
Then in your loop use this expression:
datawindow(i,1) = {w.*buffer(y(:,i),2000,-500)};
Now your datawindow will have 4 matrices as cell elements. You can extract and use them like this:
datawindow1=cell2mat(datawindow(1,1));
and so on.
See these links for details:

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!