19.18 Use o MATLAB para gerar 64 pontos para a função
de
a
. Some uma componente aleatória ao sinal com a função randn. Tome a FFT desses valores e trace os resultados.
Passo 1
O enunciado pede para, usando MATLAB, gerar
pontos da função
no intervalo de
a
, adicionar um ruído gaussiano via
randn
, calcular a transformada rápida de Fourier (FFT) desses valores e traçar tanto o sinal ruidoso no domínio do tempo quanto a magnitude da FFT no domínio da frequência. O conteúdo principal envolve discretização de sinais, ruído aleatório e uso da FFT para análise espectral.Passo 2
Definimos o número de amostras
; criamos um vetor de tempo
uniformemente espaçado em
e montamos o sinal limpo
. Em MATLAB:
N = 64;
t = linspace(0,2*\pi,N); % vetor de tempo de 64 pontos de 0 a 2\pi
f = cos(10*t) + sin(3*t); % sinal limpo
Passo 3
Somamos ruído branco gaussiano usando :
randn
, obtendo o sinal ruidoso
x \(=\) f \(+\) randn(size(t)); % sinal com componente aleatória
Passo 4
Calculamos a FFT do vetor ruidoso. Em MATLAB chama-se diretamente
fft
:X \(=\) fft(x); % FFT de x
Passo 5
Construímos o eixo de frequências. Primeiro o período de amostragem
a frequência de amostragem
e então o vetor de frequências em hertz
Em MATLAB:
Ts \(=\) t(\(2\)) - t(\(1\)); % período de amostragem
Fs \(=1\)/Ts; % frequência de amostragem
fvec \(=\) (\(0\):N-\(1\))*(Fs/N); % eixo de frequências
Passo 6
Traçamos o sinal no tempo e a magnitude da FFT no domínio da frequência:
figure;
subplot(\(2,1\),\(1\));
plot(t,x);
xlabel('t (s)'); ylabel('x(t)');
title('Sinal ruidoso no domínio do tempo');
subplot(\(2,1\),\(2\));
stem(fvec, abs(X));
xlabel('f (Hz)'); ylabel('|X(f)|');
title('Magnitude da FFT');
Resposta
Segue o código MATLAB completo que executa todos os passos acima:
% Passo \(1\): parâmetros
N \(=64\);
t \(=\) linspace(\(0,2\)*pi,N);
% Passo \(2\): sinal limpo
f \(=\) cos(\(10\)*t) \(+\) sin(\(3\)*t);
% Passo \(3\): adicionar ruído
x \(=\) f \(+\) randn(size(t));
% Passo \(4\): FFT
X \(=\) fft(x);
% Passo \(5\): eixo de frequências
Ts \(=\) t(\(2\))-t(\(1\));
Fs \(=1\)/Ts;
fvec \(=\) (\(0\):N-\(1\))*(Fs/N);
% Passo \(6\): plotagem
figure;
subplot(\(2,1\),\(1\));
plot(t,x);
xlabel('t (s)'); ylabel('x(t)');
title('Sinal ruidoso no domínio do tempo');
subplot(\(2,1\),\(2\));
stem(fvec, abs(X));
xlabel('f (Hz)'); ylabel('|X(f)|');
title('Magnitude da FFT');
Ao rodar este script, você verá no primeiro gráfico o sinal ruidoso no tempo e, no segundo, picos na magnitude da FFT correspondentes às componentes em
Hz e
Hz (além do efeito do ruído).