Aprendre i Saber



Notes prèvies:

Tot i que del que es vol parlar aquí és sobre l'aprendre i el saber avans volem dir:
  • Qualsevol error o suggeriemnt que hi volgueu fer, no dubteu en posar-vos en contactre amb mi jlagares@xtec.cat

  • Què? Tot el que volíeu saber sobre l'FFT i no us atrevíeu a preguntar

  • Per a què? Aquesta pàgina parla d'això.

  • Per què? Ho vull saber.

  • Com? Aquí se'n parla, tot va de com descobrir el com.

  • + coses, tot i que aquí hi ha links, es recomana llegir tot el que hi ha aquí abasn de clicar en els links. Els vídeos i cançons, sí que es bo que ho mireu i ho escolteu quan us ho trobeu.


Aprendre i saber. Aquestes dues paraules van molt lligades. Sembla que per saber una cosa cal aprendre-la.

Per exemple, per saber què hi ha lligat amb el terme casa, segurament caldrà veure’n moltes i, podríem dir, que per saber que sabem què és una casa, el que hauria de passar, és que per qualsevol cosa, saber dir, si és o no ho és. Tot i parlar d’una cosa, una casa, que en principi és molt evident què és, cal tenir en compte que el concepte, casa, no deu ser ben bé el mateix per nosaltres que per una persona a l’edat de pedra.

Poso un altre exemple, què és el color vermell? L'ideal és veure moltes coses de color vermell i, moltes d’altres, que no ho siguin. Això en podríem dir aprendre què és el color vermell i, quan “sapiguem” diferenciar si una cosa és vermella, o no, direm que sabem què és el color vermell. Com abans, tot i ser una cosa molt evident, a vegades no ho és tant, pensem que existeix el daltonisme, i no parlem de la ceguesa, que impedeix que això ho sigui, de tan evident.

En aquest treball vull reflexionar sobre el fet de saber i aprendre en un aprenentatge que estic realitzant aquests dies. Podríem anomenar-ho:

Saber què és l’FFT.

Val a dir que FFT correspon a l’acrònim, “Fast Fourier Transform”, que traduït seria, Transformada de Fourier Ràpida. Com el seu nom indica és fer la transformada de Fourier, que deu ser una cosa, en principi, lenta, i segurament útil, de forma ràpida.

Es pot tenir molts nivells de saber què és una cosa, i aquí en parlaré, però, de bon principi tractaré de donar una definició de què entenc per saber això?, o quan donaré per sabut aquest concepte:

Quan hagi escrit un programa que calculi l’FFT d’unes dades.

És possible que fins i tot en arribar aquí, matisarem el significat de saber-ho.

Comencem intentant respondre a unes preguntes. Si no hi ha interès de saber una cosa, no cal fer res per aprendre-la.

1-Que és la transformada de Fourier?

2-Per què és interessant trobar una manera de fer-ho amb menys càlculs? Què vol dir menys càlculs?

3-A qui i per què interessa fer la transformada de Fourier?

4-Per què jo, i d’on ve, aquest interès?

5-Relació amb el Projecte Fressa?

Intento contestar a les preguntes:

L’any 1996 vaig fer un programa, anomenat Fressa 96. És un programa pensat per veure la relació que hi ha entre la música, la física i les matemàtiques. És una aplicació que realitza: registre, reproducció, representació, anàlisi i síntesi de so.

La relació del concepte físic del so amb l’art de la música i la seva possible descripció mitjançant les matemàtiques, va fer que veiérem interessant fer un programa amb aquestes característiques, per a conèixer millor i apreciar més cada assignatura de forma independent i, sobretot la seva interrelació.

Doncs en la part que parla d’anàlisi i síntesi de so, la transformada de Fourier és l'eina matemàtica que permet fer-ho.

De moment no ha sortit per res el Projecte Fressa, bé, sí el nom, però l’any 1996 encara no s’havia “inventat” el Projecte Fressa.

Què és la transformada de Fourier? Segurament si ho cerquéssim en un llibre, posaria alguna cosa com, el canvi d’una funció del domini temporal en el domini de freqüències. Això, de moment, no ens diu gaire res, caldria afegir que, el so, no és res més que la funció que ens dona la pressió de l’aire en funció (valgui la redundància) del temps. `P = f(t)`. De fet, el programa, i la seva documentació, el que pretén és, precisament, ajudar a fer entendre això.



Doncs aquesta funció es pot canviar per una altra que el seu domini són les freqüències.



Més o menys tothom quan escolta una cançó sap veure diferències entre els diferents instruments i les altures de les notes que estan tocant, això és així, ja que la nostra oïda a través de la membrana basilar (Cloqueja) ho fa.



Jean Jaques Fourier, ja fa temps, principis del segle XIX, va “inventar" (n’hi ha que en dirien, descobrir) una fórmula matemàtica per fer-ho amb funcions matemàtiques. Això és el que en diem transformada de Fourier.


Aprofito per afegir que la va "inventar" (en matemàtiques inventar i descobrir son dues paraules gairebé sinònimes) en Fourier en el seu llibre, Theorie de la Chaleur. Ell no en deia Transformada de Fourier, sinó, Sèrie Trigonomètrica.

Aquest fil de Twitter intenta explicar-ho un xic:


No és imprescindible entendre la part matemàtica. Cal recordar que en el principi del Projecte Fressa jo estava estudiant el so, en particular la veu. El que volia era a través de la veu, ajudar a persones amb mobilitat reduïda a fer servir els ordinadors. És a dir emetent ordres de veu, fer que l’ordinador faci coses.

Si el nostre enteniment de la veu comença en descompondre el so en el domini de les freqüències, cosa que hem dit que fa l’oïda, el primer que havia de modelar era això i, com hem dit abans, el giny matemàtic que ho fa és la transformada de Fourier. D’aquí venia la necessitat de conèixer-ho.

Cal afegir que no n’hi ha prou, ja que un cop conegut el que es diu, fa falta una certa comprensió i actuar en conseqüència, però això motivaria tota una altra història que ultrapassa el que cerquem aquí.

Un exemple del que volem dir es mostra en aquest vídeo de YouTube. Es fa servir un comunicador, Plaphoons, amb comandes de veu. De fet amb vocals:



I aquí un atre exemple. Escrivint qualificacions amb reconeixement automàtic de veu. En ambdós casos es fa servir una tècnida anomenada comparació de patrons (generats per la FT), però això, també, és una altra història.



Abans de continuar amb l’explicació de la Transformada de Fourier (TF) deixeu-me mostrar una nova joguina sobre altres coses que podem fer amb la TF. Escolteu aquesta gravació:


Aquí no només es calcula la TF, a més, es manipula, i es fa la seva inversa. És a dir, del domini de les freqüències es torna a passar al de temps, o sigui veu, però amb aquest efecte. Anem pujant el valor de les freqüències progressivament mantenint els coeficients de Fourier. Per si algú en vol saber més, cerqueu autotune al Google, una ajuda artificial als cantaires.

Anem amb el procés d’aprendre i saber i com va anar en el meu cas:

Jo sabia el que representava l’FT i vaig fer un programa, tal com he explicat abans, Música, Física y Matemàtiques, any 1996. Grava i representa el so, feia l’FT del so i sintetititzava so a partir de l’inversa de l’FT. Aquests procéssos els coneixia i vaig desenvolupar els algorismes que els calculava.

Volia aprofitar aquest coneixement per ajudar a persones amb discapacitat motriu a controlar l’ordinador mitjançant la parla. Així va néixer el Projecte Fressa, però tenia clar que si volia que funcionés a temps real necessitava que el càlcul de l’FT fos molt més ràpid. Sabia de l’existència d’un algorisme, l'FFT, que ho feia.

En aquells moments desconeixia tot, ni tant sols coneixia el guany amb velocitat que permetia. La qüestió és que vaig trobar un llibre en una llibreria, Digital Signal Processing. El vaig fullejar, vaig descobrir que en parlava i que hi havia un codi, en C, per calcular l’FFT.




Vaig comprar el llibre, vaig traduir el codi a Pascal, el vaig provar i vaig veure que calculava l’FT correctament i de forma molt més ràpida. Aquí teniu el codi. Si algú cercava el codi, ja el teniu i podeu plegar de llegir aquí.



Amb això vaig presentar el projecte per fer el Projecte Fressa. En aquells moments no es deia així. Després de moltes investigacions estudiant patrons, fent servir l'FFT, per distingir els sons, es van fer uns programes, Globus, Control de la rata per veu, control de jocs.

Cal afegir, el Projecte Fressa va anar canviant de metodologia, ja que les necessitats dels usuaris van resultar ser unes altres com el programa Plaphoons, però això és una altra història i parlar-ne ens desviaria del tema. Tot i que n’he parlat per veure la necessitat de conèixer l’FFT per mi, i pel Projecte Fressa. El programa Globus ha ajudat a moltes persones amb discapacitat auditiva a adquirir parla.


Pregunta, amb tot això de fer servir l’FFT i tenir un programa que la calcula, em permetia dir que sabia què és l'FFT?

Jo dic que no, n’havia après coses, en sabia coses, però no sabia què és el que feia que aquest nou algorisme fes els mateixos càlculs que l’FT, però de forma molt més ràpida. Per fer el que feia, no era necessari conèixer-ho, però jo sí ho volia saber.

