Content and rate of change in a buffer
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
this is a part of my code
I have a buffer and its content is changing according to the time and rates. I dont want Buffervalue to become zero so I want it to stay zero until the end of the time slot, when its ammount hits 0.
This is my code :
Time=[0.5 1 5 8 10 20 22 39 40 42 50 51 55 60 69 70 73 100 102 110];
Buff=0;
Buffervalue= zeros(1,10);
rate=[1 0.3 -16 2 -16 2 7 -16 -16 0.4 1 0.3 -16 2 -16 2 7 -16 -16 0.4];
for slot= 1:20
if Buff+(Time(slot)*rate(slot))<=0
Buffervalue(slot)=0;
else
Buff= Buff+(Time(slot)*rate(slot));
Buffervalue(slot)=Buff;
end
end
plot(Time,Buffervalue)
The problem is I have only one negative rate (-16) but when I look at the plot there are different slopes, so it kind of seems wrong to me.
Do you have any idea?
0 Kommentare
Antworten (1)
Mathieu NOE
am 9 Mai 2022
hello
IMHO, the non uniform x spacing is prone to bug - so I prefered to resample the data with constant x spacing .
Now I wonder how the rate profile is supposed to evolve between "raw" values given in first place. a linear interpolation is my first guess but may not meet your initial goal
clc
clearvars
Time=[0.5 1 5 8 10 20 22 39 40 42 50 51 55 60 69 70 73 100 102 110];
Buff=0;
Buffervalue= 0;
rate=[1 0.3 -16 2 -16 2 7 -16 -16 0.4 1 0.3 -16 2 -16 2 7 -16 -16 0.4];
% resample data with fixed delta x spacing = 0.5
t = min(Time):0.5:max(Time);
rate_it = interp1(Time,rate,t);
for slot= 1:numel(t)
if Buff+(t(slot)*rate_it(slot))<=0
Buffervalue(slot)=0;
else
Buff= Buff+(t(slot)*rate_it(slot));
Buffervalue(slot)=Buff;
end
end
subplot(2,1,1),plot(Time,rate,'*b',t,rate_it,'r')
title(' Rate values');
legend('raw','interpolated');
subplot(2,1,2),plot(t,Buffervalue)
title(' Buffervalue ');
0 Kommentare
Siehe auch
Kategorien
Mehr zu Variables 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!