Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <TimerOne.h>
- #define M 15
- //Coeficientes do filtro obtidos por MATLAB
- float coef[15] {0, 0.0053, -0.0000, -0.0000, -0.0000, -0.2584, 0.0000, 0.5000, 0.0000, -0.2584, -0.0000, -0.0000, -0.0000, 0.0053, 0};
- float y[M];
- float val = 0;//variáveis auxiliares da amostragem
- int count = 0;
- int mic = A1; //pino do microfone
- //Definindo o struct da fila:
- typedef struct fila{
- float sample[M];
- int fim;
- }fila;
- //Função que inicializa a fila:
- void fbegin(fila *f){
- for(int i = 0; i<M; i++){
- f->sample[i] = 0;
- }
- f->fim=0;
- }
- //Função que adiciona dados à fila:
- void fadd(float dado, fila *f){
- if(f->fim == M){
- Serial.println("FILA CHEIA\n");
- return;
- } else{
- f->sample[f->fim] = dado;
- f->fim++;
- }
- }
- //Função que limpa a fila:
- float fpurge(fila *f){
- float dado;
- int i;
- if(f->fim == 0){
- Serial.println("FILA VAZIA\n");
- return;
- } else{
- dado = f->sample[0];
- for(i = 0; i < f->fim; i++){
- f->sample[i] = f->sample[i+1];
- }
- f->fim--;
- return dado;
- }
- }
- //Função que realiza a convolução entre a amostra e o filtro
- void fdisp(fila *f){
- float filtrado = 0;
- for(int i = 0; i < f->fim; i++){
- y[i] = coef[i]*f->sample[i];
- filtrado += y[i];
- }
- Serial.println(filtrado);
- }
- fila FIR; // criando a fila FIR
- void amostragem(void){
- val = analogRead(mic);
- if(count >= M){
- fpurge(&FIR);
- fadd(val, &FIR);
- fdisp(&FIR);
- }else{
- fadd(val, &FIR);
- count++;
- }
- }
- void setup() {
- fbegin(&FIR);
- Timer1.initialize(167);
- Timer1.attachInterrupt(amostragem);
- Serial.begin(115200);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement