📄 genexcplc.m
字号:
function [es, DecoderMem] = GenExcPLC (DecoderMem, DecoderPar)% Packet loss frame decoder% The previous data is taken from DecoderMem.eMem. This is the excitation% from the previous frame.% $Id: GenExcPLC.m 1.5 2004/08/06 G.723.1-v2r1a $LSubframe = DecoderPar.LSubframe;LFrame = sum (LSubframe);eMem = DecoderMem.eMem;NErr = DecoderMem.PLC.NErr;DecoderMem.PLC.uvGain = DecoderMem.PLC.uvGain * DecoderPar.PLCpar.uvGainF;% Update the error countNErr = NErr + 1;% If too many consecutive errors, set the output to zeroif (NErr >= DecoderPar.PLCpar.NErrMax) es = zeros (LFrame, 1); eMem = zeros (size (eMem));else L = DecoderMem.PLC.L; if (~ isnan (L)) % Voiced % Zero input, recursive filtering of past excitation es = DecoderPar.PLCpar.vGainF * RepExc (eMem, LFrame, L); eMem = ShiftVector (eMem, es); else % Unvoiced [esN, DecoderMem.PLC.Seed] = RandVal (DecoderMem.PLC.Seed, LFrame); es = DecoderMem.PLC.uvGain * esN; % Clear memory eMem = zeros (size (eMem)); endendDecoderMem.eMem = eMem;DecoderMem.PLC.NErr = NErr;return% -------------------------function [RV, Seed] = RandVal (Seed, NVal)% Generate NVal random numbers in [-1, +1) as a column vector.for (i = 1:NVal) Seed = mod (521 * Seed + 259, 65536); % Create a signed value Val = Seed; if (Val >= 32768) Val = Val - 65536; end % Scale to [-1, +1) RV(i,1) = Val / 32768; endreturn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -