Wavelet con Matlab
Como ya se vio en otra sección de esta web (Aquí), una wavelet nos permitirá ir seccionando una señal en diferentes niveles de coeficientes. Matlab dentro de su Wavelet toolbox, nos presenta una manera rápida de obtener los coeficientes en diferentes niveles de la señal. Estos coeficientes pueden ser utilizados para caracterizar señales o para pre procesar información cruda.
Para explicar el funcionamiento de Matlab, vamos a utilizar la señal vectorizada del siguiente archivo:
Una vez que tenemos nuestra señal, vamos a ingresarla a una variable de Matlab por medio de
1 2 3 |
s=xlsread('senal1','A1:CU1'); |
Para verificar la señal a descomponer, hay que graficarla
1 |
plot(s) |
Obteniendo la señal de la figura 1.
Fig1.- Señal representativa del archivo xlsx, representativa de una señal bioeléctrica.
Ahora, se le va a aplicar la Transformada Wavelet Discreta (DWT) por medio de:
1 |
[C,L]=wavedec(s,3, 'sym4') |
Que nos indica que vamos a aplicarle la DWT a la señal s a un nivel de descomposición 3. Donde $C$ es un vector que contiene todos los coeficientes resultantes y L es un vector de registro (bookkeeping vector). Contiene las longitudes de cada conjunto de coeficientes por nivel.
Una vez que se ha descompuesto la señal se calculan los coeficientes de aproximación por medio de
1 |
Cd3=wrcoef('a',C,L,'sym4',3); |
Y se almacenan en diferentes vectores por nivel
1 |
[cd1,cd2,cd3] = detcoef(C,L,[1 2 3]); |
Estos coeficientes los podemos ver de forma gráfica por medio de
1 2 3 4 5 6 7 8 9 10 11 |
subplot(4,1,1) plot(Cd3) title('Coeficientes de aproximación') subplot(4,1,2) plot(cd3) title('Coeficientes en el nivel 3') subplot(4,1,3) plot(cd2)title('Coeficientes en el nivel 2') subplot(4,1,4) plot(cd1) title('Coeficientes en el nivel 1') |
De este código se obtienen las siguientes gráficas:
Fig. 2.-Representación gráfica de los coeficientes correspondientes a la señal de la figura 1.
Obviamente, los vectores numéricos que representan a cada una de esas imágenes se almacenaron en las variables cd1, cd2 y cd3.
Y estos vectores pueden ser utilizados como elementos de pre procesamiento para ingresar dentro de una red neuronal. Incluso se le pueden generar características estadísticas y a partir de ellas realizar análisis más completos de una señal. Como por ejemplo obtener el promedio de los valores y el valor máximo del vector:
1 2 |
Prom=mean(Cd3) m=max(Cd3) |
Para generar la Wavelet de la cabecera de esta página, se debe de colocar el código:
1 2 3 |
figure [psi,xval] = wavefun('morl'); plot(xval,psi,'linewidth',4) |