Pular para o conteúdo

Convolução 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!
Rodrigo Vasconcelos de Barros rodrigopk
Hits: 14.080 Categoria: C/C++ Subcategoria: Expressões Regulares
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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!
Download convolucao_1D Enviar nova versão

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);
}

Sequincia em Fibonacci no C++

Gauss Seidel

Interpolação linear

Equações de primeiro e segundo grau

Mini Analisador Léxico que conta palavras numa string

#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

Entre na sua conta para comentar.