You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.6 KiB
39 lines
1.6 KiB
6 years ago
|
function frameFout = iTNS(frameFin, frameType, TNScoeffs)
|
||
|
%Implementation of the reverse TNS step
|
||
|
% Usage frameFout = iTNS(frameFin, frameType, TNScoeffs), where:
|
||
|
% Inputs
|
||
|
% - frameFin is the frame in the frequency domain, in MDCT coefficients
|
||
|
% representation containing both channels of the audio stored in an
|
||
|
% array of dimensions 1024X2
|
||
|
% - frameType is the type of the current frame in string
|
||
|
% representation, can be one of "OLS" (ONLY_LONG_SEQUENCE), "LSS"
|
||
|
% (LONG_START_SEQUENCE), "ESH" (EIGHT_SHORT_SEQUENCE), "LPS"
|
||
|
% (LONG_STOP_SEQUENCE)
|
||
|
% - TNScoeffs is the quantized TNS coefficients array of dimensions
|
||
|
% 4X8 for EIGHT_SHORT_SEQUENCE frames and 4X1 otherwise
|
||
|
%
|
||
|
% Output
|
||
|
% - frameFout is the frame in the frequency domain after Temporal Noise
|
||
|
% Shaping, in MDCT coefficients representation containing both channels
|
||
|
% of the audio stored in an array of dimensions 1024X2
|
||
|
|
||
|
% Declares persistent variable holding the TNS tables and initializes if empty
|
||
|
persistent TNSTables;
|
||
|
if isempty(TNSTables)
|
||
|
TNSTables = load('TableB219.mat');
|
||
|
end
|
||
|
|
||
|
if ~strcmp(frameType, 'ESH')
|
||
|
% Inverses MDCT coefficients filtering
|
||
|
frameFout = filter(1, [1 TNScoeffs], frameFin);
|
||
|
else
|
||
|
for subFrameIndex = 1:8
|
||
|
subFrame = frameFin((subFrameIndex - 1) * 128 + 1:subFrameIndex * 128);
|
||
|
|
||
|
% Inverses MDCT coefficients filtering
|
||
|
frameFout((subFrameIndex - 1) * 128 + 1:subFrameIndex * 128) = ...
|
||
|
filter(1, [1 TNScoeffs((subFrameIndex - 1) * 4 + 1:subFrameIndex * 4)], subFrame);
|
||
|
end
|
||
|
end
|
||
|
end
|