Благодаря @Tasos Papastylianou я нашел решение.Достаточно расположить значения сигналов в матрице и взять минимальное и максимальное значения для каждой строки:
#To find envelope: arrange the function values in matrix
#And take max and min by row
foo = [s1, s2, s3];
env_hi = max(foo,[], 2);
env_low = min(foo, [], 2);
#
clf;
hold on;
plot(x, s1, 'g', x, s2, 'b', x, s3, 'r' )
plot(x, env_low, 'k^', x, env_hi, 'kv')
legend('s1', 's2', 's3', 'env-low', 'env-hi', 'location', 'north');
#
![enter image description here](https://i.stack.imgur.com/RFaRv.png)