emg_util.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef EMG_UTIL_H
  2. #define EMG_UTIL_H
  3. // SOS 绯绘暟锛�20-450 Hz 甯﹂�氾紝fs=1000Hz锛�
  4. // const double sos[2][6] = {
  5. // {1.0000000000, -2.0000000000, 1.0000000000, 1.0, -1.8794729180, 0.8944729180},
  6. // {1.0000000000, -2.0000000000, 1.0000000000, 1.0, -1.9657267688, 0.9676167688}
  7. // };
  8. // 宸寸壒娌冩柉婊ゆ尝鍣ㄥ弬鏁癝OS 绯绘暟锛�20-450 Hz 甯﹂�氾紝fs=1000Hz锛�
  9. const double sos[2][6] = {
  10. {1.0000000000, 2.0000000000, 1.0000000000, 1.0, 1.5597000000, 0.6416000000},
  11. {1.0000000000, -2.0000000000, 1.0000000000, 1.0, -1.8225000000, 0.8373000000}
  12. };
  13. // 鐢� MATLAB 鐢熸垚骞跺浐鍖栧埌 C 鐨勭郴鏁帮紙50Hz 闄锋尝锛宖s=1000Hz锛夐櫡娉㈡护娉⒙峰弬鏁�
  14. // const double NOTCH_B[3] = { 0.961538461538462, -1.846153846153846, 0.961538461538462 };
  15. // const double NOTCH_A[3] = { 1.000000000000000, -1.846153846153846, 0.876923076923077 };
  16. const double NOTCH_B[3] = {0.9955, -1.8936, 0.9955};
  17. const double NOTCH_A[3] = {1.0000, -1.8936, 0.9911};
  18. typedef struct {
  19. double b[3]; // 鍒嗗瓙绯绘暟: b0, b1, b2
  20. double a[3]; // 鍒嗘瘝绯绘暟: a0, a1, a2 (a0 閫氬父褰掍竴鍖栦负 1)
  21. double x1, x2; // 杈撳叆寤惰繜鍗曞厓: x[n-1], x[n-2]
  22. double y1, y2; // 杈撳嚭寤惰繜鍗曞厓: y[n-1], y[n-2]
  23. } NotchFilter;
  24. float f0 = 50.0f;//宸ラ
  25. float q = 30.0f;//璐ㄩ噺绯绘暟
  26. float low_cut = 20.0f; // 浣庢埅姝㈤鐜�
  27. float high_cut = 450.0f; // 楂樻埅姝㈤鐜�
  28. int order = 4; // 婊ゆ尝鍣ㄩ樁鏁�
  29. // 宸寸壒娌冩柉婊ゆ尝鍣ㄧ粨鏋勪綋锛坉ouble绫诲瀷锛�
  30. typedef struct {
  31. double x1, x2;
  32. double y1, y2;
  33. } BiquadState;
  34. // Symlet 4 (sym4) 婊ゆ尝鍣ㄧ郴鏁帮紙鏍囧噯鍖栵級
  35. static double sym4_h[8] = {
  36. 0.0266700579010166,
  37. 0.0607514995432352,
  38. -0.0656160944756398,
  39. -0.1498879107562273,
  40. 0.4829629131445341,
  41. 0.8365163037378608,
  42. 0.2242848007341553,
  43. -0.1077300958383618
  44. };
  45. static double sym4_g[8] = {
  46. -0.1077300958383618,
  47. -0.2242848007341553,
  48. 0.8365163037378608,
  49. -0.4829629131445341,
  50. -0.1498879107562273,
  51. 0.0656160944756398,
  52. 0.0607514995432352,
  53. -0.0266700579010166
  54. };
  55. void emg_denoised(double *emg_raw, int length, int fs, double *emg_denoised);
  56. #endif // EMG_UTIL_H