"for" loop question

4 Ansichten (letzte 30 Tage)
NH
NH am 7 Feb. 2013
Hello,
Below is an excerpt from my code, in which I wish to linearly fix a baseline drift. The variable "QLBrainShift1" is simply the original signal.
AmtOfPts1 = iSO(3) - iSO(2); % Amount of points between SO 2 and 3
error1 = -QLBrainShift1(end); % scalar
for point1 = AmtOfPts1:-1:0
QLBrainShift1a = QLBrainShift1+error1-(point1/AmtOfPts1)*error1;
end
figure
plot(QTime(iSO(2):iSO(3)),QLBrainShift1a)
The plot that is being returned seems like QLBrainShift1a is being overwritten upon each loop. Therefore, only the last loop (point1=0) exits the "for" loop, and gets plotted. My intention is to create a new signal (QLBrainShift1a) according to the equation above with varying "point1" values, and plot all of the new signal on 1 graph. Any help is greatly appreciated.
Thanks, NH

Akzeptierte Antwort

Matt J
Matt J am 7 Feb. 2013
Bearbeitet: Matt J am 7 Feb. 2013
Perhaps as follows? Basically, you've forgotten to index the element of QLBrainShift1a (and maybe also QLBrainShift1) that you're trying to operate on.
point1=AmtOfPts1:-1:0;
for i=1:length(point1)
QLBrainShift1a(i) = QLBrainShift1(i)+error1-(point1(i)/AmtOfPts1)*error1;
end

Weitere Antworten (2)

Cedric
Cedric am 7 Feb. 2013
Bearbeitet: Cedric am 7 Feb. 2013
I can't figure out what you are trying to do, but here are some bits of code that may simplify the discussion..
Assume that we have the following
>> data = [4, 5 ,8, 7, 10, 9, 10, 11] ;
>> plot(data, '*') ; % Just to visualize.
which follows a line except for two points. If you wanted to subtract e.g. the 1st value from all elements of data, you would do
>> data = data - data(1)
data =
0 1 4 3 6 5 6 7
>> plot(data, '*') ; % Just to visualize.
If you wanted to e.g. subtract values according to the slope between data(1) and data(end), you could do
>> n = numel(data) ;
>> slope = (data(end)-data(1))/(n-1) ;
>> data = data - (0:n-1)*slope
data =
0 0 2 0 2 0 0 0
>> plot(data, '*') ; % Just to visualize.
All that could be contracted into
>> data = [4, 5 ,8, 7, 10, 9, 10, 11] ;
>> n = numel(data) ;
>> data = data - data(1) - (0:n-1)*(data(end)-data(1))/(n-1) ;
Is there something in there that could be adapted to your case? If not, you should maybe provide a short example of the data that you have and what you would like to obtain.

NH
NH am 7 Feb. 2013
Matt J,
Yes! Thank you, I knew it was something simple I was missing. Your time is greatly appreciated.
Cedric, thanks for your time as well. Helped me understand it a bit more.
-NH

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by