#define Shift 11
const unsigned int signal_table[] = {
509, // 512
615, // 523
469, // 533
655, // 544
508, // 555
622, // 566
615, // 576
552, // 587
675, // 597
606, // 608
588, // 618
660, // 629
625, // 639
741, // 650
754, // 660
723, // 670
697, // 680
700, // 690
803, // 700
763, // 710
634, // 720
813, // 730
705, // 740
736, // 749
748, // 759
858, // 768
849, // 777
857, // 786
737, // 795
727, // 804
770, // 813
914, // 822
884, // 830
803, // 838
888, // 847
890, // 855
970, // 862
873, // 870
889, // 878
846, // 885
936, // 892
814, // 900
962, // 907
880, // 913
1002, // 920
937, // 926
1023, // 932
856, // 938
925, // 944
1019, // 950
940, // 955
1010, // 961
1023, // 966
1023, // 971
884, // 975
927, // 980
941, // 984
1021, // 988
1019, // 992
946, // 996
960, // 999
959, // 1002
956, // 1005
1023, // 1008
978, // 1010
982, // 1013
1023, // 1015
1023, // 1017
991, // 1019
1023, // 1020
1023, // 1021
1023, // 1022
995, // 1023
1011, // 1024
1022, // 1024
1010, // 1024
1023, // 1024
1023, // 1024
954, // 1023
1023, // 1022
954, // 1021
946, // 1020
952, // 1019
969, // 1017
1023, // 1015
994, // 1013
1023, // 1010
972, // 1008
1023, // 1005
1023, // 1002
1023, // 999
974, // 996
1023, // 992
969, // 988
1023, // 984
999, // 980
962, // 975
1000, // 971
1023, // 966
1023, // 961
1023, // 955
1022, // 950
971, // 944
938, // 938
1023, // 932
853, // 926
857, // 920
1014, // 913
834, // 907
859, // 900
886, // 892
821, // 885
917, // 878
906, // 870
831, // 862
767, // 855
842, // 847
764, // 838
787, // 830
831, // 822
764, // 813
760, // 804
786, // 795
874, // 786
778, // 777
767, // 768
670, // 759
668, // 749
838, // 740
826, // 730
807, // 720
755, // 710
746, // 700
782, // 690
658, // 680
653, // 670
772, // 660
761, // 650
711, // 639
598, // 629
621, // 618
618, // 608
652, // 597
683, // 587
589, // 576
474, // 566
591, // 555
483, // 544
571, // 533
490, // 523
462, // 512
528, // 501
401, // 491
398, // 480
471, // 469
555, // 458
424, // 448
385, // 437
387, // 427
460, // 416
502, // 406
480, // 395
433, // 385
335, // 374
454, // 364
377, // 354
305, // 344
261, // 334
315, // 324
233, // 314
285, // 304
284, // 294
267, // 284
221, // 275
229, // 265
231, // 256
286, // 247
304, // 238
301, // 229
272, // 220
250, // 211
236, // 202
222, // 194
114, // 186
109, // 177
248, // 169
122, // 162
139, // 154
146, // 146
238, // 139
200, // 132
197, // 124
124, // 117
189, // 111
43, // 104
146, // 98
68, // 92
116, // 86
156, // 80
92, // 74
41, // 69
3, // 63
39, // 58
118, // 53
0, // 49
75, // 44
146, // 40
0, // 36
30, // 32
125, // 28
0, // 25
0, // 22
0, // 19
114, // 16
75, // 14
64, // 11
100, // 9
39, // 7
116, // 5
32, // 4
106, // 3
0, // 2
48, // 1
3, // 0
0, // 0
0, // 0
0, // 0
115, // 0
0, // 1
0, // 2
70, // 3
0, // 4
0, // 5
40, // 7
0, // 9
108, // 11
0, // 14
0, // 16
0, // 19
87, // 22
63, // 25
0, // 28
2, // 32
93, // 36
128, // 40
108, // 44
54, // 49
20, // 53
126, // 58
94, // 63
118, // 69
152, // 74
162, // 80
115, // 86
53, // 92
63, // 98
202, // 104
48, // 111
194, // 117
237, // 124
84, // 132
151, // 139
231, // 146
255, // 154
182, // 162
271, // 169
178, // 177
179, // 186
271, // 194
295, // 202
122, // 211
277, // 220
183, // 229
221, // 238
313, // 247
216, // 256
369, // 265
369, // 275
385, // 284
255, // 294
221, // 304
403, // 314
412, // 324
336, // 334
356, // 344
287, // 354
331, // 364
447, // 374
470, // 385
403, // 395
509, // 406
512, // 416
512, // 427
418, // 437
506, // 448
521, // 458
419, // 469
535, // 480
402, // 491
426, // 501
};
int table_index, table_size;
int y0 = 0;
int x0 = 0;
int x1 = 0;
int x2 = 0;
int y1 = 0;
int y2 = 0;
void setup() {
// Configurar interrupção baseada em tempo para chamar a função filter a cada período de amostragem para fs=30 em us=33333.333333333336(microsegundos).
cli(); // Desabilitar interrupções
// Configurar Timer1 para interrupção a cada SAMPLE_INTERVAL_US microssegundos
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 3333;
TCCR1B |= (1 << WGM12); // Modo CTC (Clear Timer on Compare)
TCCR1B |= (1 << CS11); // Prescaler 8: Timer1 conta a cada 8 ciclos de clock
TIMSK1 |= (1 << OCIE1A); // Habilitar interrupção por comparação com OCR1A
Serial.begin(9600);
sei(); // Habilitar interrupções
}
void loop() {
// Outras tarefas do loop principal, se necessário
}
ISR(TIMER1_COMPA_vect) {
// Função de interrupção chamada a cada período de amostragem fs
// Ler o valor de entrada (exeISR(TIMER1_COMPA_vect) {
// Função de interrupção chamada a cada período de amostragem fs
// Ler o valor de entrada da tabela
int inputValue = signal_table[table_index];
// Incrementar o índice da tabela
table_index++;
if (table_index >= 299) {
table_index = 0;
}
// Chamar a função filter para processar a amostra
int filteredValue = filter(inputValue);
// Imprimir os valores brutos e filtrados
Serial.print(inputValue);
Serial.print(" ");
Serial.print( table_index);
Serial.print(" ");
Serial.println(filteredValue);
}
int filter(int x0) {
y0 = ((138.0 * x0) + (276.0 * x1) + (138.0 * x2) - (845.0 * y2) + (2341.0 * y1))/2048;
// Atualizar as variáveis de entrada e saída para a próxima chamada da função filter
x2 = x1;
x1 = x0;
y2 = y1;
y1 = y0;
return y0;
}