Usando uma tabela, escreva a transformada de Fourier dos seguintes sinais. Faça um programa scilab para plotar tanto o sinal quanto a transformada.
Passo 1
O que o enunciado pede:
- Escrever a transformada de Fourier do sinal dado, usando uma tabela.
- Fazer um programa em Scilab para plotar tanto o sinal quanto a sua transformada (uma aproximação numérica via FFT).
Informações fornecidas:
- O sinal é
.
Observação: aqui apenas listei o que é pedido e os dados fornecidos; a resolução e os cálculos começam no próximo passo.
Passo 2
O que é a transformada de Fourier (no domínio angular
) — pequena aula:
- A transformada de Fourier de um sinal
(no sentido das distribuições, para sinais não absolutamente integráveis como senos) é definida por
- Uma propriedade essencial que vamos usar é a transformada da exponencial complexa: para qualquer constante real
,
onde
é a distribuição delta de Dirac.
- Outra propriedade que usaremos é linearidade: a transformada de uma soma é a soma das transformadas, e constantes saem multiplicando o resultado.
Vou explicar cada símbolo:
-
é a variável do tempo (real). -
é a frequência angular (rad/s). -
é a unidade imaginária ( ). -
representa um impulso localizado (distribuição).
Passo 3
Expressar
em termos de exponenciais complexas (fórmula de Euler) — outra mini-aula:
- A identidade é
- Aqui
no nosso caso vale (porque o argumento do seno é ).
Explicando a utilidade: escrever
como soma de exponenciais permite aplicar diretamente a transformada conhecida de
.
Passo 4
Aplicar linearidade e a transformada da exponencial para obter a transformada de
:
- Começamos com
. - Aplicando a transformada e usando linearidade:
- Usando
com e respectivamente:
- Substituindo:
Passo 5
Agora incluo a amplitude
. Como a transformada é linear, multiplicar o sinal por
multiplica a transformada por
:
Podemos também reescrever
, então uma forma alternativa é
Essas duas formas são equivalentes — escolha a que preferir para interpretar magnitude e fase.
Passo 6
Apresentando a transformada em forma de tabela (como você pediu). A tabela mostra o sinal no tempo e a respectiva transformada no domínio angular
.
| Sinal
|
Transformada
|
|---|---|
|
|
|
Explicação curta da tabela: as deltas estão localizadas em
porque o seno tem frequência angular
. A diferença de sinais nas deltas (subtração) vem da representação exponencial dupla do seno.
Passo 7
Como plotar isso numericamente em Scilab — desafio e estratégia:
- Atenção: a transformada teórica acima contém deltas (ímpulsos). Num cálculo numérico com FFT não veremos deltas perfeitos; veremos picos estreitos em frequências
(em rad/s), cuja amplitude cresce com aumento da resolução da FFT e duração do sinal. - Estratégia para o programa:
- Amostrar o sinal
com uma taxa de amostragem suficientemente grande (ex.: Hz) por um intervalo de tempo grande o suficiente para ter boa resolução espectral. - Fazer zero-padding e aplicar FFT de comprimento grande (ex.:
) para melhorar a resolução da FFT. - Construir o eixo de frequência em Hz e em
(rad/s) via . - Fazer fftshift para centrar componentes negativas e positivas e plotar magnitude versus
.
- Amostrar o sinal
Passo 8
Programa Scilab. Copie e cole este código no Scilab, execute e você verá o sinal no tempo e a sua transformada (aproximação pela FFT). Os comentários no código explicam cada passo.
// Scilab: plot do sinal 10*sin(t) e aproximacao da sua transformada via FFT
// 1) parametros de amostragem
fs = 200; // frequencia de amostragem em Hz
dt = 1/fs; // passo de tempo
T = 10; // duracao do sinal em segundos
t = 0:dt:(T-dt); // vetor tempo
// 2) sinal no tempo
x = 10 * sin(1 * t); // nota: argumento '1' esta em rad/s
// 3) parametros FFT
Nfft = 8192; // tamanho da FFT (escolha grande para boa resolucao)
xpad = [x, zeros(1, Nfft - length(x))]; // zero-padding
// 4) calcular FFT
X = fft(xpad); // FFT (complexa)
// 5) construir eixo de frequencias (Hz) e converter para rad/s
k = 0:(Nfft-1);
f = k * (fs / Nfft); // eixo em Hz, 0..fs-fs/Nfft
fshift = f - fs/2; // centrar em -fs/2..fs/2
wshift = 2 * %pi * fshift; // eixo em rad/s
// 6) fftshift manual (Scilab): mover segunda metade para a frente
half = Nfft/2;
Xshift = [X(half+1:$), X(1:half)];
// 7) normalizacao para amplitude (opcional: dividir por numero de amostras)
// Aqui usamos normalizacao por numero de amostras originais para ficar com amplitude aproximada
Xmag = abs(Xshift) / length(t);
// 8) plot do sinal no tempo
scf(0);
plot(t, x);
xlabel("t (s)");
ylabel("x(t)");
title("Sinal no tempo: 10*sin(t)");
// 9) plot da magnitude da FFT em funcao de omega (rad/s)
scf(1);
plot(wshift, Xmag);
xlabel("\omega (rad/s)");
ylabel("|X(\omega)| (aprox. via FFT)");
title("Aproximacao da Transformada de Fourier via FFT");
xgrid(1);
// 10) opcional: marcar as posicoes teoricas em omega=+-1
xpoly([1,1], [0, max(Xmag)], "r"); // linha vertical em omega = +1
xpoly([-1,-1], [0, max(Xmag)], "r"); // linha vertical em omega = -1
Passo 9
O que esperar ao rodar o código e como interpretar:
- No gráfico do tempo você verá uma senoide com amplitude
. - No gráfico da FFT (em
), você verá dois picos praticamente simétricos em torno de (rad/s). Esses picos são a representação numérica dos impulsos da transformada teórica. - A amplitude exata dos picos depende da normalização escolhida e do comprimento do sinal; aumentando
e os picos ficam mais estreitos e centrais, aproximando melhor os impulsos.
Resposta
// Scilab code (copiar e executar)
fs = 200; dt = 1/fs; T = 10; t = 0:dt:(T-dt);
x = 10 * sin(1 * t);
Nfft = 8192;
xpad = [x, zeros(1, Nfft - length(x))];
X = fft(xpad);
k = 0:(Nfft-1);
f = k * (fs / Nfft);
fshift = f - fs/2;
wshift = 2 * %pi * fshift;
half = Nfft/2;
Xshift = [X(half+1:$), X(1:half)];
Xmag = abs(Xshift) / length(t);
scf(0); plot(t, x); xlabel("t (s)"); ylabel("x(t)"); title("Sinal no tempo: 10*sin(t)");
scf(1); plot(wshift, Xmag); xlabel("\omega (rad/s)"); ylabel("|X(\omega)| (aprox. via FFT)");
title("Aproximacao da Transformada de Fourier via FFT"); xgrid(1);
xpoly([1,1], [0, max(Xmag)], "r"); xpoly([-1,-1], [0, max(Xmag)], "r");