Rate Limiter mfile without a for loop

조회 수: 16 (최근 30일)
Aubai
Aubai 2017년 9월 22일
Dear All,
i have some data with a slow rate of change (small slopes) yet at some points my rate of change is very high i would like to identify those points and limite the rate of change at those points.
of course this is already done in Matlab Simulink block Rate Limiter. i would like to have the same effect as this block yet using only mfiles coding envinroment.
so my question how can i code this without using loops?
Here is the code when using the loop:
if true
% code
function [out] = Rate_Limiter(time,Sig,up,lo,Initial)
if ~isscalar(up)%length(up) > 0
warning('the upper rate limit should be a scaler the first value will be selected');
up = up(1);
end
if ~isscalar((lo))%length(lo) > 0
warning('the lower rate limit should be a scaler the first value will be selected');
lo = lo(1);
end
Temp.ts = mean(diff(time));
y = nan(length(Sig),1);
for i = 1:length(Sig)
if i == 1
Temp.rate = (Sig(i)-Initial) / (Temp.ts);
else
Temp.rate = (Sig(i)-y(i-1)) / (time(i)-time(i-1));
end
if Temp.rate > up
y(i) = Temp.ts * up + y(i-1);
elseif Temp.rate < lo
y(i) = Temp.ts * lo + y(i-1);
else
y(i) = Sig(i);
end
end
out = y;
end
I know that this might be impossible as it is let's say 'a closed loop control system' which mean the final output of the ongoing step (i) may depend on the previous output of the function final output (i-1).
but lets just see if there is some other way to do it!

답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by