function [M, ERavg, Fmem] = PQmodPatt (Es, Fmem)
% Modulation pattern processing

% P. Kabal $Revision: 1.1 $ $Date: 2003/12/07 13:35:09 $

persistent Nc a b Fss

if (isempty (Nc))
Fs = 48000;
NF = 2048;
Fss = Fs / (NF/2);
[Nc, fc] = PQCB ('Basic');
t100 = 0.050;
t0 = 0.008;
[a, b] = PQtConst (t100, t0, fc, Fss);
end

% Allocate memory
M = zeros (2, Nc);

e = 0.3;
for (i = 1:2)
for (m = 0:Nc-1)
Ee = Es(i,m+1)^e;
Fmem.DE(i,m+1) = a(m+1) * Fmem.DE(i,m+1) ...
+ b(m+1) * Fss * abs (Ee - Fmem.Ese(i,m+1));
Fmem.Eavg(i,m+1) = a(m+1) * Fmem.Eavg(i,m+1) + b(m+1) * Ee;
Fmem.Ese(i,m+1) = Ee;

M(i,m+1) = Fmem.DE(i,m+1) / (1 + Fmem.Eavg(i,m+1)/0.3);
end
end

ERavg = Fmem.Eavg(1,:);