Commit 216d1616 authored by emerit's avatar emerit
Browse files

Add script to generation fastconv and parambin fx rom tables

parent 292c5cf4
Loading
Loading
Loading
Loading
+94329 −47060

File changed.

Preview size limit exceeded, changes collapsed.

+3 −3
Original line number Diff line number Diff line
@@ -729,11 +729,11 @@ typedef struct ivas_hrtfs_parambin_struct
    Word16 hrtfShCoeffsRe_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; /*factor_Q_hrtfShCoeffs_fx*/
    Word16 hrtfShCoeffsIm_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; /*factor_Q_hrtfShCoeffs_fx*/
    Word16 factor_Q_reverberationTimes_fx;
    Word32 parametricReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX]; /*factor_Q_reverberationTimes_fx*/
    Word16 parametricReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX]; /*factor_Q_reverberationTimes_fx*/
    Word16 factor_Q_reverberationEneCorrections_fx;
    Word32 parametricReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX]; /*factor_Q_reverberationEneCorrections_fx*/
    Word16 parametricReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX]; /*factor_Q_reverberationEneCorrections_fx*/
    Word16 factor_Q_EarlyPartEneCorrection_fx;
    Word32 parametricEarlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]; /*factor_Q_EarlyPartEneCorrection_fx*/
    Word16 parametricEarlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]; /*factor_Q_EarlyPartEneCorrection_fx*/
#endif                                                                 // IVAS_FLOAT_FIXED

    float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX];
+0 −17
Original line number Diff line number Diff line
{
    "cmake.configureArgs": [
        "-DCOPY_EXECUTABLES_FROM_BUILD_DIR=TRUE",
        "-DVCPKG_TARGET_TRIPLET=-static"
    ],
    "vcpkg.general.enable": true,
    "vcpkg.target.hostTriplet": "x64-windows",
    "vcpkg.target.defaultTriplet": "-static",
    "vcpkg.target.useStaticLib": true,
    "cmake.configureSettings": {
        "CMAKE_TOOLCHAIN_FILE": "D:/DEV/vcpkg/scripts/buildsystems/vcpkg.cmake"
    },
    "vcpkg.target.installDependencies": true,
    "vcpkg.target.preferSystemLibs": false,
    "vcpkg.target.useManifest": false,
    "cmake.generator": "Ninja"
}
 No newline at end of file
