• G729 之 基音


    1. 开环基音  : 使用信号为感觉加权之后的语音信号!

    // 开环基搜索
    short Pitch_ol(short signal[], int pit_min, int pit_max, int L_frame )
    {
    int i=0;
    int scaled_signal[L_FRAME+PIT_MAX] = {0};
    int *scal_sig = &scaled_signal[pit_max];

    for(i=-pit_max; i<L_frame; i++)
    {
    scal_sig[i] = signal[i];
    }

    double max1,max2,max3;
    int p_max1,p_max2,p_max3;

    p_max1 = Lag_max(scal_sig, L_FRAME, 80,143, &max1);
    p_max2 = Lag_max(scal_sig, L_FRAME, 40,79, &max2);
    p_max3 = Lag_max(scal_sig, L_FRAME, 20,39, &max3);

    // 取能量最大值分段的位置为基音
    if(max1*0.85 < max2)
    {
    max1 = max2;
    p_max1 = p_max2;
    }
    if(max1*0.85 < max3)
    {
    max1 = max3;
    p_max1 = p_max3;
    }

    return p_max1;
    }

     // 取分段中能量最大的位置...并给出归一化的能量比..

    int Lag_max( int signal[], int L_frame,int lag_max,int lag_min, double *cor_max)
    {
    int pmax = lag_max;
    int max = MIN_32;
    int i = 0;
    int j = 0;
    int p_max = lag_max;

    int *pTmp1,*pTmp2;
    int t0;

    for (i = lag_max; i >= lag_min; i--)
    {
    pTmp1 = signal;
    pTmp2 = &signal[-i];
    t0 = 0;

    for (j=0; j<L_frame; j++,pTmp1++,pTmp2++)
    {
    t0 = t0 + (*pTmp1)*(*pTmp2);
    }
    if(t0 >= max)
    {
    max = t0;
    p_max = i;
    }

    }

    //计算能量
    t0 = 0;
    pTmp1 = &signal[-p_max];
    for(i=0; i<L_frame; i++, pTmp1++)
    {
    t0 += (*pTmp1) * (*pTmp1);
    }

    double tmp = Inv_sqrt(t0);
    *cor_max = tmp * max;

    return p_max;
    }

    2. 闭环基音 : 

    闭环基音,是在开环基音基础之上,再进行搜索,  同时对小孩与女人的声音基音带进行了,sinc 插值处理..! 

     另外说一下,所谓的自适应编译,其实就是,第一子帧是固定,第二子帧,相对于第一子帧的位置偏量!  汗一下...差点被名词弄晕了!

    作者微信号: xh66i88
  • 相关阅读:
    后台写js 并跳转
    visual studio 2010 js 调试
    网页搜索功能 多表搜索sql
    c# 取得扩展名
    ajaxFileUpload 注意!
    ajaxFileUpload js判断类型
    sortable items不让他拖,也不让他放。cancel不然他拖动
    json 多重嵌套反序列化和序列化
    C#串口操作类,包括串口读写操作
    C#操作Word的超详细总结
  • 原文地址:https://www.cnblogs.com/signal/p/2668978.html
Copyright © 2020-2023  润新知