|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef __FSCVRT_ST_H__
|
|
|
#define __FSCVRT_ST_H__
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
#include "fscvrt.h"
|
|
|
|
|
|
#define _FSCVRT_MAXNSEC (40)
|
|
|
#define _FSCVRT_COMMON_FS (96000)
|
|
|
#define _FSCVRT_ALIGN8(o) (((o) + 7) & (~7))
|
|
|
#define _FSCVRT_FLOAT2SHORT(x) \
|
|
|
((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : (short)floor(.5 + (x))))
|
|
|
#define _FSCVRT_MIN(x, y) ((x > y) ? (y) : (x))
|
|
|
#define _FSCVRT_MAX(x, y) ((x > y) ? (x) : (y))
|
|
|
|
|
|
#define _FSCVRT_1over2_LOWPASS_NSEC (5)
|
|
|
static const float _FSCVRT_1over2_LOWPASS_B[_FSCVRT_1over2_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, 1.830863e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, 1.039654e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, 4.900788e-01f, 1.000000e+00f},
|
|
|
{1.000000e+00f, 2.419292e-01f, 1.000000e+00f},
|
|
|
{1.000000e+00f, 1.517919e-01f, 1.000000e+00f}};
|
|
|
static const float _FSCVRT_1over2_LOWPASS_A[_FSCVRT_1over2_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, -8.445478e-01f, 2.453003e-01f},
|
|
|
{1.000000e+00f, -5.469711e-01f, 5.010509e-01f},
|
|
|
{1.000000e+00f, -2.646897e-01f, 7.464574e-01f},
|
|
|
{1.000000e+00f, -1.074159e-01f, 8.912371e-01f},
|
|
|
{1.000000e+00f, -4.448528e-02f, 9.702184e-01f}};
|
|
|
static const float _FSCVRT_1over2_LOWPASS_G[_FSCVRT_1over2_LOWPASS_NSEC] = {
|
|
|
|
|
|
4.233410e-01f, 4.233410e-01f, 4.233410e-01f, 4.233410e-01f, 4.233410e-01f};
|
|
|
|
|
|
#define _FSCVRT_1over3_LOWPASS_NSEC (5)
|
|
|
static const float _FSCVRT_1over3_LOWPASS_B[_FSCVRT_1over3_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, 1.535971e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, 6.284728e-02f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -5.726159e-01f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -7.990919e-01f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -8.741772e-01f, 1.000000e+00f}};
|
|
|
static const float _FSCVRT_1over3_LOWPASS_A[_FSCVRT_1over3_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, -1.261229e+00f, 4.351921e-01f},
|
|
|
{1.000000e+00f, -1.171732e+00f, 6.072938e-01f},
|
|
|
{1.000000e+00f, -1.078980e+00f, 7.901941e-01f},
|
|
|
{1.000000e+00f, -1.026436e+00f, 9.073955e-01f},
|
|
|
{1.000000e+00f, -1.013524e+00f, 9.743813e-01f}};
|
|
|
static const float _FSCVRT_1over3_LOWPASS_G[_FSCVRT_1over3_LOWPASS_NSEC] = {
|
|
|
|
|
|
3.1704682e-01f, 3.1704682e-01f, 3.1704682e-01f, 3.1704682e-01f,
|
|
|
3.1704682e-01f};
|
|
|
|
|
|
#define _FSCVRT_1over4_LOWPASS_NSEC (5)
|
|
|
static const float _FSCVRT_1over4_LOWPASS_B[_FSCVRT_1over4_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, 1.193034e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -5.757392e-01f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -1.105338e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -1.271233e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -1.323929e+00f, 1.000000e+00f}};
|
|
|
static const float _FSCVRT_1over4_LOWPASS_A[_FSCVRT_1over4_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, -1.447526e+00f, 5.478735e-01f},
|
|
|
{1.000000e+00f, -1.429707e+00f, 6.830356e-01f},
|
|
|
{1.000000e+00f, -1.412017e+00f, 8.292100e-01f},
|
|
|
{1.000000e+00f, -1.405145e+00f, 9.242718e-01f},
|
|
|
{1.000000e+00f, -1.412679e+00f, 9.790443e-01f}};
|
|
|
static const float _FSCVRT_1over4_LOWPASS_G[_FSCVRT_1over4_LOWPASS_NSEC] = {
|
|
|
|
|
|
2.7502688e-01f, 2.7502688e-01f, 2.7502688e-01f, 2.7502688e-01f,
|
|
|
2.7502688e-01f};
|
|
|
|
|
|
#define _FSCVRT_1over6_LOWPASS_NSEC (5)
|
|
|
static const float _FSCVRT_1over6_LOWPASS_B[_FSCVRT_1over6_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, 4.149228e-01f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -1.285358e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -1.583012e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -1.663823e+00f, 1.000000e+00f},
|
|
|
{1.000000e+00f, -1.688104e+00f, 1.000000e+00f}};
|
|
|
static const float _FSCVRT_1over6_LOWPASS_A[_FSCVRT_1over6_LOWPASS_NSEC][3] = {
|
|
|
{1.000000e+00f, -1.688731e+00f, 7.264798e-01f},
|
|
|
{1.000000e+00f, -1.696982e+00f, 8.146896e-01f},
|
|
|
{1.000000e+00f, -1.706117e+00f, 9.049889e-01f},
|
|
|
{1.000000e+00f, -1.713737e+00f, 9.598250e-01f},
|
|
|
{1.000000e+00f, -1.723161e+00f, 9.892408e-01f}};
|
|
|
static const float _FSCVRT_1over6_LOWPASS_G[_FSCVRT_1over6_LOWPASS_NSEC] = {
|
|
|
|
|
|
2.3765156e-01f, 2.3765156e-01f, 2.3765156e-01f, 2.3765156e-01f,
|
|
|
2.3765156e-01f};
|
|
|
|
|
|
typedef struct FscvrtSt_ {
|
|
|
void* dynamMemPtr;
|
|
|
size_t dynamMemSize;
|
|
|
|
|
|
|
|
|
FscvrtStaticCfg stCfg;
|
|
|
|
|
|
|
|
|
int mode;
|
|
|
|
|
|
|
|
|
int upSmplRate;
|
|
|
int downSmplRate;
|
|
|
int biquadInBufLen;
|
|
|
int biquadOutBufLen;
|
|
|
|
|
|
int nSec;
|
|
|
const float* biquadB[_FSCVRT_MAXNSEC];
|
|
|
const float* biquadA[_FSCVRT_MAXNSEC];
|
|
|
const float* biquadG;
|
|
|
|
|
|
|
|
|
|
|
|
void* biquadSt;
|
|
|
int biquadInBufCnt;
|
|
|
float* biquadInBuf;
|
|
|
int biquadOutBufCnt;
|
|
|
float* biquadOutBuf;
|
|
|
} FscvrtSt;
|
|
|
|
|
|
#endif
|
|
|
|