A continuació vull explicar el camí que he seguit per aprendre què és i perquè aconsegueix, el que aconsegueix l’FFT.

Terminologia:
  • FT: Transformada de Fourier (Fourier Transform).

  • DFT: Discrete Fourier Transform, transformada de Fourier d'una funció numèrica. FT i DFT acabem fent-ho servir gairebé de manera sinònima.

  • N: Nombre de dades, pel que ens interessa, cal que sigui una potència de `2`, `{2, 4, 8, 16, 32, 64, 128, ...}`.

  • `f(x)`: Els valors de la funció. En general `x` va de `0` fns a `N-1`.

  • `F(x)`: Els valors dels coeficents de Fourier que es vol calcular.

Passes:

    1-Explicar l’DFT, "Discrete Fourier Transform". Calcular el nombre de càlculs que resulta en funció del nombre de dades de partida.

    2-Explicar la nova DFT amb notació exponencial complexa. Tot i que complica entendre el que es fa, facilita la visió de les redundàncies en els càlculs que és el que permet l’acceleració del procés.

    3-Per què és pot accelerar el procés? D'on surt lo de Fast Fourier Transform.

    4-Càlcul de la DFT per a una funció amb `2` valors.

    5-Càlcul de la DFT per a una funció amb `4` valors.

    6-Càlcul de la DFT per a una funció amb `8` valors.

    7-Comparació de les DFT per a les tres funcions amb, 2 - 4 - 8, valors `->` 16.

    8-Resum: La màgia de l'FFT. Butterfly diagrams.


    9-Desenvolupar un programa que incorpori aquestes redundàncies per fer efectiva l’FFT. 1a versió, està en procés de revissió.


    10-Comparar a partir de les mateixes dades que es calcula l’FT de forma correcta, comprovar que realment hi ha millora en la velocitat i comparar-ho amb el codi del llibre, que, crec, està extraordinàriament optimitzat.

    11-Reflexionar sobre fins a quin punt puc dir que he après sobre l’FFT. És a dir, què sé sobre l’FFT. Si el coneixement no és total, al menys reflexionar sobre la millora del coneixement actual respecte el que tenia.

      Volia fer un text més gran sobre això, però crec que he arribat més lluny del que pensava en el fet d'entendre que és l'FFT, ja que he fet un programa propi, sense copiar-lo d'enlloc amb el què, crec, puc dir, que sé què és l'FFT.

      Sembla que dona els resultats correctes i dona velocitats de l'ordre de magnitud esperades. Per això m'atreveixo a fer l'afirmació anterior.

      El que sí que encara no entenc és el programa FFTLlibre. Des de bon principi vaig pensar que no ho sabria descobrir, ja que hi veig coses que no sé com ho simplifiquen tant, però crec que hi ha moltes persones que hi han rumiat per arribar a aquest alt nivell d'eficàcia i, amés, està pensat per fer servir molt poca memòria. Cal fel·licitar a la gent que el va aconseguir.

      Afegir que per arribar aquí no només he fet servir instructivisme, ho sigui d'un lloc o de varis llocs aprendre què és l'FFT (De fet no m'atreveixo a dir que hagi trobat un lloc per aprendre què és l'FFT). Sinó molt de constructivisme:

      • He escrit moltes vegades els documents amb les fórmules matemàtiques, algunes que no portavena enlloc, fins a trobar-ne unes que m'ajudaven a entendre l procés.

      • El fet de fer el meu propi, Butterfly diagram, d'una forma que no he vist enlloc, m'ha portat a dir que ho entenc.

      • I finalment traduir-ho a un programa que calcula el que volem que es calculi.



Biliografia:
  • Digital signal processing. A practical aproach (Emmanuel C. Ifeachor; Barrie W. Jervis. D'aquí vaig treure el codi que he fet servir dels dels anys 90 i les primeress explicacionss i una primera idea de com funcionava, però impossible construir un codi propi.

  • A DFT and FFT TUTORIAL

  • Videos:

  • Programa Globus 3. Pensat per a persones amb discacitat auditiva per ajudar-los a adquirir la parla que fa servir abastament a transformada de Fourier, concretament l'algorisme, FFTLlibre. Porta adjunt el codi. Fa moltes més coses que la transformada de Fourier del so, també fa una cosa semblant que es diu càlcul LPC (Linear Predictive Coding)

  • En fí, pels que el volieu, aquí teniu el programa sencer amb el codi per si hi voleu jugar.



I, ara sí, per acabar, un xic de música. Sintetitzada amb funcions matemàtiques fent servir la inversa de la Transformada de Fourier.