Entrar    Registrar

Algoritimo de filtro

Software e Hardware para DSP

Moderadores: joao, guest2003, 51

  • Autor
    Mensagem

Algoritimo de filtro

Mensagempor vtrx » 18 Fev 2021 18:10

Comecei a me aventurar em efeitos de áudio,Eco,Chorus ,reverb,pitch etc.
Estou estudando usando o STM32F103,que é o que tenho e mãos,e me deparei com um filtro que funciona muito bem,mas não sei o funcionamento pois estou usando exemplos que encontro.
A rotina é a seguinte;
Código: Selecionar todos
#define FILTER_BUF         9
...
 const float filter_coeff[FILTER_BUF] =
{
   0.0200, 0.0647, 0.1664, 0.2489, 0.2489, 0.1664, 0.0647, 0.0200
};
...
u16 low_pass(u16 input)
{
   int i;
   static float buffer[FILTER_BUF];
   u16 result;
   
  for (i = (FILTER_BUF-1); i > 0; i--)
   {
      buffer[i] = buffer[i-1];
   }
   buffer[0] = input;
   
  for (i = 0; i < FILTER_BUF; i++)
  {
      result += buffer[i] * filter_coeff[i];
  }
   
   return result;
}

Alguém pode me explicar qual o algoritmo,quero alterar para outras frequências.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2051
Registrado em: 20 Abr 2008 21:01

Re: Algoritimo de filtro

Mensagempor eletroinf » 18 Fev 2021 18:39

É um filtro FIR.
Tem alguns programas grátis para calcular os coeficientes, como:

http://digitalfilter.com/enindex.html

e

http://iowahills.com/

Estes sites também têm a explicação básica de como os filtros funcionam.
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 858
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Algoritimo de filtro

Mensagempor vtrx » 18 Fev 2021 18:44

Uma rotina que me fez ficar pensando é essa;
Código: Selecionar todos
#define PITCH_BUF2        500

....
u16 pitch_down(u16 input)
{
   static int index_wr = 0;
   static int index_rd = 1;
   static u8 half = 0;
   static u16 buffer[PITCH_BUF2];
   
   buffer[index_wr] = input;
   
   half++;
   if (half == 2)
   {
      index_rd++;
      half = 0;
   }
   if (index_rd >= (PITCH_BUF2-1))
   {
      index_rd = 0;
   }
   index_wr++;
   if (index_wr >= (PITCH_BUF2-1))
   {
      index_wr = 0;
   }
   
   return buffer[index_rd];
}


O pitch fica extremamente baixo,em tempo real.
Não entendi como ela funciona.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2051
Registrado em: 20 Abr 2008 21:01

Re: Algoritimo de filtro

Mensagempor vtrx » 21 Fev 2021 09:55

Alguem sabe um esboço para simular aumentar e diminuir um audio?
Pensei que era só diminuir o valor de cada amostra.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2051
Registrado em: 20 Abr 2008 21:01

Re: Algoritimo de filtro

Mensagempor vtrx » 21 Fev 2021 20:51

Por enquanto consegui implementar Reverb,Eco uma repetição e inversão do áudio em tempo real,44.100khz/mono com 72MHz.
Ainda não estou usando memória externa.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2051
Registrado em: 20 Abr 2008 21:01

Voltar para DSP

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron