📄 do_pfilt_dynamic.c
字号:
/* Copyright 2001,2002,2003 NAH6
* All Rights Reserved
*
* Parts Copyright DoD, Parts Copyright Starium
*
*/
#include "celpfilt.h"
#include <stdio.h>
#include <assert.h>
void do_pfilt_dynamic(
FILTER *flt,
fxpt_16 coef[], /* 2.13 format */
fxpt_16 data[]) /* 15.0 format */
{
int i, j;
int64 acc; /* 15.28 */
fxpt_32 *memory;
fxpt_32 *pm;
fxpt_32 *pc;
fxpt_32 coef32[11];
ASSERT(flt->data_length == 60);
ASSERT(flt->order == 10);
for (i=0 ; i<11 ; i++)
coef32[i]= coef[i];
if (coef[0] != 8192) { /* 1.0 in 2.13 format */
CELP_PRINTF(("polefilt: bad coefficients\n"));
CELP_ABORT();
}
memory = flt->memory;
DUMPARR(flt->memory,15,flt->order)
DUMPARR0(data,flt->data_length)
for (i = 0; i < 60; i++) {
acc = data[i];
acc <<= 28;
for (j = 9, pm= memory+10, pc=coef32+10; j ; j--,pm--,pc--) {
acc -= (fxpt_64) *pm * *pc;
pm[0] = pm[-1];
}
acc -= (int64)memory[1]*coef32[1];
// acc >>= 13;
memory[1] = fxpt_saturate32_round(acc,13);
// DUMPARR(flt->memory,13,10)
data[i] = fxpt_saturate16(fxpt_saturate32_round(acc,28));
}
memory[0] = fxpt_saturate32_round(acc,13);
DUMPARR(flt->memory,15,flt->order)
DUMPARR0(data,flt->data_length)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -