06 octubre 2009

¿Qué Onda?: Fundamentos Matemáticos de las WAVELETS. Parte I

Lo que se presenta a continuación es basado en un artículo de Albert Cohen y Jelena Kovacevic llamado Wavelets: The Mathematical Background.

 

Cuando se tiene una señal, existen una gran cantidad de maneras de representarla y en base a lo que necesitamos hacer con dicha señal es que elegimos la manera en que va a ser tratada. El objetivo es que la información obtenida de la señal tenga significado para nosotros, es ahí dónde se pueden lograr varios acercamientos. Entre ellos se encuentran la multiresolución y las transformaciones de dominio.

La multiresolución a grandes rasgos es ir representando la información de manera que los detalles son agregados de forma sucesiva. Para la representación de una señal, uno de los temas que se utilizan ampliamente son las transformaciones de dominio y con ello es menester hablar una de las técnicas más aplicadas, la transformada de Fourier. Con la transformada de Fourier cambiamos la representación de una señal en el dominio del tiempo al dominio de la frecuencia, pero no podemos saber en que instante de tiempo está ubicada la frecuencia, esto es en algunos casos una limitación.

Una manera de darnos una idea de la localización en tiempo de la frecuencia es construir bloques y aplicarles la transformada de Fourier. Si tenemos que clip_image002 es una señal de frecuencia, con Fourier obtenemos un pico en la frecuencia clip_image004 dada. A partir de esto podemos expresar clip_image006 dónde clip_image008 es la ventana usada para localizar la frecuencia en el tiempo, a esto se le llama Short-time Fourier Transform (STFT). Una de las principales desventajas con la STFT es que la localización en el espacio tiempo es fija. Con las wavelets se tiene un acercamiento diferente, la localización de la frecuencia es logarítmica y proporcional al nivel de frecuencia.

Se puede definir una familia de funciones de la siguiente manera que nos permita tener una representación en la escala del tiempo

clip_image010,

clip_image012

(1)

dónde clip_image014 es una función fija llamada “wavelet madre”, a representa el escalamiento de la función y b son los corrimientos en el tiempo.

Basado en la función representada en (1) y tomando en cuenta que es un espacio de Hilbert, se define la transformada de una función f de la siguiente manera:

clip_image016

(2)

Para que la transformada (2) pueda ser invertible, se tiene elegir una clip_image014[1] de manera que cumpla con la condición de admisibilidad mostrada a continuación:

clip_image018

(3)

Y para asegurar que la integral es finita se debe cumplir que clip_image020. En base a lo anterior tenemos que se puede reconstruir mediante:

clip_image022

(4)

Prácticamente, una transformada wavelet continua se aplica a una serie de puntos discretos de manera clip_image024. Si se restringe la transformada continua wavelet de manera que clip_image026, dónde clip_image028entonces para valores fijos clip_image030 y clip_image032. Entonces podemos definir la función wavelet de manera general cómo:

clip_image034,

clip_image036

(5)

Para saber si la transformada wavelet en el caso discreto caracteriza completamente la función f y logra reconstruirla de manera estable, se requiere introducir el concepto de frames.

Para que un frame exista, y por lo tanto reconstrucción a partir de la wavelet, se debe tener una secuencia clip_image038en un espacio de Hilbert H si para cada x perteneciente al espacio H se cumple lo siguiente:

clip_image040

(6)

En dónde los límites clip_image042 son independientes de x. A dicha secuencia se le asocia al operador F que representa a clip_image044y también se desprende de ahí F* que asocia la sumatoria de las secuencias clip_image046 en clip_image048.

La desigualdad expresada en (6) puede ser expresada en términos del operador hermitiano F* F de manera que:

clip_image050

(7)

En base a lo anterior podemos definir una secuencia clip_image052 dada por clip_image054 que también constituye un frame llamado dual frame con límites en clip_image056 y se asocia con el operador llamado clip_image058 por lo consiguiente tenemos que:

clip_image060

(8)

Y también tenemos que clip_image062 así que una x que forma parte del espacio de Hilbert es representada por:

clip_image064

(9)

Para reconstruir x debemos conocer clip_image052[1]. Teniendo en cuenta que:

clip_image066

(10)

Dónde el operador residual clip_image068 satisface lo siguiente:

clip_image070

(11)

Sustituyendo en (7) nos da como resultado la siguiente ecuación:

clip_image072

(12)

Si tenemos que A=B=1 después de renormalizar, entonces podemos definir lo siguiente:

clip_image074

(13)

De manera que elegimos valores de A-B/A+B que se aproximan a cero y también A y B de manera arbitraria cercanos a uno seguido de una renormalización, eligiendo valores a0 y b0 cercanos a uno y cero respectivamente. Lo anterior significa que se ha hecho un sobre-muestreo de la wavelet continua en un arreglo bastante denso. Una de las aplicaciones más usadas para usar el sobre-muestreo empleando frames es el de reducir el error de reconstrucción con una relación basada en el sobre-muestreo.

 

