Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. #define SAMPLE_RATE 44100
  2. #define PI 3.14159
  3.  
  4. double* low_pass_filter(double* data_ptr, uint32_t data_length, double cutoff_frequency, double resonance) {
  5. assert(data_ptr != NULL);
  6. assert(cutoff_frequency > 0 && cutoff_frequency < sample_rate / 2)
  7. assert(resonance < sqrt(2) && resonance > 0.1);
  8.  
  9. double c = 1 / tan(PI * cutoff_frequency / SAMPLE_RATE);
  10. double a1 = 1 / (1 + resonance * c + c * c);
  11. double a2 = 2 * a1;
  12. double b1 = 2 * (1 - c * c) * a1;
  13. double b2 = (1 - resonance * c + c * c) * a1;
  14.  
  15. double output[data_length];
  16.  
  17. for(uint32_t i = 0; i < (data_length - 2); i++) {
  18. double in = *data_ptr;
  19. double in1 = 0.0;
  20. double in2 = 0.0;
  21. double out1 = 0.0;
  22. double out2 = 0.0;
  23.  
  24. if(i > 0) {
  25. in1 = *(data_ptr - 1);
  26. out1 = output[i - 1];
  27.  
  28. if(i > 1) {
  29. in2 = (data_ptr - 2);
  30. out2 = output[i - 2];
  31. }
  32. }
  33.  
  34. output[i] = a1 * in + a2 * in1 + a3 * in2 - b1 * out1 - b2 * out2;
  35. }
  36.  
  37. return output;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement