Está en la página 1de 7

Introduccin

En el siguiente informe se presentan las observaciones realizadas a un


archivo cualquiera de formato mp3 que se muestre bajo dos funciones. El
programa utilizado para este efecto fue Matlab y las funciones corresponden
a fft y dft que son clculos de la transformada de Fourier.

Desarrollo

El archivo que se utiliz para ser muestreado viene con el programa


Matlab en un formato .wav y fue transformado para tales efecto a un formato
.mp3. La funcin utilizada para realizar este cambio fue:
[Y,FS] = wavread('piano.wav');
mp3write(Y,FS,'piano.mp3');
Luego, en Matlab se le aplic la funcin dft(x), que calcula lo
coeficientes de Fourier. Esta funcin recorre la sumatoria y se calcula de
manera de recursiva. Esta funcin se usar mas adelante para comprar
resultados en comparacin a otra funcin que viene con el programa Matlab
llamada fft(x). El cdigo de la funcin dft(x) se adjunta a continuacin:
function [coef,tiempototal] = dft(x)
inicio = tic;
N = length(x);
suma=zeros(N,1);
for n = 1:N
suma(1) = x(n)+suma(1);
end
for k = 2:N
for n = 1:N
suma(k) = x(n)*exp(-1i*(k-1)*2*pi*(n-1)/N)+suma(k);
end
end
coef = suma/N;
tiempototal = toc(inicio);
La funcin TOC y TIC son las encargadas de medir el tiempo mientras se
realiza el clculo de los coeficientes de Fourier.
Por otra parte esta la funcin fft(x) que tambin calcula la
coeficientes de Fourier pero con la diferencia que la funcin fft(x) es la
transformada rpida de Fourier. Est funcin viene incorporada al programa y
no fue necesario programarla.

1. Resultados archivo mp3:


Se escogi un archivo que se llamado piano.wav y que viene incorporado al
programa Matlab. Como se menciono anteriormente el archivo se modifico para
ser usado en formato .mp3 y as hacer el clculo correspondiente.
Lo primero que se hizo fue crear un vector llamado x que consistiera en
un muestreo de 30 puntos del archivo piano.mp3. El argumento de la funcin
contiene un 1 que indica que debe ser mono, en caso contrario, si fuese
estreo tendra que ser un numero 2 y el vector sera doble. Esta funcin al
correrla gener el siguiente vector (est puesto en dos columnas):
X = mp3read('piano',30,1)
Warn:
requested
12672
returned 11567
x =
1.0e-03 *
0.1526
0.1526
0.2136
0.2136
0.1831
0.1526
0.1831
0.1831
0.2441
0.1831
0.1831
0.2441

frames,

0.2747
0.2136
0.2136
0.2136
0.1221
0.1526
0.1526
0.1526
0.1526
0.1526
0.1526
0.2136
0.2136
0.2136
0.2136
0.1831
0.1831
0.1831

Luego, esta informacin se usa como base para aplicar las funciones
fft(x) y dft(x), las cuales quedan de la siguiente manera:

fft(x)

>> dft(x)

ans =

ans =

0.0056
-0.0000
-0.0001
-0.0001
-0.0001
0.0000
-0.0002
-0.0001
0.0001
-0.0001
0.0001
-0.0001
0.0000
-0.0001
0.0001
0.0000
0.0001
-0.0001
0.0000
-0.0001
0.0001
-0.0001
0.0001
-0.0001
-0.0002
0.0000
-0.0001
-0.0001
-0.0001
-0.0000

+
+
+
+
+
+

0.0002i
0.0004i
0.0002i
0.0000i
0.0002i
0.0001i
0.0002i
0.0000i
0.0000i
0.0002i
0.0001i
0.0000i
0.0000i
0.0001i

+
+
+
+
+
+
+
+

0.0001i
0.0000i
0.0000i
0.0001i
0.0002i
0.0000i
0.0000i
0.0002i
0.0001i
0.0002i
0.0000i
0.0002i
0.0004i
0.0002i

1.0e-03 *
0.1882
-0.0008 - 0.0073i
-0.0019 + 0.0140i
-0.0041 - 0.0082i
-0.0036 - 0.0012i
0.0010 - 0.0053i
-0.0060 + 0.0031i
-0.0039 + 0.0054i
0.0039 + 0.0010i
-0.0041 - 0.0003i
0.0020 + 0.0070i
-0.0018 - 0.0019i
0.0009 - 0.0007i
-0.0022 - 0.0009i
0.0021 + 0.0040i
0.0010 + 0.0000i
0.0021 - 0.0040i
-0.0022 + 0.0009i
0.0009 + 0.0007i
-0.0018 + 0.0019i
0.0020 - 0.0070i
-0.0041 + 0.0003i
0.0039 - 0.0010i
-0.0039 - 0.0054i
-0.0060 - 0.0031i
0.0010 + 0.0053i
-0.0036 + 0.0012i
-0.0041 + 0.0082i
-0.0019 - 0.0140i
-0.0008 + 0.0073i

Estas funciones salieron a partir de una funcin muy sencilla llamada


calculos que tambin mide el tiempo de muestreo y dibuje las mediciones con
la funcin figure y stem. Esta funcin se define como:
function calculos
x=mp3read('piano', 30,1)
vector =[1:length(x)];
tiempo=tic;
dft(x)
toc(tiempo);
figure
stem(vector,dft(x))
tiempo=tic;
fft(x)