+98 −0
Original line number Diff line number Diff line
@@ -44,18 +44,60 @@ function write_fastconv_rom_table(output_file, FastConv_SHD_IR_FOA, FastConv_SHD
    
    %% HRIRs (SHD)
    % HOA3
    IR = FastConv_SHD_IR_HOA3;
    factorQ = int16(floor( double(31) - log( IR.latency_s ) / log( 2. ) ));
    latency_s_fx = int32(IR.latency_s .* (2.^double(factorQ)));
    fprintf(fid, '#ifdef IVAS_FLOAT_FIXED\n');
    fprintf(fid, '#ifdef FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, ['const Word16 FASTCONV_' FastConv_SHD_IR_HOA3.order '_latency_s_Q_fx = %d;\n'], factorQ);
    fprintf(fid, '#endif  // FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, ['const Word32 FASTCONV_' FastConv_SHD_IR_HOA3.order '_latency_s_fx = %d;\n'], latency_s_fx);
    writeData3L_fx_32(fid, ['const Word32 leftHRIRReal_' FastConv_SHD_IR_HOA3.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 leftHRIRImag_' FastConv_SHD_IR_HOA3.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 rightHRIRReal_' FastConv_SHD_IR_HOA3.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 rightHRIRImag_' FastConv_SHD_IR_HOA3.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    fprintf(fid, '#endif  // IVAS_FLOAT_FIXED\n\n');

    fprintf(fid, ['const uint32_t FASTCONV_' FastConv_SHD_IR_HOA3.order '_latency_s = 0x%tx;\n'], FastConv_SHD_IR_HOA3.latency_s);
    writeData3L(fid, ['const uint32_t leftHRIRReal_' FastConv_SHD_IR_HOA3.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(FastConv_SHD_IR_HOA3.IR(1,:,:,:))));
    writeData3L(fid, ['const uint32_t leftHRIRImag_' FastConv_SHD_IR_HOA3.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(FastConv_SHD_IR_HOA3.IR(1,:,:,:))));
    writeData3L(fid, ['const uint32_t rightHRIRReal_' FastConv_SHD_IR_HOA3.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(FastConv_SHD_IR_HOA3.IR(2,:,:,:))));
    writeData3L(fid, ['const uint32_t rightHRIRImag_' FastConv_SHD_IR_HOA3.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA3.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(FastConv_SHD_IR_HOA3.IR(2,:,:,:))));
    % HOA2
    IR = FastConv_SHD_IR_HOA2;
    factorQ = int16(floor( double(31) - log( IR.latency_s ) / log( 2. ) ));
    latency_s_fx = int32(IR.latency_s .* (2.^double(factorQ)));
    fprintf(fid, '#ifdef IVAS_FLOAT_FIXED\n');
    fprintf(fid, '#ifdef FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, ['const Word16 FASTCONV_' FastConv_SHD_IR_HOA2.order '_latency_s_Q_fx = %d;\n'], factorQ);
    fprintf(fid, '#endif  // FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, ['const Word32 FASTCONV_' FastConv_SHD_IR_HOA2.order '_latency_s_fx = %d;\n'], latency_s_fx);
    writeData3L_fx_32(fid, ['const Word32 leftHRIRReal_' FastConv_SHD_IR_HOA2.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 leftHRIRImag_' FastConv_SHD_IR_HOA2.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 rightHRIRReal_' FastConv_SHD_IR_HOA2.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 rightHRIRImag_' FastConv_SHD_IR_HOA2.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    fprintf(fid, '#endif  // IVAS_FLOAT_FIXED\n');

    fprintf(fid, ['const uint32_t FASTCONV_' FastConv_SHD_IR_HOA2.order '_latency_s = 0x%tx;\n'], FastConv_SHD_IR_HOA2.latency_s);
    writeData3L(fid, ['const uint32_t leftHRIRReal_' FastConv_SHD_IR_HOA2.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(FastConv_SHD_IR_HOA2.IR(1,:,:,:))));
    writeData3L(fid, ['const uint32_t leftHRIRImag_' FastConv_SHD_IR_HOA2.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(FastConv_SHD_IR_HOA2.IR(1,:,:,:))));
    writeData3L(fid, ['const uint32_t rightHRIRReal_' FastConv_SHD_IR_HOA2.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(FastConv_SHD_IR_HOA2.IR(2,:,:,:))));
    writeData3L(fid, ['const uint32_t rightHRIRImag_' FastConv_SHD_IR_HOA2.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_HOA2.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(FastConv_SHD_IR_HOA2.IR(2,:,:,:))));
    % FOA
    IR = FastConv_SHD_IR_FOA;
    factorQ = int16(floor( double(31) - log( IR.latency_s ) / log( 2. ) ));
    latency_s_fx = int32(IR.latency_s .* (2.^double(factorQ)));
    fprintf(fid, '#ifdef IVAS_FLOAT_FIXED\n');
    fprintf(fid, '#ifdef FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, ['const Word16 FASTCONV_' FastConv_SHD_IR_FOA.order '_latency_s_Q_fx = %d;\n'], factorQ);
    fprintf(fid, '#endif  // FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, ['const Word32 FASTCONV_' FastConv_SHD_IR_FOA.order '_latency_s_fx = %d;\n'], latency_s_fx);
    writeData3L_fx_32(fid, ['const Word32 leftHRIRReal_' FastConv_SHD_IR_FOA.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_FOA.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 leftHRIRImag_' FastConv_SHD_IR_FOA.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_FOA.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 rightHRIRReal_' FastConv_SHD_IR_FOA.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_FOA.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, ['const Word32 rightHRIRImag_' FastConv_SHD_IR_FOA.order '_fx[BINAURAL_CONVBANDS][' FastConv_SHD_IR_FOA.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    fprintf(fid, '#endif  // IVAS_FLOAT_FIXED\n');

    fprintf(fid, ['const uint32_t FASTCONV_' FastConv_SHD_IR_FOA.order '_latency_s = 0x%tx;\n'], FastConv_SHD_IR_FOA.latency_s);
    writeData3L(fid, ['const uint32_t leftHRIRReal_' FastConv_SHD_IR_FOA.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_FOA.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], real(squeeze(FastConv_SHD_IR_FOA.IR(1,:,:,:))));
    writeData3L(fid, ['const uint32_t leftHRIRImag_' FastConv_SHD_IR_FOA.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_FOA.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(FastConv_SHD_IR_FOA.IR(1,:,:,:))));
@@ -63,6 +105,20 @@ function write_fastconv_rom_table(output_file, FastConv_SHD_IR_FOA, FastConv_SHD
    writeData3L(fid, ['const uint32_t rightHRIRImag_' FastConv_SHD_IR_FOA.order '[BINAURAL_CONVBANDS][' FastConv_SHD_IR_FOA.order '_CHANNELS][BINAURAL_NTAPS_SBA]'], imag(squeeze(FastConv_SHD_IR_FOA.IR(2,:,:,:))));

    %% HRIRs (SD)
    IR = FastConv_SD_IR;
    factorQ = int16(floor( double(31) - log( IR.latency_s ) / log( 2. ) ));
    latency_s_fx = int32(IR.latency_s .* (2.^double(factorQ)));
    fprintf(fid, '#ifdef IVAS_FLOAT_FIXED\n');
    fprintf(fid, '#ifdef FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, 'const Word16 FASTCONV_HRIR_latency_s_Q_fx = %d;\n', factorQ);
    fprintf(fid, '#endif  // FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, 'const Word32 FASTCONV_HRIR_latency_s_fx = %d;\n', latency_s_fx);
    writeData3L_fx_32(fid, 'const Word32 leftHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]', real(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, 'const Word32 leftHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]', imag(squeeze(IR.IR(1,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, 'const Word32 rightHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]', real(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    writeData3L_fx_32(fid, 'const Word32 rightHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]', imag(squeeze(IR.IR(2,:,:,:))), IR.factorQ);
    fprintf(fid, '#endif  // IVAS_FLOAT_FIXED\n');

    fprintf(fid, 'const uint32_t FASTCONV_HRIR_latency_s = 0x%tx;\n', FastConv_SD_IR.latency_s);
    writeData3L(fid, 'const uint32_t leftHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]', real(squeeze(FastConv_SD_IR.IR(1,:,:,:))));
    writeData3L(fid, 'const uint32_t leftHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]', imag(squeeze(FastConv_SD_IR.IR(1,:,:,:))));
@@ -70,6 +126,20 @@ function write_fastconv_rom_table(output_file, FastConv_SHD_IR_FOA, FastConv_SHD
    writeData3L(fid, 'const uint32_t rightHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]', imag(squeeze(FastConv_SD_IR.IR(2,:,:,:))));
    
    %% BRIRs (SD)
    IR = FastConv_SD_BRIR;
    factorQ = int16(floor( double(31) - log( IR.rev_param.latency_s ) / log( 2. ) ));
    latency_s_fx = int32(IR.rev_param.latency_s .* (2.^double(factorQ)));
    fprintf(fid, '#ifdef IVAS_FLOAT_FIXED\n');
    fprintf(fid, '#ifdef FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, 'const Word16 FASTCONV_BRIR_latency_s_Q_fx = %d;\n', factorQ);
    fprintf(fid, '#endif  // FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, 'const Word32 FASTCONV_BRIR_latency_s_fx = %d;\n', latency_s_fx);
    writeData3L_fx_32(fid, 'const uint32_t leftBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]', real(squeeze(IR.IR(1,:,:,1:FastConv_SD_BRIR.rev_param.NFilter))), IR.factorQ);
    writeData3L_fx_32(fid, 'const uint32_t leftBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]', imag(squeeze(IR.IR(1,:,:,1:FastConv_SD_BRIR.rev_param.NFilter))), IR.factorQ);
    writeData3L_fx_32(fid, 'const uint32_t rightBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]', real(squeeze(IR.IR(2,:,:,1:FastConv_SD_BRIR.rev_param.NFilter))), IR.factorQ);
    writeData3L_fx_32(fid, 'const uint32_t rightBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]', imag(squeeze(IR.IR(2,:,:,1:FastConv_SD_BRIR.rev_param.NFilter))), IR.factorQ);
    fprintf(fid, '#endif  // IVAS_FLOAT_FIXED\n');

    fprintf(fid, '/* Binaural rendering data set based on BRIRs \n');
    fprintf(fid, ' * Tables derived from Mozart IIS BRIRs.*/\n');
    fprintf(fid, 'const uint32_t FASTCONV_BRIR_latency_s = 0x%tx;\n', FastConv_SD_BRIR.rev_param.latency_s);
@@ -79,6 +149,20 @@ function write_fastconv_rom_table(output_file, FastConv_SHD_IR_FOA, FastConv_SHD
    writeData3L(fid, 'const uint32_t rightBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]', imag(squeeze(FastConv_SD_BRIR.IR(2,:,:,1:FastConv_SD_BRIR.rev_param.NFilter))));

    % RT60
    rt60 = IR.rev_param.rt60 .* (2.^double(IR.factorQ_rt60));
    fprintf(fid, '#ifdef IVAS_FLOAT_FIXED\n');
    fprintf(fid, '#ifdef FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, 'const Word16 fastconvReverberationTimes_Q_fx = %d;\n', IR.factorQ_rt60);
    fprintf(fid, '#endif  // FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid,'const Word16 fastconvReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX] = \n{');
    fprintf(fid,'\n\t');
    for bandIdx = 1:FastConv_SD_BRIR.rev_param.kAna
        fprintf(fid,'%d,    ', int16(rt60(bandIdx)));
    end
    fprintf(fid,'\n};\n');
    fprintf(fid,'\n\n');
    fprintf(fid, '#endif  // IVAS_FLOAT_FIXED\n');

    fprintf(fid,'const uint32_t fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX] = \n{');
    fprintf(fid,'\n\t');
    for bandIdx = 1:FastConv_SD_BRIR.rev_param.kAna
@@ -88,6 +172,20 @@ function write_fastconv_rom_table(output_file, FastConv_SHD_IR_FOA, FastConv_SHD
    fprintf(fid,'\n\n');

    % energyReverb
    nrgLr = IR.rev_param.nrgLr .* (2.^double(IR.factorQ_nrgLr));
    fprintf(fid, '#ifdef IVAS_FLOAT_FIXED\n');
    fprintf(fid, '#ifdef FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid, 'const Word16 fastconvReverberationEneCorrections_Q_fx = %d;\n', IR.factorQ_rt60);
    fprintf(fid, '#endif  // FIX_CREND_CHANGES_AND_HRTF_FILE_FORMAT\n');
    fprintf(fid,'const Word16 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] = \n{');
    fprintf(fid,'\n\t');
    for bandIdx = 1:FastConv_SD_BRIR.rev_param.kAna
        fprintf(fid,'%d,    ', int16(nrgLr(bandIdx)));
    end
    fprintf(fid,'\n};\n');
    fprintf(fid,'\n\n');
    fprintf(fid, '#endif  // IVAS_FLOAT_FIXED\n');

    fprintf(fid,'const uint32_t fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX] = \n{');
    fprintf(fid,'\n\t');
    for bandIdx = 1:FastConv_SD_BRIR.rev_param.kAna
+0 −3
Original line number Diff line number Diff line
@@ -153,9 +153,6 @@ fp = fopen(rom_file,'at');
fprintf(fp,"\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n%s\n\n%s\n\n%s\n%s\n%s\n\n%s\n%s\n%s\n", ...
'#include <stdint.h>', ...
'#include "options.h"', ...
'#ifdef DEBUGGING', ...
'#include "debug.h"', ...
'#endif', ...
'#include "cnst.h"', ...
'#include "ivas_cnst.h"', ...
'#include "wmc_auto.h"', ...
Loading