Files
2025-08-21 07:27:52 +02:00

56 lines
917 B
Plaintext
Executable File

function eval_adsr(Ta, Td, Vs, Tr)
% eval_adsr(0.1, 0.2, 0.2, 0.2)
fs = 10000;
aa = 1/(Ta*fs)
ba = (1-aa)
a_d = 5/(Td*fs)
a_r = 5/(Tr*fs)
state = 0;
s = 0;
tol = 1E-4;
ke = 1-exp(-1)
n = 0;
p = 0;
k = 1/ke;
kk = 0;
s
while (1),
if state == 0
s = aa + ba*s;
if s >= (ke-tol)
state = 1;
k = (1-Vs)/ke;
kk = Vs;
end;
end;
if state == 1
s = (1-a_d)*s;
if s <= (tol)
state = 2;
s = 1;
k = Vs;
kk = 0;
p = 0;
end;
end;
if state == 2
if p >= 0.1*fs
state = 3;
end;
p = p + 1;
end;
if state == 3
s = (1-a_r)*s;
if s <= (tol)
break;
end;
end;
n = n + 1;
y(n) = k*s + kk;
end;
plot((0:n-1)/fs, 0.8-y); grid;