Convolução 1D
Publicado por Rodrigo Vasconcelos de Barros 30/05/2009
[ Hits: 13.950 ]
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!
#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);
}
Equações de primeiro e segundo grau
função de inserção em uma Arvore
Mini Analisador Léxico que conta palavras numa string
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Consertando o áudio com estalos e interrupções no Pipewire
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
REDE WI-FI NÃO APARECE NO LINUX MINT (0)
Como programar um sistema de controle para distribuições linux em c? (5)
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... (2)









