⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3gpp_mod.c

📁 关于AMR-WB+语音压缩编码的实现代码
💻 C
字号:
#include <math.h>
#include <memory.h>
#include "../lib_amr/typedef.h"
#include "../lib_amr/enc_util.h"
#include "../include/int3gpp.h"
#define L_FRAME16k   320        /* Frame size at 16kHz */
#define M16k         20         /* Order of LP filter */
#define L_WINDOW_PLUS 512       /* 448 low rate, 512 using EXTENSION_VA */
void E_LPC_isf_reorderPlus(float *isf, float min_dist, int n)
{
    int i;
    float isf_min;
    isf_min = min_dist;
    for (i = 0; i < n - 1; i++)
    {
        if (isf[i] < isf_min)
        {
            isf[i] = isf_min;
        }
        isf_min = isf[i] + min_dist;
    }
    return;
}
void E_UTIL_synthesisPlus(Float32 a[], Word32 m, Float32 x[], Float32 y[], Word32 l, Float32 mem[], Word32 update_m)
{
    Float32 buf[L_FRAME16k + M16k];     /* temporary synthesis buffer */
    Float32 s;
    Float32 *yy;
    Word32 i, j;
    /* copy initial filter states into synthesis buffer */
    memcpy(buf, mem, m * sizeof(Float32));
    yy = &buf[m];
    for (i = 0; i < l; i++)
    {
        s = x[i];
        for (j = 1; j <= m; j++)
        {
            s -= a[j] * yy[i - j];
        }
        yy[i] = s;
        y[i] = s;
    }
    /* Update memory if required */
    if (update_m)
    {
        memcpy(mem, &yy[l - m], m * sizeof(Float32));
    }
    return;
}
void E_UTIL_residuPlus(Float32 * a, Word32 m, Float32 * x, Float32 * y, Word32 l)
{
    Float32 s;
    Word32 i, j;
    for (i = 0; i < l; i++)
    {
        s = x[i];
        for (j = 1; j <= m; j++)
        {
            s += a[j] * x[i - j];
        }
        y[i] = s;
    }
    return;
}
void E_UTIL_autocorrPlus(float *x,      /* input : input signal */
                         float *r,      /* output: autocorrelations vector */
                         int m, /* input : order of LP filter */
                         int n, /* input : window size */
                         float *fh      /* input : analysis window */
    )
{
    float t[L_WINDOW_PLUS];
    float s;
    Word16 i, j;
    for (i = 0; i < n; i++)
    {
        t[i] = x[i] * fh[i];
    }
    for (i = 0; i <= m; i++)
    {
        s = 0.0;
        for (j = 0; j < n - i; j++)
        {
            s += t[j] * t[j + i];
        }
        r[i] = s;
    }
    if (r[0] < 1.0)
    {
        r[0] = 1.0;
    }
    return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -