Faça no MATLAB criar código da convolução discreta para qualquer conjunto de vetores de opção ao usuário de entrar com os vetores para a convolução e não utilizar o comando CONV.
Passo 1
Então, o que a gente tem aqui é um exercício de programação no MATLAB. A tarefa é criar um código que faça a convolução discreta entre dois vetores que o usuário vai escolher. E o detalhe é que não podemos usar a função pronta
conv
do MATLAB. Vamos precisar entender o que é convolução discreta e como ela funciona para implementar isso manualmente.Passo 2
Primeiro, vamos entender o que é convolução discreta. Basicamente, a convolução é uma operação matemática que combina dois sinais para formar um terceiro. No contexto de vetores, estamos basicamente “misturando” dois vetores para ver como um se sobrepõe ao outro.
Passo 3
Para implementar a convolução sem usar a função
conv
, vamos precisar seguir alguns passos:- Pegar os dois vetores de entrada.
- Inverter um dos vetores.
- Deslocar esse vetor invertido ao longo do outro vetor.
- Em cada posição, multiplicar os elementos que se sobrepõem e somar os resultados.
- Repetir isso para todas as posições possíveis e coletar esses valores em um novo vetor.
Passo 4
Vamos agora pensar em como isso se traduz no MATLAB. Precisamos pedir para o usuário entrar com os dois vetores. Podemos usar a função
input
para isso. Depois, determinar o tamanho dos vetores para saber até onde vamos deslocar.Passo 5
Vamos inverter um dos vetores usando a função
fliplr
, que inverte a ordem dos elementos de um vetor. Isso é importante porque na convolução, um dos sinais é efetivamente espelhado.Passo 6
Agora, vamos determinar o tamanho do vetor resultante. Se os vetores têm tamanhos
N
e M
, o resultado da convolução terá tamanho N + M - 1
. Vamos criar um vetor de zeros com esse tamanho para armazenar os resultados.Passo 7
Em seguida, vamos usar dois loops
for
para percorrer cada elemento dos vetores e calcular os produtos e as somas conforme deslocamos um vetor sobre o outro. Em cada posição, multiplicamos os elementos correspondentes e somamos esses produtos para obter o valor da convolução nessa posição.Passo 8
Por fim, vamos exibir o resultado para o usuário. Assim, ele poderá ver o vetor resultante da convolução que implementamos manualmente.
Resposta
% Passo 1: Receber os vetores do usuário
x = input('Digite o primeiro vetor (por exemplo, [1 2 3]): ');
h = input('Digite o segundo vetor (por exemplo, [4 5 6]): ');
% Passo 2: Inverter o segundo vetor
h_invertido = fliplr(h);
% Passo 3: Determinar o tamanho do vetor resultado
N = length(x);
M = length(h);
T = N + M - 1;
y = zeros(1, T);
% Passo 4: Realizar a convolução manualmente
for n = 1:T
for k = 1:M
if (n - k + 1 > 0) && (n - k + 1 <= N)
y(n) = y(n) + x(n - k + 1) * h_invertido(k);
end
end
end
% Passo 5: Exibir o resultado
disp('O resultado da convolução é:');
disp(y);