пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 11 година
пре 10 година
пре 11 година
пре 10 година
пре 10 година
пре 11 година
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* Audio Library for Teensy 3.X
  2. * Copyright (c) 2014, Pete (El Supremo)
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy
  5. * of this software and associated documentation files (the "Software"), to deal
  6. * in the Software without restriction, including without limitation the rights
  7. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. * copies of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  20. * THE SOFTWARE.
  21. */
  22. #ifndef filter_fir_h_
  23. #define filter_fir_h_
  24. #include "AudioStream.h"
  25. #include "arm_math.h"
  26. #define USE_FAST_FIR true
  27. #define USE_SLOW_FIR false
  28. // Maximum number of coefficients in a FIR filter
  29. // The audio breaks up with 128 coefficients so a
  30. // maximum of 150 is more than sufficient
  31. #define MAX_COEFFS 150
  32. // Indicates that the code should just pass through the audio
  33. // without any filtering (as opposed to doing nothing at all)
  34. #define FIR_PASSTHRU ((short *) 1)
  35. class AudioFilterFIR :
  36. public AudioStream
  37. {
  38. public:
  39. AudioFilterFIR(const boolean a_f):
  40. AudioStream(1,inputQueueArray), arm_fast(a_f), coeff_p(NULL)
  41. {
  42. }
  43. void begin(short *coeff_p,int n_coeffs);
  44. virtual void update(void);
  45. void stop(void);
  46. private:
  47. audio_block_t *inputQueueArray[1];
  48. // arm state arrays and FIR instances for left and right channels
  49. // the state arrays are defined to handle a maximum of MAX_COEFFS
  50. // coefficients in a filter
  51. q15_t l_StateQ15[AUDIO_BLOCK_SAMPLES + MAX_COEFFS];
  52. // Whether to use the fast arm FIR code
  53. const boolean arm_fast;
  54. // pointer to current coefficients or NULL or FIR_PASSTHRU
  55. short *coeff_p;
  56. arm_fir_instance_q15 l_fir_inst;
  57. };
  58. #endif