function eval_limiter(name) Tr = 1; % ms Tf = 100; % ms input_gain = 2; output_gain = 0.5; limit_thresh = 0.25; [x, fs, nbits, opts] = wavread(name); x = x.*input_gain; N = fix(length(x)); a_r = 1000/(Tr*fs); a_f = 1000/(Tf*fs); y = 0; for n=1:N if (y < abs(x(n))) y = y + a_r*(abs(x(n)) - y); else y = y + a_f*(abs(x(n)) - y); end env(n) = y; end; limiter_gain = limit_thresh./max(limit_thresh, env)'; x_limited = x(1:N).*limiter_gain.*output_gain; wavwrite(x_limited,fs,'limiter_out.wav'); subplot(2, 1, 1) plot(0:N-1, x(1:N), 0:N-1, env, 'r-'); grid; subplot(2, 1, 2) plot(0:N-1, x_limited, 0:N-1, limiter_gain, 'r-'); grid;