Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- #include <string.h>
- #include <math.h>
- #define PI 3.1415926535897932384626433832795
- int32_t doubleToSigma(int16_t family, double value)
- {
- switch (family)
- {
- case 100:
- return ((round( value * 0x800000) / 0x800000 ) * 0x800000);
- case 300:
- return ((round( value * 0x1000000) / 0x1000000 ) * 0x1000000);
- default:
- return 0;
- }
- }
- int main(void)
- {
- float dBgain = 0.0;
- float dBoost = 1.0;
- float Q = 0.71;
- uint32_t frequency = 16;
- uint32_t sampleRate = 48000;
- double bandwidth = frequency / Q;
- double omega = (2 * PI * frequency) / sampleRate;
- double sn = sin(omega);
- double cs = cos(omega);
- double ax = pow(10, dBoost / 40);
- double alpha = sn / (2 * Q);
- double a0 = 1 + (alpha / ax);
- double gainlinear = pow(10, dBgain / 20) / a0;
- double b2 = (1 - (alpha * ax)) * gainlinear;
- double b1 = -( 2 * cs) * gainlinear;
- double b0 = (1 + (alpha * ax)) * gainlinear;
- double a2 = -(1 - (alpha / ax)) / a0;
- double a1 = (2 * cs) / a0;
- int32_t B0 = doubleToSigma(300, b0);
- int32_t B1 = doubleToSigma(300, b1);
- int32_t B2 = doubleToSigma(300, b2);
- int32_t A1 = doubleToSigma(300, a1);
- int32_t A2 = doubleToSigma(300, a2);
- printf("Gain=%.1f, Boost=%.1f, freq=%d\n", dBgain, dBoost, frequency);
- printf(" B2 = %08X \n B1 = %08X \n B0 = %08X \n A2 = %08X \n A1 = %08X \n", B2, B1, B0, A2, A1);
- printf(" B2 = %.14f\n B1 = %.14f\n B0 = %.14f\n A2 = %.14f\n A1 = %.14f\n", b2, b1, b0, a2, a1);
- printf(" BW=%0.14f\n", bandwidth);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement