Você está na página 1de 9

TRANSFORMADA DE FOURIER UTILZANDO MATLAB

Neste laboratório faremos uma abordagem analítica para determinar a transformada de


Fourier de um sinal de tempo. Métodos numéricos são usados para encontrar a
transformada de Fourier de sinais de tempo contínuo utilizando o MATLAB serão
apresentados.

Usando MATLAB para traçar a transformada de Fourier de uma função de tempo

O pulso aperiódico mostrado abaixo:

tem a seguinte Transformada de Fourier:

X(f)=4sinc(4f)

Isso pode ser encontrado usando a Tabela de Transformadas de Fourier. Podemos usar o
MATLAB para traçar essa transformada. O MATLAB possui uma função sinc
integrada. No entanto, a definição do MATLAB sinc função é ligeiramente diferente
daquela usada em sala de aula e na tabela de transformação de Fourier. No MATLAB:

sin ⁡( πx )
sinc ( x )=
πx

Assim, no MATLAB escrevemos a transformada, usando sinc (4f), uma vez que o fator
π é embutido na função. Os seguintes comandos do MATLAB traçarão esta
Transformada de Fourier:

>> f=-5:.01:5;
>> X=4*sinc(4*f);
>> plot (f,X)
Nesse caso, a transformada de Fourier é uma função puramente real. Assim, podemos
representá-lo como mostrado acima.
Em geral, as transformadas de Fourier são funções complexas e precisamos representar
graficamente a amplitude e espectro de fase separadamente. Isso pode ser feito usando
os seguintes comandos:

>>plot( f, angle(X))

>>plot(f, angle(X))

Observe que o ângulo é zero ou π. Isso reflete os valores positivos e negativos do


função de transformação.

Executando a Integral de Fourier Numericamente

Para o pulso apresentado acima, a transformada de Fourier pode ser encontrada


facilmente usando a tabela.
No entanto, para algumas funções, uma integração precisará ser realizada para encontrar
a transformação usando:

X ( f )= ∫ x ( t ) e
− j ϖt
dt
−∞

ou, para o exemplo:


2

X ( f )=∫ 1 e
− jϖt
dt
−2
Esta integração pode ser realizada usando o comando trapz no MATLAB. Este
comando tem a forma: trapz (x, y) onde a integral da função y é encontrada em relação à
variável de integração, x. Ou, usando o MATLAB:

>> clear
>> f=0;
>> t=-2:.01:2;
>> trapz(t,exp(-j*2*pi*f*t))
ans =
4.0000

Isso é consistente com nossos resultados anteriores. O valor da transformação em f = 0


foi igual a 4 usando a transformação da tabela. A fim de encontrar a transformação
completa em uma gama de frequências podemos usar um loop conforme mostrado
abaixo.

>> clear
>> t=-2:.01:2;
>> k=0;
>> for f=-5:.01:5
k=k+1;
X(k)=trapz(t,exp(-j*2*pi*f*t));
end
>> f=-5:.01:5;
>> plot(f,X)

Isso deve corresponder à transformação na figura acima. Esta técnica também pode ser
usada para aproximar a transformada de Fourier de um sinal de duração infinita.
Digamos que queremos encontrar o espectro de amplitude do sinal de duas frequências:

x(t ) = cos(2π100t ) + cos(2π 500t )

O primeiro passo seria criar um vetor, x, com valores amostrados da função de tempo
contínuo. Amostrando o sinal a cada 0,0002 segundos e criando uma sequência de
comprimento 250, isso irá cobrir um intervalo de tempo de 250 * 0,0002 = 0,05
segundos. Um gráfico deste sinal é gerado usando o seguinte código MATLAB:

>> clear
>> N=250;
>> ts=.0002;
>> t=[0:N-1]*ts;
>> x=cos(2*pi*100*t)+cos(2*pi*500*t);
>> plot(t,x)

Aproximando a Transformada de Fourier para 0 ≤ f ≤ 800 Hz.

>> k=0;
>> for f=0:1:800
k=k+1;
X(k)=trapz(t,x.*exp(-j*2*pi*f*t));
end
>> f=0:800;
>> plot(f, abs(X))

Como esperado, os picos do espectro estão em 100 e 500 Hz, as duas frequências
contidas em o sinal. Teoricamente, esperamos ver funções de impulso nessas duas
frequências e zero em todas as outras frequências. Não é isso que observamos. Isso
ocorre porque o código MATLAB apenas aproxima a transformação. Existem três
elementos que tornam os resultados aproximados.
A sequência usada para calcular a transformação é uma versão de amostra de um sinal
contínuo. O valor que do intervalo de amostragem (Ts) e o número de amostras tomadas
(N) afetam a aproximação.
Além disso, o comando trapz está usando um somatório para aproximar a integral.
Podemos observar os efeitos do intervalo de amostragem e do número de amostras,
alterando seus valores.
Por exemplo, se aumentarmos o intervalo de amostragem por um fator de 10 (para .002)
e diminuir o número de amostras para 25 (de modo que ainda cobrimos o mesmo
intervalo de intervalo de tempo total), e repita o Código MATLAB acima, obtemos:

Nesse caso, a aproximação é menos precisa. Se retornarmos o intervalo de amostragem


ao valor original de 0,0002 e aumentar o número de amostras para 500, a aproximação
para a transformação é:

Observe que a transformação é mais precisa do que o original. Isso é esperado porque
somos incluiu mais ciclos da forma de onda na aproximação (aumentando os limites de
integração).

Transformada Discreta de Fourier

Uma alternativa ao uso da aproximação da transformada de Fourier é usar a


Transformada Discreta Fourier (TDF). O TDF pega um sinal discreto no domínio do
tempo e transforma esse sinal em sua representação de domínio de frequência discreta.
Essa transformação é geralmente a usada em sistemas DSP.

Transformada Rápida de Fourier (FFT)

Dependendo do comprimento da sequência sendo transformada com o TDF, o cálculo


da transformada pode demorar. A Transformada Rápida de Fourier (FFT) é um
algoritmo para calcular o TDF de uma sequência de uma maneira mais eficiente. O
MATLAB fornece um comando para calcular o FFT de uma sequência. Nesta seção,
discutiremos o uso do FFT para aproximar a transformada de Fourier de sinais. Lembre-
se de que a TDF e o FFT são discretos representações no domínio da frequência de uma
sequência de tempo discreta. Em nossos exemplos, essas sequências será obtido por
amostragem de sinais de tempo contínuo.

Em geral, se uma função de tempo contínuo, x (t), é amostrada a cada Ts segundos até
que N amostras sejamcoletados, o TDF/FFT desta sequência de comprimento N também
é de comprimento N. Os componentes da transformação resultante corresponde a
frequências espaçadas a cada 1 / (N * Ts) Hz.
Por exemplo, usando o mesmo sinal de duas frequências x (t) usado acima, podemos
produzir uma sequência de amostras de comprimento N =250 espaçados a cada Ts
=0,0002 segundos, conforme mostrado anteriormente.
No entanto, desta vez, encontraremos o espectro de amplitude desse sinal usando o
comando fft.

A transformação resultante conterá N = 250 valores. Uma vez que os componentes de


frequência são espaçados a cada 1 / (N * Ts) Hz, eles correspondem aos valores de
frequência de 0 a (N-1) / (N * Ts) Hz, conforme mostrado abaixo.

>> clear
>> N=250;
>> ts=.0002;
>> deltaf=1/(N*ts);
>> t=[0:N-1]*ts;
>> x=cos(2*pi*100*t)+cos(2*pi*500*t);
>> Xf=fft(x);
>> f=[0:N-1]*deltaf;
>> plot(f,abs(Xf))
Observe que o espectro mostra quatro componentes. Dois estão nas frequências
esperadas de 100 e 500 Hz. Os outros dois estão em 4500 e 4900 Hz, frequências que
não aparecem no sinal.
Isso se deve à natureza periódica do TDF. Apenas frequências de até 0,5 / Ts
correspondem ao frequências reais na transformada de Fourier. Podemos produzir o
gráfico de espectro que mostra apenas essas frequências e mostra os componentes de
frequência negativa aplicando a função fftshift como mostrado.

