Convolução 1D

Publicado por Rodrigo Vasconcelos de Barros 30/05/2009

[ Hits: 13.527 ]

Download convolucao_1D




Algorítimo para convolução de sinais 1D (vetores) em C++ (mas pode ser adaptado para C sem problemas).

Eu tentei deixá-lo bem genérico, por isso talvez algumas passagens não fiquem claras, mas se tiverem qualquer dúvida não deixem de perguntar.

Se encontrarem algum furo, por favor avisem!

  



Esconder código-fonte

#include <iostream>

int *conv(int n,int m,int vet_maior,int vet_menor) // vetor a,vetor b,num de elementos dos dois m>n
{
   int vet_a[n],vet_b[m],*vet_conv[n+m-1],aux[m+2*(n-1)];
   
   for (int i=0;i<n+m-1;i++)
   {
      if (i<n) vet_a[i]=vet_menor[i];
      if (i<m) vet_b[i]=vet_maior[i];
      vet_conv[i]=0;
   }
   unsigned int x=0; //aux contadora
   for (int i=0;i<m+2*(n-1);i++)
   {
      if (i<n-1) aux[i]=0; //parte nula
      else 
      {
         if (i<n+m-1) 
         {
            aux[i]=vet_b[x]; //parte = vet_maior
            x++;
         }
         else aux[i]=0; //parte nula
      }
   }
   
//   convolucao

   for (int j=0;j<n+m-1;j++)
   {
      for (int k=0;k<n;k++)
      {
         vet_conv[j]+=vet_a[n-1-k]*aux[j+k];         
      }
   }
   
// Imprime resultados (caso precise testar)
   std::cout << "Vetor A:" << std::endl;
   for (int i=0;i<n;i++){ std::cout << vet_a[i] << " "; }
   std::cout << std::endl;   
   std::cout << "Vetor B:" << std::endl;
   for (int i=0;i<m;i++){ std::cout << vet_b[i] << " "; }
   std::cout << std::endl;   
   std::cout << "Convolucao:" << std::endl;
   for (int i=0;i<n+m-1;i++){ std::cout << vet_conv[i] << " "; } 

   return (vet_conv);
}


Scripts recomendados

Sequincia em Fibonacci no C++

Usando regex com linguagem C

função de inserção em uma Arvore

Pegando entrada do teclado e guardando em uma string

Interpolação linear


  

Comentários
[1] Comentário enviado por albertguedes em 04/06/2009 - 04:05h

Programa legal, mas dou uma dica:

http://www.vivaolinux.com.br/artigo/Coloque-ordem-em-seus-programas/

[2] Comentário enviado por rodrigopk em 04/06/2009 - 13:05h

é,tem razao cara,ta meio confuso mesmo...
da próxima vez vou comentar mais e colocar o cabeçalho e tal.
valeu pela dica!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts