mirror of
https://github.com/drowe67/codec2
synced 2026-08-14 19:31:34 -04:00
290 lines
8.5 KiB
C
290 lines
8.5 KiB
C
|
|
// phi0.c
|
|
//
|
|
// An approximation of the function
|
|
//
|
|
// This file is generated by the gen_phi0 scripts
|
|
// Any changes should be made to that file, not this one
|
|
|
|
#include <stdint.h>
|
|
|
|
#define SI16(f) ((int32_t)(f * (1 << 16)))
|
|
|
|
float phi0(float xf) {
|
|
int32_t x = SI16(xf);
|
|
|
|
if (x >= SI16(10.0f))
|
|
return (0.0f);
|
|
else {
|
|
if (x >= SI16(5.0f)) {
|
|
int i = 19 - (x >> 15);
|
|
switch (i) {
|
|
case 0:
|
|
return (0.000116589f); // (9.5)
|
|
case 1:
|
|
return (0.000192223f); // (9.0)
|
|
case 2:
|
|
return (0.000316923f); // (8.5)
|
|
case 3:
|
|
return (0.000522517f); // (8.0)
|
|
case 4:
|
|
return (0.000861485f); // (7.5)
|
|
case 5:
|
|
return (0.001420349f); // (7.0)
|
|
case 6:
|
|
return (0.002341760f); // (6.5)
|
|
case 7:
|
|
return (0.003860913f); // (6.0)
|
|
case 8:
|
|
return (0.006365583f); // (5.5)
|
|
case 9:
|
|
return (0.010495133f); // (5.0)
|
|
}
|
|
} else {
|
|
if (x >= SI16(1.0f)) {
|
|
int i = 79 - (x >> 12);
|
|
switch (i) {
|
|
case 0:
|
|
return (0.013903889f); // (4.9375)
|
|
case 1:
|
|
return (0.014800644f); // (4.8750)
|
|
case 2:
|
|
return (0.015755242f); // (4.8125)
|
|
case 3:
|
|
return (0.016771414f); // (4.7500)
|
|
case 4:
|
|
return (0.017853133f); // (4.6875)
|
|
case 5:
|
|
return (0.019004629f); // (4.6250)
|
|
case 6:
|
|
return (0.020230403f); // (4.5625)
|
|
case 7:
|
|
return (0.021535250f); // (4.5000)
|
|
case 8:
|
|
return (0.022924272f); // (4.4375)
|
|
case 9:
|
|
return (0.024402903f); // (4.3750)
|
|
case 10:
|
|
return (0.025976926f); // (4.3125)
|
|
case 11:
|
|
return (0.027652501f); // (4.2500)
|
|
case 12:
|
|
return (0.029436184f); // (4.1875)
|
|
case 13:
|
|
return (0.031334956f); // (4.1250)
|
|
case 14:
|
|
return (0.033356250f); // (4.0625)
|
|
case 15:
|
|
return (0.035507982f); // (4.0000)
|
|
case 16:
|
|
return (0.037798579f); // (3.9375)
|
|
case 17:
|
|
return (0.040237016f); // (3.8750)
|
|
case 18:
|
|
return (0.042832850f); // (3.8125)
|
|
case 19:
|
|
return (0.045596260f); // (3.7500)
|
|
case 20:
|
|
return (0.048538086f); // (3.6875)
|
|
case 21:
|
|
return (0.051669874f); // (3.6250)
|
|
case 22:
|
|
return (0.055003924f); // (3.5625)
|
|
case 23:
|
|
return (0.058553339f); // (3.5000)
|
|
case 24:
|
|
return (0.062332076f); // (3.4375)
|
|
case 25:
|
|
return (0.066355011f); // (3.3750)
|
|
case 26:
|
|
return (0.070637993f); // (3.3125)
|
|
case 27:
|
|
return (0.075197917f); // (3.2500)
|
|
case 28:
|
|
return (0.080052790f); // (3.1875)
|
|
case 29:
|
|
return (0.085221814f); // (3.1250)
|
|
case 30:
|
|
return (0.090725463f); // (3.0625)
|
|
case 31:
|
|
return (0.096585578f); // (3.0000)
|
|
case 32:
|
|
return (0.102825462f); // (2.9375)
|
|
case 33:
|
|
return (0.109469985f); // (2.8750)
|
|
case 34:
|
|
return (0.116545700f); // (2.8125)
|
|
case 35:
|
|
return (0.124080967f); // (2.7500)
|
|
case 36:
|
|
return (0.132106091f); // (2.6875)
|
|
case 37:
|
|
return (0.140653466f); // (2.6250)
|
|
case 38:
|
|
return (0.149757747f); // (2.5625)
|
|
case 39:
|
|
return (0.159456024f); // (2.5000)
|
|
case 40:
|
|
return (0.169788027f); // (2.4375)
|
|
case 41:
|
|
return (0.180796343f); // (2.3750)
|
|
case 42:
|
|
return (0.192526667f); // (2.3125)
|
|
case 43:
|
|
return (0.205028078f); // (2.2500)
|
|
case 44:
|
|
return (0.218353351f); // (2.1875)
|
|
case 45:
|
|
return (0.232559308f); // (2.1250)
|
|
case 46:
|
|
return (0.247707218f); // (2.0625)
|
|
case 47:
|
|
return (0.263863255f); // (2.0000)
|
|
case 48:
|
|
return (0.281099022f); // (1.9375)
|
|
case 49:
|
|
return (0.299492155f); // (1.8750)
|
|
case 50:
|
|
return (0.319127030f); // (1.8125)
|
|
case 51:
|
|
return (0.340095582f); // (1.7500)
|
|
case 52:
|
|
return (0.362498271f); // (1.6875)
|
|
case 53:
|
|
return (0.386445235f); // (1.6250)
|
|
case 54:
|
|
return (0.412057648f); // (1.5625)
|
|
case 55:
|
|
return (0.439469363f); // (1.5000)
|
|
case 56:
|
|
return (0.468828902f); // (1.4375)
|
|
case 57:
|
|
return (0.500301872f); // (1.3750)
|
|
case 58:
|
|
return (0.534073947f); // (1.3125)
|
|
case 59:
|
|
return (0.570354566f); // (1.2500)
|
|
case 60:
|
|
return (0.609381573f); // (1.1875)
|
|
case 61:
|
|
return (0.651427083f); // (1.1250)
|
|
case 62:
|
|
return (0.696805010f); // (1.0625)
|
|
case 63:
|
|
return (0.745880827f); // (1.0000)
|
|
}
|
|
} else {
|
|
if (x > SI16(0.007812f)) {
|
|
if (x > SI16(0.088388f)) {
|
|
if (x > SI16(0.250000f)) {
|
|
if (x > SI16(0.500000f)) {
|
|
if (x > SI16(0.707107f)) {
|
|
return (0.922449644f);
|
|
} else {
|
|
return (1.241248638f);
|
|
}
|
|
} else {
|
|
if (x > SI16(0.353553f)) {
|
|
return (1.573515241f);
|
|
} else {
|
|
return (1.912825912f);
|
|
}
|
|
}
|
|
} else {
|
|
if (x > SI16(0.125000f)) {
|
|
if (x > SI16(0.176777f)) {
|
|
return (2.255740095f);
|
|
} else {
|
|
return (2.600476919f);
|
|
}
|
|
} else {
|
|
return (2.946130351f);
|
|
}
|
|
}
|
|
} else {
|
|
if (x > SI16(0.022097f)) {
|
|
if (x > SI16(0.044194f)) {
|
|
if (x > SI16(0.062500f)) {
|
|
return (3.292243417f);
|
|
} else {
|
|
return (3.638586634f);
|
|
}
|
|
} else {
|
|
if (x > SI16(0.031250f)) {
|
|
return (3.985045009f);
|
|
} else {
|
|
return (4.331560985f);
|
|
}
|
|
}
|
|
} else {
|
|
if (x > SI16(0.011049f)) {
|
|
if (x > SI16(0.015625f)) {
|
|
return (4.678105767f);
|
|
} else {
|
|
return (5.024664952f);
|
|
}
|
|
} else {
|
|
return (5.371231340f);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (x > SI16(0.000691f)) {
|
|
if (x > SI16(0.001953f)) {
|
|
if (x > SI16(0.003906f)) {
|
|
if (x > SI16(0.005524f)) {
|
|
return (5.717801329f);
|
|
} else {
|
|
return (6.064373119f);
|
|
}
|
|
} else {
|
|
if (x > SI16(0.002762f)) {
|
|
return (6.410945809f);
|
|
} else {
|
|
return (6.757518949f);
|
|
}
|
|
}
|
|
} else {
|
|
if (x > SI16(0.000977f)) {
|
|
if (x > SI16(0.001381f)) {
|
|
return (7.104092314f);
|
|
} else {
|
|
return (7.450665792f);
|
|
}
|
|
} else {
|
|
return (7.797239326f);
|
|
}
|
|
}
|
|
} else {
|
|
if (x > SI16(0.000173f)) {
|
|
if (x > SI16(0.000345f)) {
|
|
if (x > SI16(0.000488f)) {
|
|
return (8.143812888f);
|
|
} else {
|
|
return (8.490386464f);
|
|
}
|
|
} else {
|
|
if (x > SI16(0.000244f)) {
|
|
return (8.836960047f);
|
|
} else {
|
|
return (9.183533634f);
|
|
}
|
|
}
|
|
} else {
|
|
if (x > SI16(0.000086f)) {
|
|
if (x > SI16(0.000122f)) {
|
|
return (9.530107222f);
|
|
} else {
|
|
return (9.876680812f);
|
|
}
|
|
} else {
|
|
return (10.000000000f);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return (10.0f);
|
|
}
|