>> Xf_shift=fftshift(Xf);
>> plot([-N/2:N/2-1]*deltaf, abs(Xf_shift))

Os valores do comprimento da sequência, N, e o intervalo de amostragem de tempo, Ts,


terão um efeito sobre a precisão do espectro que é calculado. Primeiro, vamos aumentar
o espaçamento entre amostras por um fator de dois, ou Ts = 0,0004. A partir do teorema
de amostragem, sabemos que quanto mais lento amostrarmos, menor será a frequência
que podemos representar com precisão. Repetindo o FFT:

>> clear
>> N=250;
>> ts=.0004;
>> deltaf=1/(N*ts);
>> t=[0:N-1]*ts;
>> x=cos(2*pi*100*t)+cos(2*pi*500*t);
>> Xf=fft(x);
>> Xf_shift=fftshift(Xf);
>> plot([-N/2:N/2-1]*deltaf, abs(Xf_shift))

Observamos que a frequência máxima é agora 1250 Hz, em vez de 2500 Hz como no
original calculado e os componentes de frequência de 100 e 500 Hz ainda são
representados corretamente. No geral, a frequência máxima representada é dada por
0,5 / Ts. Digamos que aumentamos a amostragem intervalo para Ts = 0,00125 conforme
mostrado abaixo:
>> clear
>> N=250;
>> ts=.00125;
>> deltaf=1/(N*ts);
>> t=[0:N-1]*ts;
>> x=cos(2*pi*100*t)+cos(2*pi*500*t);
>> Xf=fft(x);
>> Xf_shift=fftshift(Xf);
>> plot([-N/2:N/2-1]*deltaf, abs(Xf_shift))

Parece que o sinal, x, tem conteúdo


de frequência em 100 Hz (correto) e
300 Hz (incorreto). Este componente
incorreto é devido ao efeito de aliasing e ao fato de que o sinal foi amostrado em uma
frequência muito baixa. A frequência de amostragem (1 / Ts) precisa ser de pelo
menos duas vezes a componente de frequência mais alta no sinal a ser transformado, ou
em nosso exemplo em pelo menos 2 * 500 Hz = 1000 Hz ou Ts <1/1000 = 0,001.
A seguir, observaremos o efeito de N, o número de amostras tomadas. Com Ts = 0,0004
segundos, repetimos o cálculo do FFT para N = 100, 200 e 400 amostras. Os resultados
são mostrados abaixo.
Observe que o efeito de um N maior aumenta a resolução do gráfico. Isso se deve ao
fato de que o espaçamento de frequência é dado por 1 / NTs, ou nestes três casos 25 Hz,
12,5 Hz e 6,25 Hz, respectivamente. Para um determinado intervalo de amostragem, Ts,
conforme N é aumentado, o período de tempo que o sinal de tempo contínuo amostrado
aumenta (NTs). Assim, esperaríamos que o resultado espectro tivesse uma maior
precisão, conforme mostrado aqui.

Tutorial para usar o comando fft


Em geral, quando o comando fft é usado para produzir o espectro de amplitude e / ou
fase de um sinal de tempo contínuo, N e Ts devem ser selecionados. As seguintes
diretrizes devem ser utilizadas neste processo:
1. Selecione Ts o maior possível, mas de modo que o componente de maior frequência
em seu sinal seja menor que 1 / 2Ts.
2. Depois de determinar o valor de Ts, selecione N para que 1 / NTs, a resolução de
frequência seja pequeno o suficiente para exibir com precisão seus componentes de
frequência.

Parte Pratica

1. Gere um sinal senoidal, com frequência de 5 Hz, amplitude de 2 V por 3 segundos.


Considere uma amostragem a uma taxa de 60 Hz. Calcule a transformada de Fourier
desse sinal e esboce o seu gráfico.

2. Crie um sinal senoidal de 20 Hz amostrado a uma frequência de 240 Hz. Contamine


esse sinal com um ruído de 60 Hz, também senoidal. Calcule a transformada de Fourier
do sinal contaminado (sinal ruidoso). Esboce os sinais gerados e a transformada de
Fourier.

Você também pode gostar