фильтр на 50 Гц
- Войдите на сайт для отправки комментариев
Сб, 16/02/2019 - 19:10
Здравствуйте
Пытаюсь сделать режекторный фильтр на 50 Гц , но пока нет ничего на выходе, подскажите пожалста как исправить программу.
//https://gist.github.com/cilliand/2674c9bd55960179e14d#file-filters-cpp HardwareTimer pwmtimer1(1); #define NZEROSNOTCH 8 #define NPOLESNOTCH 8 #define GAINNOTCH 1.136930320e+00 int sampleRate = 256; int input = PA7; int out = PA8; //T1C1 void setup() { pinMode(PA8, PWM); } static float xvnotch[NZEROSNOTCH + 1], yvnotch[NPOLESNOTCH + 1]; static inline float filterNotch50Hz(float input); void loop() { pwmtimer1.pause(); pwmtimer1.setPrescaleFactor(1); pwmtimer1.setOverflow(100); //pwmtimer1.setCompare(TIMER_CH1, 50); pwmtimer1.setCompare(TIMER_CH1, output); // pwmtimer1.resume(); xvnotch[0] = xvnotch[1]; xvnotch[1] = xvnotch[2]; xvnotch[2] = xvnotch[3]; xvnotch[3] = xvnotch[4]; xvnotch[4] = xvnotch[5]; xvnotch[5] = xvnotch[6]; xvnotch[6] = xvnotch[7]; xvnotch[7] = xvnotch[8]; xvnotch[8] = input / GAINNOTCH; yvnotch[0] = yvnotch[1]; yvnotch[1] = yvnotch[2]; yvnotch[2] = yvnotch[3]; yvnotch[3] = yvnotch[4]; yvnotch[4] = yvnotch[5]; yvnotch[5] = yvnotch[6]; yvnotch[6] = yvnotch[7]; yvnotch[7] = yvnotch[8]; yvnotch[8] = (xvnotch[0] + xvnotch[8]) - 2.6983691309 * (xvnotch[1] + xvnotch[7]) + 6.7304484875 * (xvnotch[2] + xvnotch[6]) - 9.3230670449 * (xvnotch[3] + xvnotch[5]) + 11.6679900010 * xvnotch[4] + ( -0.7736282195 * yvnotch[0]) + ( 2.1544643168 * yvnotch[1]) + ( -5.5436864413 * yvnotch[2]) + ( 7.9278080943 * yvnotch[3]) + (-10.2416524940 * yvnotch[4]) + ( 8.4530545984 * yvnotch[5]) + ( -6.3025540854 * yvnotch[6]) + ( 2.6118549514 * yvnotch[7]); // return yvnotch[8]; output = int(yvnotch[8]); }
ошибка - пожалуйста
Аппаратно чего не устраивает? Уж от 50-60Гц давно все придумано.
Схемы видел, там нужны нетипичные номиналы но программы не встретил.