Loading lib_dec/ivas_dirac_output_synthesis_cov.c +16 −56 Original line number Diff line number Diff line Loading @@ -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++ ) Loading Loading @@ -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 */ Loading Loading @@ -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 ); Loading Loading @@ -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 ) { Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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++ ) { Loading @@ -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 ) { Loading Loading
lib_dec/ivas_dirac_output_synthesis_cov.c +16 −56 Original line number Diff line number Diff line Loading @@ -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++ ) Loading Loading @@ -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 */ Loading Loading @@ -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 ); Loading Loading @@ -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 ) { Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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++ ) { Loading @@ -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 ) { Loading