Commit d63a21f6 authored by Nishant S Kulgod's avatar Nishant S Kulgod
Browse files

commit 2

parent 3e182c04
Loading
Loading
Loading
Loading
Loading
+16 −56
Original line number Diff line number Diff line
@@ -1091,13 +1091,11 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot_fx(

                /* apply residual mixing */

                matrix_product_fx( mixing_matrix_res_smooth_fx, nY, nY, 0, diff_f_real_fx, nY, 1, 0, output_f_real_fx );
                output_f_real_e = add( mixing_matrix_res_smooth_e, 25 );
                matrix_product_mant_exp_fx( mixing_matrix_res_smooth_fx, mixing_matrix_res_smooth_e, nY, nY, 0, diff_f_real_fx, 25, nY, 1, 0, output_f_real_fx, &output_f_real_e );
                scale_sig32( output_f_real_fx, nY, 6 - ( 31 - output_f_real_e ) );


                matrix_product_fx( mixing_matrix_res_smooth_fx, nY, nY, 0, diff_f_imag_fx, nY, 1, 0, output_f_imag_fx );
                output_f_imag_e = mixing_matrix_res_smooth_e + 25;
                matrix_product_mant_exp_fx( mixing_matrix_res_smooth_fx, mixing_matrix_res_smooth_e, nY, nY, 0, diff_f_imag_fx, 25, nY, 1, 0, output_f_imag_fx, &output_f_imag_e );
                scale_sig32( output_f_imag_fx, nY, 6 - ( 31 - output_f_imag_e ) );

                FOR( ch_idx = 0; ch_idx < nY; ch_idx++ )
@@ -1131,13 +1129,11 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot_fx(

            /* apply mixing matrix */

            matrix_product_fx( mixing_matrix_smooth_fx, nY, nX, 0, input_f_real_fx, nX, 1, 0, output_f_real_fx );
            output_f_real_e = add( mixing_matrix_smooth_e, 25 );
            matrix_product_mant_exp_fx( mixing_matrix_smooth_fx, mixing_matrix_smooth_e, nY, nX, 0, input_f_real_fx, 25, nX, 1, 0, output_f_real_fx, &output_f_real_e );
            scale_sig32( output_f_real_fx, MAX_CICP_CHANNELS, sub( 6, sub( 31, output_f_real_e ) ) );


            matrix_product_fx( mixing_matrix_smooth_fx, nY, nX, 0, input_f_imag_fx, nX, 1, 0, output_f_imag_fx );
            output_f_imag_e = add( mixing_matrix_smooth_e, 25 );
            matrix_product_mant_exp_fx( mixing_matrix_smooth_fx, mixing_matrix_smooth_e, nY, nX, 0, input_f_imag_fx, 25, nX, 1, 0, output_f_imag_fx, &output_f_imag_e );
            scale_sig32( output_f_imag_fx, MAX_CICP_CHANNELS, sub( 6, sub( 31, output_f_imag_e ) ) );

            /* collect output */
@@ -1701,9 +1697,7 @@ Word16 computeMixingMatrices_fx(

    /* Computing Q*Cx*Q' */

    matrix_product_fx( Q_fx, lengthCy, lengthCx, 0, Cx_fx, lengthCx, lengthCx, 0, Q_Cx_fx );
    Q_Cx_e = Q_e + Cx_fx_e;

    matrix_product_mant_exp_fx( Q_fx, Q_e, lengthCy, lengthCx, 0, Cx_fx, Cx_fx_e, lengthCx, lengthCx, 0, Q_Cx_fx, &Q_Cx_e );

    Word16 guard_bits = find_guarded_bits_fx( lengthCx + 1 );

@@ -1790,15 +1784,11 @@ Word16 computeMixingMatrices_fx(

    /* Computing the input matrix Kx'*Q'*G_hat'*Ky */

    matrix_product_fx( Kx_fx, lengthCx, lengthCx, 1, Q_fx, lengthCy, lengthCx, 1, mat_mult_buffer1_fx );
    mat_mult_buffer1_e = Kx_fx_e[0] + Q_e;

    matrix_product_mant_exp_fx( Kx_fx, Kx_fx_e[0], lengthCx, lengthCx, 1, Q_fx, Q_e, lengthCy, lengthCx, 1, mat_mult_buffer1_fx, &mat_mult_buffer1_e );

    matrix_diag_product_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCx, lengthCy, 0, G_hat_fx, G_hat_e, lengthCy, mat_mult_buffer2_fx, &mat_mult_buffer2_e );

    matrix_product_fx( mat_mult_buffer2_fx, lengthCx, lengthCy, 0, Ky_fx, lengthCy, lengthCy, 0, mat_mult_buffer1_fx );
    mat_mult_buffer1_e = mat_mult_buffer2_e + Ky_fx_e[0];

    matrix_product_mant_exp_fx( mat_mult_buffer2_fx, mat_mult_buffer2_e, lengthCx, lengthCy, 0, Ky_fx, Ky_fx_e[0], lengthCy, lengthCy, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e );

    IF( lengthCx < lengthCy )
    {
@@ -1849,13 +1839,9 @@ Word16 computeMixingMatrices_fx(

    /************************ Formulate M **********************/

    matrix_product_fx( Ky_fx, lengthCy, lengthCy, 0, mat_mult_buffer3_fx, lengthCy, lengthCx, 0, mat_mult_buffer1_fx );
    mat_mult_buffer1_e = Ky_fx_e[0] + mat_mult_buffer3_e;


    matrix_product_fx( mat_mult_buffer1_fx, lengthCy, lengthCx, 0, Kx_reg_inv_fx, lengthCx, lengthCx, 0, mixing_matrix_fx );
    mixing_matrix_e = Kx_reg_inv_e[0] + mat_mult_buffer1_e;
    matrix_product_mant_exp_fx( Ky_fx, Ky_fx_e[0], lengthCy, lengthCy, 0, mat_mult_buffer3_fx, mat_mult_buffer3_e, lengthCy, lengthCx, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e );

    matrix_product_mant_exp_fx( mat_mult_buffer1_fx, Kx_reg_inv_e[0], lengthCy, lengthCx, 0, Kx_reg_inv_fx, Kx_reg_inv_e[0], lengthCx, lengthCx, 0, mixing_matrix_fx, &mixing_matrix_e );

    /*-----------------------------------------------------------------*
     * Formulate Cr
@@ -1864,11 +1850,9 @@ Word16 computeMixingMatrices_fx(
    /* Compute Cy_tilde = M*Cx*M' */


    matrix_product_fx( mixing_matrix_fx, lengthCy, lengthCx, 0, Cx_fx, lengthCx, lengthCx, 0, mat_mult_buffer1_fx );
    mat_mult_buffer1_e = mixing_matrix_e + Cx_fx_e;
    matrix_product_mant_exp_fx( mixing_matrix_fx, mixing_matrix_e, lengthCy, lengthCx, 0, Cx_fx, Cx_fx_e, lengthCx, lengthCx, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e);

    matrix_product_fx( mat_mult_buffer1_fx, lengthCy, lengthCx, 0, mixing_matrix_fx, lengthCy, lengthCx, 1, mat_mult_buffer2_fx );
    mat_mult_buffer2_e = mat_mult_buffer1_e + mixing_matrix_e;
    matrix_product_mant_exp_fx( mat_mult_buffer1_fx, mat_mult_buffer1_e, lengthCy, lengthCx, 0, mixing_matrix_fx, mixing_matrix_e, lengthCy, lengthCx, 1, mat_mult_buffer2_fx, &mat_mult_buffer2_e);

    Cr_p_fx = Cr_fx;
    Cy_p_fx = Cy_fx;
@@ -2472,39 +2456,15 @@ Word16 computeMixingMatricesResidual_fx(
    mat_mult_buffer1_e = 0;
    move16();

    Word16 guard_bits = find_guarded_bits_fx( lengthCx + 1 );

    FOR( i = 0; i < lengthCy * lengthCx; ++i )
    {
        IF( mat_mult_buffer1_e > mat_mult_buffer2_e )
        {
            mat_mult_buffer2_fx[i] = L_shr( mat_mult_buffer2_fx[i], guard_bits );
        }
        ELSE
        {
            mat_mult_buffer1_fx[i] = L_shr( mat_mult_buffer1_fx[i], guard_bits );
        }
    }

    IF( mat_mult_buffer1_e > mat_mult_buffer2_e )
    {
        mat_mult_buffer2_e += guard_bits;
    }
    ELSE
    {
        mat_mult_buffer1_e += guard_bits;
    }
    matrix_product_fx( mat_mult_buffer1_fx, lengthCy, lengthCx, 0,
                       mat_mult_buffer2_fx, lengthCx, lengthCx, 1,
                       mat_mult_buffer3_fx );
    mat_mult_buffer3_e = 0;
    matrix_product_mant_exp_fx( mat_mult_buffer1_fx, 0, lengthCy, lengthCx, 0,
                       mat_mult_buffer2_fx, 0, lengthCx, lengthCx, 1,
                       mat_mult_buffer3_fx, &mat_mult_buffer3_e);

    /*-----------------------------------------------------------------*
     * Formulate M
     *-----------------------------------------------------------------*/

    matrix_product_fx( Ky_fx, lengthCy, lengthCy, 0, mat_mult_buffer3_fx, lengthCy, lengthCx, 0, mat_mult_buffer1_fx );
    mat_mult_buffer1_e = Ky_fx_e[0] + mat_mult_buffer3_e;
    matrix_product_mant_exp_fx( Ky_fx, Ky_fx_e[0], lengthCy, lengthCy, 0, mat_mult_buffer3_fx, mat_mult_buffer3_e, lengthCy, lengthCx, 0, mat_mult_buffer1_fx, &mat_mult_buffer1_e);

    FOR( i = 0; i < num_outputs; i++ )
    {
@@ -2526,7 +2486,7 @@ Word16 computeMixingMatricesResidual_fx(

    matrix_diag_product_fx( mixing_matrix_fx, mixing_matrix_e, lengthCy, lengthCx, 0, Cx_fx, Cx_e, lengthCx, mat_mult_buffer1_fx, &mat_mult_buffer1_e );

    guard_bits = find_guarded_bits_fx( lengthCx + 1 );
    Word16 guard_bits = find_guarded_bits_fx( lengthCx + 1 );

    FOR( i = 0; i < lengthCy * lengthCx; ++i )
    {