How to realize linear function (filter?) with saturation?

Initial signal equals ones, then minus ones (it can switch many times):
u = [ones(15,1);-ones(5,1)];
If u==1 then output should be .1; .2... up to 1 and stay 1 (saturation). After u==-1 the output should be -.1; -.2... up to -1.
I tried filter:
Nb = 10;
b = ones(1,Nb)/Nb;
y = filter(b,1,u);
stem([u, y])
It's wrong:
How to make transform function (maybe filter)?

 채택된 답변

Jan
Jan 2021년 5월 2일
편집: Jan 2021년 5월 2일
u = [ones(15,1);-ones(5,1)];
Ramp = 0.1:0.1:1; % Set of values
v = SaturatedRamp(u, Ramp);
function v = SaturatedRamp(u, R)
% Running index, starting from 1 at each change:
k = [false; diff(u(:)) ~= 0];
s = [1; find(k)];
I = ones(numel(u), 1);
I(k) = 1 - diff(s);
I = cumsum(I);
R = R(:);
I = min(numel(R), I); % Limit indices to length of ramp
v = R(I) .* u(:); % Copy sign of original data
end

댓글 수: 1

Thank you very much, Jan!
(I looked through function
ischange(A,'linear','Threshold',THR);
how it plots the results.)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

제품

릴리스

R2021a

질문:

2021년 5월 2일

댓글:

2021년 5월 2일

Community Treasure Hunt

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

Start Hunting!

Translated by