📄 filters.c
字号:
/*#include "main.h"*/#include "celpfilt.h"#include "movarray.h"#include "setarray.h"/* LP Analysis Filter Parameters */FILTER InputHPFZ, InputHPFP;float InputHPFCoefsZ[3] = {0.946, -1.892, 0.946};float InputHPFCoefsP[3] = {1.0, -1.889033, 0.8948743};int InputHPFOrder = 2;int InputHPFLength = F_LEN;/* LP residual calculation filter parameters */FILTER LP_ResZ, LP_ResP, LP_ResP2;/* Adaptive analysis residual calculation filter parameters */FILTER Adapt_ResZ, Adapt_ResP, Adapt_ResP2;/* Update filters for residual calculations */FILTER Update_ResZ, Update_ResP, Update_ResP2;/* HPF output filters for synthesis */FILTER OutputHPFZ, OutputHPFP;/* Filter coefficients for 2nd order Butterworth 275 Hz HPF: */float OutputHPFCoefsZ[3] = {0.946, -1.892, 0.946};float OutputHPFCoefsP[3] = {1.0, -1.889033, 0.8948743};/*************************************************************************** ** ROUTINE* HPF_Speech** FUNCTION* High pass filter input speech* SYNOPSIS* HPF_Speech(speech_in)** formal** data I/O* name type type function* -------------------------------------------------------------------* speech_in float i/o Frame of input speech***************************************************************************/void HPF_InSpeech(float speech[F_LEN]){ do_zfilt(&InputHPFZ, speech); do_pfilt(&InputHPFP, speech);}/*************************************************************************** ** ROUTINE* HPF_OutSpeech** FUNCTION* High pass filter output speech* SYNOPSIS* HPF_Outspeech(speech_in, speech_out)** formal** data I/O* name type type function* -------------------------------------------------------------------* speech_in float i Frame of input speech* speech_in float o Frame of output speech***************************************************************************/void HPF_OutSpeech(float speech_in[SF_LEN],float speech_out[SF_LEN]){/* Perform filtering on input speech to produce output speech */ MoveArray(SF_LEN, speech_in, speech_out); do_zfilt(&OutputHPFZ, speech_out); do_pfilt(&OutputHPFP, speech_out);}/*************************************************************************** ** ROUTINE* FilterImpulseResponse** FUNCTION* Filter Impulse Response with varying coefficients and no history from past frames* SYNOPSIS* FilterImpulseResponse(h, coef)** formal** data I/O* name type type function* -------------------------------------------------------------------* h float i/o Impulse response* coef float i Filter coefficients***************************************************************************/void FilterImpulseResponse(float h[SF_LEN],float coef[ORDER+1]){int t, j;float FiltMem[ORDER+1];/* Initialize memory */ SetArray(ORDER+1, 0.0, FiltMem); /* Filter impulse response */ for(t=0; t<SF_LEN; t++) { FiltMem[0] = h[t]; for(j=ORDER; j>0; j--) { FiltMem[0] -= coef[j] * FiltMem[j]; FiltMem[j] = FiltMem[j-1]; } h[t] = FiltMem[0]; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -