2
0
Fork 0
OB-Xd/Source/Engine/Decimator.h

87 lines
1.7 KiB
C++
Executable File

#pragma once
//MusicDsp
// T.Rochebois
//still indev
class Decimator17
{
private:
const float h0,h1,h3,h5,h7,h9,h11,h13,h15,h17;
float R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17;
public:
Decimator17()
: h0(0.5)
, h1(0.314356238)
, h3(-0.0947515890)
, h5(0.0463142134)
, h7(-0.0240881704)
, h9(0.0120250406)
, h11(-0.00543170841)
, h13(0.00207426259)
, h15(-0.000572688237)
, h17(5.18944944e-005)
{
R1=R2=R3=R4=R5=R6=R7=R8=R9=R10=R11=R12=R13=R14=R15=R16=R17=0;
}
float Calc(const float x0,const float x1)
{
float h17x0 = h17 *x0;
float h15x0 = h15 *x0;
float h13x0 = h13 *x0;
float h11x0= h11 *x0;
float h9x0=h9*x0;
float h7x0=h7*x0;
float h5x0=h5*x0;
float h3x0=h3*x0;
float h1x0=h1*x0;
float R18=R17+h17x0;
R17 = R16 + h15x0;
R16 = R15 + h13x0;
R15 = R14 + h11x0;
R14 = R13 + h9x0;
R13 = R12 + h7x0;
R12 = R11 + h5x0;
R11 = R10 + h3x0;
R10 = R9 + h1x0;
R9 = R8 + h1x0 + h0*x1;
R8 = R7 + h3x0;
R7 = R6 + h5x0;
R6 = R5 + h7x0;
R5 = R4 + h9x0;
R4 = R3 + h11x0;
R3 = R2 + h13x0;
R2 = R1 + h15x0;
R1 = h17x0;
return R18;
}
};
class Decimator9
{
private:
const float h0,h1,h3,h5,h7,h9;
float R1,R2,R3,R4,R5,R6,R7,R8,R9;
public:
Decimator9() : h0(8192/16384.0f),h1(5042/16384.0f),h3(-1277/16384.0f),h5(429/16384.0f),h7(-116/16384.0f),h9(18/16384.0f)
{
R1=R2=R3=R4=R5=R6=R7=R8=R9=0.0f;
}
inline float Calc(const float x0,const float x1)
{
float h9x0=h9*x0;
float h7x0=h7*x0;
float h5x0=h5*x0;
float h3x0=h3*x0;
float h1x0=h1*x0;
float R10=R9+h9x0;
R9=R8+h7x0;
R8=R7+h5x0;
R7=R6+h3x0;
R6=R5+h1x0;
R5=R4+h1x0+h0*x1;
R4=R3+h3x0;
R3=R2+h5x0;
R2=R1+h7x0;
R1=h9x0;
return R10;
}
};