toc(tiempo);
figure
stem(vector,fft(x))

Con esto el tiempo de cada una de las funciones fue de:

Dft(x): Elapsed time is 0.002750 seconds.


Fft(x): Elapsed time is 0.000595 seconds.

Se puede comprobar que la funcin fft(x) es bastante mas rpida en


comparacin con dft(x), precisamente 4,6 veces mas rpida. Esto ocurre porque
fft(x) ocupa menos clculos que la funcin dft(x), ver anexo 1.
Ahora si los resultados obtenidos de comparan mediante grficos se puede
notar que estn a diferentes escalas. Los siguientes grficos se obtuvieron
como resultado de la funcin clculos:

Fft (x)

Dft(x)

2. Resultados funcin seno:

Se program una nueva funcin en Matlab que contuviera una funcin seno
en su interior, esta funcin consiste en 30 puntos en donde se calcula el
tiempo de ejecucin y la grafica. La funcin se llama ondasinusoidal y
es de la siguiente forma:
function y = ondasinusoidal
p = 0:30;
y = sin(p)';
tiempo=tic;
e = dft(p);
toc(tiempo);
figure
stem(e)
tiempo=tic;
r = fft(p);
toc(tiempo);
figure
stem(r)
Esta funcin al correrla gener el siguiente vector (est puesto en dos
columnas):

y = ondasinusoidal
Elapsed time is 0.000030 seconds.
y =
0
0.8415
0.9093
0.1411
-0.7568
-0.9589
-0.2794
0.6570
0.9894
0.4121
-0.5440
-1.0000
-0.5366

0.4202
0.9906
0.6503
-0.2879
-0.9614
-0.7510
0.1499
0.9129
0.8367
-0.0089
-0.8462
-0.9056
-0.1324
0.7626
0.9564
0.2709
-0.6636
-0.9880

Luego, esta informacin se usa como base para aplicar las funciones
fft(x) y dft(x), las cuales quedan de la siguiente manera:

fft(y)

dft(y)

ans =

ans =

0.2801
0.2837
0.2968
0.3299
0.4433
-2.9617
0.0162
0.1098
0.1413
0.1567
0.1654
0.1709
0.1744
0.1767
0.1780
0.1787
0.1787
0.1780
0.1767
0.1744
0.1709
0.1654
0.1567
0.1413
0.1098
0.0162
-2.9617
0.4433
0.3299
0.2968
0.2837

Con

+ 0.0926i
+ 0.2104i
+ 0.4115i
+ 0.9849i
-15.1206i
- 0.9816i
- 0.5135i
- 0.3414i
- 0.2473i
- 0.1849i
- 0.1386i
- 0.1013i
- 0.0693i
- 0.0405i
- 0.0133i
+ 0.0133i
+ 0.0405i
+ 0.0693i
+ 0.1013i
+ 0.1386i
+ 0.1849i
+ 0.2473i
+ 0.3414i
+ 0.5135i
+ 0.9816i
+15.1206i
- 0.9849i
- 0.4115i
- 0.2104i
- 0.0926i

0.0090
0.0092
0.0096
0.0106
0.0143
-0.0955
0.0005
0.0035
0.0046
0.0051
0.0053
0.0055
0.0056
0.0057
0.0057
0.0058
0.0058
0.0057
0.0057
0.0056
0.0055
0.0053
0.0051
0.0046
0.0035
0.0005
-0.0955
0.0143
0.0106
0.0096
0.0092

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-

0.0030i
0.0068i
0.0133i
0.0318i
0.4878i
0.0317i
0.0166i
0.0110i
0.0080i
0.0060i
0.0045i
0.0033i
0.0022i
0.0013i
0.0004i
0.0004i
0.0013i
0.0022i
0.0033i
0.0045i
0.0060i
0.0080i
0.0110i
0.0166i
0.0317i
0.4878i
0.0318i
0.0133i
0.0068i
0.0030i

esto se obtiene tambin los tiempos de ejecucin de ambas funciones:

Dft(y): Elapsed time is 0.003681 seconds.


Fft(y): Elapsed time is 0.000046 seconds.

Con lo que nuevamente la funcin fft(y) da un valor de mas rpido que la


dft(y).

Grficamente:

Fft(y)

Dft(y)

Conclusiones

Por motivos que desconozco no se pudo elegir un archivo .mp3 a eleccin


personal porque el programa, al aplicar las funciones dft(x) y fft(x),
arrojaba un vector que contena puros 0 en su interior. Por este motivo se
escogi el archivo adjuntado con el informe que ya viene incorporado con el
programa Matlab.
Una de las
es el hecho
rpida que la
comparacin a

conclusiones mas fuertes que se pueden obtener de este trabajo


que efectivamente la transformada rpida de Fourier fue ms
discreta debido a la cantidad de operaciones que realiza una en
otra.

Anexo 1:

El ahorro o reduccin en el nmero de operaciones es significativo para valores


de N como los que es doble esperar en imgenes prcticas, por ejemplo, para una
imagen de 1024 x 1024 pixeles:

Con TF discreta:
complejas.

Con FFT: N = 1024, se tendra N*

1024,

se

tendra

1.048.576

operaciones

N = 10.240 operaciones complejas.

Con una reduccin en el tiempo de cmputo, empleando mquinas equivalentes, se


reduce a menos del 1%.

También podría gustarte