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

Pegando entrada do teclado e guardando em uma string

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

Lista Encadeada com Ordenação

Verificar se o e-mail é válido

Retirar caracteres de uma frase

#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.