Continuará…

24 septiembre 2009

wavedemo: Herramienta didáctica en MATLAB para wavelets. Ejemplo para descomponer una imagen paso a paso

En este post no voy a hablar de la teoría de las wavelets, eso ya tocará en otra ocasión. Buscando desesperadamente información cuando estaba tratando de entender el “image denoising” usando wavelets, me tope con este demo que trae incluido del toolbox de wavelets en MATLAB. Aquí pongo un ejemplo muy simple para ver como se realiza una transformada wavelet aplicada a una imagen.

Primero se tiene que cargar el demo, simple y sencillamente poniendo lo siguiente en la línea de comandos:

wavedemo

y aparece a continuación la siguiente ventana

image

Como se muestra en la imagen anterior, se tienen tres opciones, la primera es un buen ejemplo para mostrar los comandos utilizados a bajo nivel por MATLAB para realizar la transformada wavelet de manera secuencial. En este ejemplo presionamos el botón que dice: “Command line mode” y nos muestra la siguiente ventana

image

como se puede observar, cuenta con varios ejemplos aplicando la transformada wavelet, continuamos presionando el botón que dice “Wavelet 2-D” y nos muestra la siguiente pantalla

image

Es importante notar en donde dice Image, obviamente se selecciona la imagen que queremos mostrar en el ejemplo, y presionamos “Start >>” para ir paso a paso o “AutoPlay” para que lo reproduzca automáticamente.

A continuación se muestran algunos de los pasos:

image

image

image

04 septiembre 2009

¡GANADORAS!

Escribo en celebración de una memorable ocasión, ahora si es oficial el anuncio.

Si, nuestras cuenta cuentos urbanas, (por si no han visto el link allá arriba) han sido ganadoras ni más ni menos del Premio al Fomento de la Lectura "México lee 2009", pueden ver la nota oficial aquí. Y la semana que entra estará en representación del colectivo Ivonne en el palacio de Chapultepec, en México D.F. para asistir al Primer Encuentro Internacional de Salas de Lectura en el cual se llevará a cabo la premiación.

A continuación transcribo un fragmento de la nota oficial, claro donde se anuncia a nuestras ganadoras:

En la categoría de Fomento de la lectura desde la sociedad civil, el jurado, integrado por la promotora y capacitadora Carola Díez, el profesor Amílcar Saavedra y el especialista en promoción de la lectura Rubén Pérez Buendía eligió como ganadora a Ivonne Ramírez Ramírez, de Ciudad Juárez, Chihuahua, representante del Colectivo Palabras de Arena, con el trabajo Regalando palabras en el desierto: cuentacuentos urbanos entre maquiladoras y narcofosas.

Nuevamente, cómo dice Mr. Cómic Man y se ha convertido en frase célebre local:
"Esa es la actitud"

¡Felicidades PuentaPuentos Urbanas!

30 agosto 2009

Graficar la respuesta a la frecuencia y los polos y ceros de un filtro FIR en MATLAB

En este ejemplo se grafican los filtros que vienen como ejemplo en el post anterior: ¿Qué es un filtro de respuesta finita? (FIR:Finite impulse Response). Un ejemplo.

Si tenemos un filtro como se muestra a continuación:

clip_image002[4]

Lo podemos graficar en MATLAB con el siguiente código:

RaizDeDos = 2^(1/2);
h = [1/RaizDeDos 1/RaizDeDos];
freqz(h,1);

La función freqz ejecutada de la manera anterior nos regresa una ventana con la siguiente información:

image

Como se puede observar nos regresa la magnitud y la fase del filtro, pero solo nos muestra hasta pi, para graficar la respuesta de 2pi, tenemos que hacerlo de la siguiente manera:

RaizDeDos = 2^(1/2);
h = [1/RaizDeDos 1/RaizDeDos];
freqz(h,1,'whole');

Si, es de la misma manera, simplemente  se le agrega ‘whole’ a la función freqz. Para mas información simple y sencillamente teclear doc freqz para acceder a la documentación de MATLAB. La respuesta a la frecuencia queda como a continuación:

image

Para graficar los polos y ceros del filtro, el código en MATLAB es de la siguiente manera:

RaizDeDos = 2^(1/2);
h = [1/RaizDeDos 1/RaizDeDos];
z = roots(h);
zplane(z',1);

Como se observa, primero se tienen que calcular las raíces de h, ya que tenemos que clip_image002[6]

y

clip_image002[8]

Así que para calcular los ceros tenemos que calcular las raíces de z en h, por eso la línea z=roots(h); y como nos regresa un vector columna, ponemos la transpuesta en la función zplane. La gráfica quedaría como se muestra a continuación:

image

Si, es simple como eso, pero para poder llegar a eso tuve que pelearme un buen rato con MATLAB, por eso es que aquí lo pongo, jeje.

 

Technorati Tags: ,,,,

This is I

Blog dedicado a escribir sobre Sistemas Embebidos y el Internet de las Cosas o IoT que le llaman.