Cálculo de series y transformadas de Fourier usando Mathematica

Anuncio
D
Cálculo de series y transformadas de
Fourier usando Mathematica
En este apéndice se presenta una forma sencilla de calcular los coeficientes de Fourier
y las transformadas usando Mathematica. No pretende ser una introducción a un programa tan sofisticado, sino proveer algunas herramientas para evitar laboriosos cálculos
manuales.
La principal función a utilizar es Integrate[]. El comando
Integrate[f, {x, xmin, xmax}]
devuelve la integral definida
siguiente ejemplo.
R xmáx
xmı́n
f ( x ) dx. El uso de otros comandos se ilustra en el
Fig. D.1. Señal periódica x̃ (t).
E JEMPLO D.1. Cálculo de la serie de Fourier de un tren de pulsos triangulares
Se desea calcular los coe…cientes de Fourier del tren de pulsos triangulares que se muestra en la
Fig. D.1. La expresión de los coe…cientes está dada por la ecuación (2.30), (página 85)
ck =
1
T0
Z
T0
x (t)e
j 2π
T kt
0
dt,
y en este caso es necesario separar la integral en seis partes, una para cada una de las rectas de
293
D. Cálculos con Mathematica
294
Fig. D.2. Detalle de un período del tren de pulsos triangular.
pendientes
ck
12A/T0 como se representa en la Fig. D.2. Entonces,
=
Z
T0 /6
1
T0
T0 /4
Z
1 0
T0
T0 /12
Z T0 /6
1
T0 T0 /12
Z
T0 /12
1
j 2π kt
12A
t A e T0 dt +
T
0
T0
T0 /6
Z T0 /12
2π
1
j T kt
j 2π kt
12A
12A
0 dt +
t + A e T0 dt +
T0 t + A e
T
0
T0 0
Z
2π
1 T0 /4
j T kt
j 2π kt
12A
12A
0 dt +
t
A
e
t + 3A e T0 dt.
T0
T
0
T0 T0 /6
12A
T0 t + 3A
j 2π
T kt
e
0
dt +
El código en Mathematica para calcular esta integral es casi una copia de la expresión anterior:
In[1]:=
ck = (Integrate[((12 A /T0)t + 3A)Exp[-(I 2 π k/T0)t], {t, -T0/4, -T0/6}] +
Integrate[(-(12 A/T0)t - A)Exp[-(I 2 π k/T0)t], {t, -T0/6, -T0/12}] +
Integrate[((12 A/T0)t + A)Exp[-(I 2 π k/T0)t], {t, -T0/12, 0}] +
Integrate[(-(12 A/T0)t + A)Exp[-(I 2 π k/T0)t], {t, 0, T0/12}] +
Integrate[((12 A/T0)t - A)Exp[-(I 2 π k/T0)t], {t, T0/12, T0/6}] +
Integrate[(-(12 A/T0)t + 3A)Exp[-(I 2 π k/T0)t], {t, T0/6, T0/4}])/T0
Las letras griegas se pueden ingresar utilizando la tecla ‹Esc› y la letra latina equivalente: por
ejemplo, π se ingresa como ‹Esc›p‹Esc›, α como ‹Esc›a‹Esc›, etc. La etiqueta “In[1]:=” es
agregada por el programa cuando comienza a evaluar el comando, lo que ocurre apenas se presiona
la tecla ‹Intro› del teclado numérico, o la combinación ‹Mayus›+‹Intro› del teclado común.
Luego de algunos segundos, el programa responde con:
Out[1]:=
0
BA 6
1 B
ck= T0
@
!
6
I kπ T0
I
e 6 kπ
2k 2 π 2
I kπ
6
I kπ T0
I
2e 3 k π k 2 π 2
+
2k 2 π 2
6 + 6e
+
I
I
Ae 3 k π 6 6e 6 kπ +I kπ T0
I
A 6 6e 6 kπ +I kπ T0
I
Ae 6 kπ
A
I
6+e 6 kπ (6 I k π ) T0
A
+
2k 2 π 2
+
2k 2 π 2
I
6+e 6 kπ (6 I kπ ) T0
I
2e 2 k π k 2 π 2
1
A
Esta expresión se puede reducir utilizando el comando Simplify[] o FullSimplify[]:
In[2]:=
Ck = Simplify[ck]
y, nuevamente, luego de algunos segundos, se obtiene
Out[2]:=
Ck =
12A 1 + 2Cos[ π3k ] Sin[ π12k ]2
Procesamiento Digital de Señales
k2 π 2
U.N.S. 2011
295
Fig. D.3. Grá…co de los 10 primeros coe…cientes de Fourier, para A = 1.
En Mathematica, los nombres de las funciones se escriben con mayúscula, y el argumento queda
encerrado entre corchetes. Por ejemplo, la expresion Cos[π/2] devuelve 0, pero cos(π/2) devuelve
(cos π )/2, que evidentemente es incorrecta.
La expresión de los coe…cientes ck se puede simpli…car aún más (esta vez “a mano”), y …nalmente
se obtiene que
ih
i2
A h
k
ck =
1 + 2 cos πk
sinc 12
3
12
La función Sinc[] no está disponible en Mathematica, pero se puede de…nir de la siguiente manera:
In[3]:=
Sinc[x_]:=If[x==0,1,Sin[πx]/(πx)];
De esta forma, se puede de…nir los coe…cientes de Fourier como:
In[4]:=
A 1 + 2Cos
Ck = 12
h
πk
3
i
h i
k
Sinc 12
2
;
Algunos valores de los coe…cientes se pueden generar utilizando el comando Table[]. En el siguiente
fragmento de código, este comando está incluido dentro de la instrucción FullSimplify[] para
obtener expresiones numéricas más sencillas:
In[5]:=
TCk = FullSimplify[Table[Ck,{k,0,10}] ]
Out[5]:=
(
A
,
12
p
6( 2 + 3)A
, 0,
π2
p
2A
6(2 + 3)A A
, 0,
, 2,
3π 2
25π 2
π
p
6(2 + 3)A
, 0,
49π 2
2A
,0
27π 2
)
Los coe…cientes se pueden gra…car en función de k utilizando el comando ListPlot[]:
ListPlot[Table[{k,Ck/.A->1},{k,0,10}], PlotStyle -> PointSize[0.02] ]
obteniéndose el grá…co que se muestra en la Fig. D.3.
Finalmente, se puede gra…car la aproximación utilizando el comando Plot[]. En este caso, dentro
del comando Plot[] se efectúa la suma de un número …nito de términos de la serie. Si se supone
A = 1 y T0 = 1, las instrucciones necesarias para gra…car la aproximación son:
1
k ])2 Exp[I 2 π k t], {k, -10, 10}], {t, -1, 1},
Plot[Sum[ 12
(1+2Cos[ k3π ]) (Sinc[ 12
PlotPoints -> 50, PlotRange -> All]
El grá…co de la aproximación para la suma de 21 términos de la serie se muestra en la Fig. D.4( a) ,
y para 101 términos en la Fig. D.4(b) .
Este ejemplo también muestra que el uso de las propiedades de la serie y la transformada
facilita el cálculo de los coeficientes, como se detalla a continuación.
Procesamiento Digital de Señales
U.N.S. 2011
D. Cálculos con Mathematica
296
Fig. D.4. Reconstrucción del tren de pulsos triangulares a partir de la suma de 2
y 2 50 + 1 (b) términos de la serie de Fourier.
10 + 1 ( a)
E JEMPLO D.2. Cálculo de los coe…cientes de Fourier del tren de pulsos triangulares utilizando
propiedades
La idea en este caso es calcular la transformada X ( f ) de un período de la señal periódica (por
ejemplo, la que se muestra en la Fig. D.2), y a partir de ella calcular los coe…cientes de la serie,
ck =
1
X ( f )j f =k/T0 .
T0
La manera más sencilla parecer ser comenzando con la transformada de Fourier del pulso triangular
que se extiende desde T0 /12 hasta T0 /12. Esta transformada
p se puede calcular a partir de la
convolución de dos pulsos rectangulares de ancho T0 /12, y alto A, como se propone en el Ejercicio
17. Aplicando la propiedad de convolución, se encuentra que la transformada de este único pulso
triangular es
h
i2
T0
0
sinc
f
.
X1 ( f ) = AT
12
12
Los transformadas de los dos pulsos triangulares a la izquierda y a la derecha del pulso central
se calculan aplicando la propiedad de desplazamiento. El pulso de la izquierda está adelantado
τ = T0 /6 unidades de tiempo y el pulso de la derecha está atrasado en la misma cantidad. Por
lo tanto, la transformada del pulso de la izquierda es
X2 ( f ) = e j2π
T0
6
f
X1 ( f )
y la del pulso de la derecha
X3 ( f ) = e
j2π
T0
6
f
X1 ( f ) .
Combinando estos tres resultados,
X( f )
=
AT0
12
=
AT0
12
1 + e j2π
h
T0
6
f
j2π
+e
1 + 2 cos 2π T60 f
T0
6
ih
f
h
sinc
T0
12
f
T0
12
i2
.
sinc
f
i2
Finalmente, evaluando la transformada en f = k/T0 , y escalando por 1/T0 se encuentra que
ck =
A
12
h
1 + 2 cos π 3k
ih
sinc
k
12
que evidentemente coincide con el resultado del ejemplo anterior.
Procesamiento Digital de Señales
i2
,
U.N.S. 2011
Descargar