Advertisement
Guest User

Untitled

a guest
Dec 14th, 2022
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. #define PI 3.1415926535897932384626433832795
  7.  
  8. int32_t doubleToSigma(int16_t family, double value)
  9. {
  10.     switch (family)
  11.     {
  12.         case 100:
  13.             return ((round( value * 0x800000) / 0x800000 ) * 0x800000);
  14.  
  15.         case 300:
  16.             return ((round( value * 0x1000000) / 0x1000000 ) * 0x1000000);
  17.  
  18.         default:
  19.             return 0;
  20.     }
  21. }
  22.  
  23. int main(void)
  24. {
  25.     float dBgain = 0.0;
  26.     float dBoost = 1.0;
  27.     float Q = 0.71;
  28.     uint32_t frequency = 16;
  29.     uint32_t sampleRate = 48000;
  30.     double bandwidth = frequency / Q;
  31.  
  32.     double omega = (2 * PI * frequency) / sampleRate;
  33.     double sn = sin(omega);
  34.     double cs = cos(omega);
  35.  
  36.     double ax = pow(10, dBoost / 40);
  37.     double alpha = sn / (2 * Q);
  38.     double a0 = 1 + (alpha / ax);
  39.     double gainlinear = pow(10, dBgain / 20) / a0;
  40.  
  41.     double b2 = (1 - (alpha * ax)) * gainlinear;
  42.     double b1 = -( 2 * cs) * gainlinear;
  43.     double b0 = (1 + (alpha * ax)) * gainlinear;
  44.     double a2 = -(1 - (alpha / ax)) / a0;
  45.     double a1 = (2 * cs) / a0;
  46.  
  47.     int32_t B0 = doubleToSigma(300, b0);
  48.     int32_t B1 = doubleToSigma(300, b1);
  49.     int32_t B2 = doubleToSigma(300, b2);
  50.     int32_t A1 = doubleToSigma(300, a1);
  51.     int32_t A2 = doubleToSigma(300, a2);
  52.  
  53.     printf("Gain=%.1f, Boost=%.1f, freq=%d\n", dBgain, dBoost, frequency);
  54.     printf(" B2 = %08X \n B1 = %08X \n B0 = %08X \n A2 = %08X \n A1 = %08X \n", B2, B1, B0, A2, A1);
  55.     printf(" B2 = %.14f\n B1 = %.14f\n B0 = %.14f\n A2 = %.14f\n A1 = %.14f\n", b2, b1, b0, a2, a1);
  56.  
  57.     printf(" BW=%0.14f\n", bandwidth);
  58.  
  59.     return 0;
  60. }
  61.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement