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

📄 do_pfilt_dynamic.c

📁 手机加密通话软件
💻 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 + -