📄 tg7231decoder.m
字号:
function tG7231Decoder (FName, FName2)% Compare Matlab decoder with reference C-code decoder% Default mode:% tG7231Decoder % Runs through 5 test files% Single file mode:% tG7231Decoder (FName) % Bit file to both decoders% tG7231Decoder (FNameM, FNameC) % Data file to Matlab decoder, bit file% % to C-code decoder.% tG7231Decoder (FName, FNameErr) % Bit file to both decoders, frame% % error file to both decoders% Multiple test mode:% tG7231Decoder (FNames) % Cell array of file names% % Each element in the cell array is a file name% % (the bit file), or a cell array containing% % two file names (data file and bit file, or% % bit file and frame error file).% Notes:% - This version runs on Windows. Windows dependencies: Cygwin version of% LBCCODE2; Windows version of CompAudio; Windows file compare utility.% - This should be run in folder test which is just below the place that% G7231Decoder sits.% - The reference C-code was compiled under Cygwin (Unix subsystem running% under Windows). The Cygwin dll is in the same folder as LBCCODE2.exe.% - The AFsp utility routine CompAudio (Windows version) is used to compare% output files.% $Id: tG7231Decoder.m 1.3 2004/08/17 G.723.1-v2r1a $cd ..if (nargin == 0) % Test exercising several decoder modes RDir = fullfile ('test', 'ReferenceFiles'); % First group of files are input to Matlab FName = {fullfile(RDir,'FE27_04_Mref63.bit'); ... {fullfile(RDir,'FE27_04_Mref63.dat'); ... fullfile(RDir,'FE27_04_Mref63.bit')}; ... fullfile(RDir,'FE27_04_Cref53.bit'); ... fullfile(RDir,'DM29.C6V'); ... {fullfile(RDir,'VAD6353.C5V'); ... fullfile(RDir,'VAD6353.BFI')}};endNt = 0;if (iscell (FName)) NFile = length (FName); Nerr = 0; Nt = 0; for (i = 1:NFile) if (iscell (FName{i})) Nerr = Nerr + tDecoder (FName{i}{1}, FName{i}{2}); else Nerr = Nerr + tDecoder (FName{i}); end Nt = Nt + 1; endelse if (nargin == 1) tDecoder (FName); else tDecoder (FName, FName2); endendcd testif (Nt > 0) fprintf ('Number of mismatched files: %d / %d\n', Nerr, Nt);endreturn% ----------function Err = tDecoder (FName, FName2)if (nargin == 2) % Open the file for a peek at the first 6 characters fid = fopen (FName); if (fid == -1) error ('G7231Decoder: Cannot open input file'); end id = char (fread (fid, 6, 'uchar')'); fclose (fid); BitStream = (~ strcmp (id, 'MATLAB')); if (BitStream) FNameM = FName; FNameC = FName; FNameErr = FName2; else FNameM = FName; FNameC = FName2; FNameErr = []; endelse FNameM = FName; FNameC = FName; FNameErr = [];endif (isempty (FNameErr)) FNameMwav = MDecoder (FNameM); FNameCnh = CDecoder (FNameC);else FNameMwav = MDecoder (FNameM, FNameErr); FNameCnh =CDecoder (FNameC, FNameErr);endErr = Comp_Audio (FNameMwav, FNameCnh);delete (FNameMwav);delete (FNameCnh);return% ----------function FNameMwav = MDecoder (FName, FNameErr)[Path, Name, Ext] = fileparts (FName);FNameMwav = [Name '_Mdec.wav'];% Run the Matlab decoderdisp ('======');disp ('====== Running the Matlab decoder');if (nargin == 2) G7231Decoder (FName, FNameMwav, FNameErr);else G7231Decoder (FName, FNameMwav);endreturn% ----------function FNameCnh = CDecoder (FName, FNameErr)[Path, Name, Ext] = fileparts (FName);FNameCnh = [Name '_Cdec.nh'];% Create the headerless file for the C-code% Flags% -r53 or -r63 or -rFilename: rate or rate file name (1 byte per frame)% -c, -d, -b: coder only, decoder only, or both% -v: use VAD/CNG% -n: Suppress printing% -Noh: No highpass filter% -Nop: No postfilter% -Rxx: Reinit size (reinitialize coder/decoder every xx frames)% -fFile: Frame erasure file (1 byte per frame)disp ('====== Running the reference C decoder');LBCCODE = fullfile ('test', 'LBCCODE2.exe');Options = ' -n -d ';if (nargin == 2) FErr = ['-f' FNameErr ' '];else FErr = [];endeval (['! ' LBCCODE Options FErr FName ' ' FNameCnh]);return% ----------function Err = Comp_Audio (FName1, FName2)% Compare filesdisp ('');disp (['====== Comparing files']);COMPAUDIO = fullfile ('test', 'CompAudio.exe');text = evalc (['! ' COMPAUDIO ' -P integer16,0,8000,little-endian,1 ' ... FName1 ' ' FName2]);disp (text);I = findstr (text, 'File A = File B');Err = (isempty (I));return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -