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:
  1. Pegar os dois vetores de entrada.
  2. Inverter um dos vetores.
  3. Deslocar esse vetor invertido ao longo do outro vetor.
  4. Em cada posição, multiplicar os elementos que se sobrepõem e somar os resultados.
  5. 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);

Exercícios relacionados