Sunteți pe pagina 1din 10

Universidad Industrial de Santander

Escuela de Ingenieras El
ectrica, Electr
onica y de Telecomunicaciones

Taller 5. Procesamiento digital de se


nales continuas

Introducci
on
El objetivo de este taller es poner en practica algunos conceptos del modulo
Procesamiento digital de se
nales continuas. Especficamente, vamos a poner en
pr
actica los conceptos de cuantizacion y sus efectos, y de dise
no de filtros digitales para el procesamiento de se
nales continuas. Este taller requiere un paquete
de archivos, taller5.zip, que se puede descargar desde el portal del curso.
Los archivos en este paquete le permitiran realizar el taller y verificar sus resultados. En la tabla 1, puede encontrar un resumen de los archivos contenidos en
el paquete.
Archivo
energy.m
digitize.m
snr.m
getwindow.m
getlength.m
getfilter.m
ecg.mat(*)
check.m(*)
answers.mat(*)

Descripcion
Energy of a signal
Digitize a signal by quantization
Signal to noise ratio
Select function for windowing
Select length of windowing function
Impulse response of FIR filter
Se
nal ECG para filtrado
Funcion para verificar la solucion de los ejercicios
Archivo para verificar solucion de los ejercicios

Tabla 1: Archivos en el paquete taller5.zip. Los archivos marcados con (*)


no deben ser modificados por el estudiante y son suministrados para verificar la
soluci
on de los ejercicios
Importante: Una vez descargado el paquete de archivos, descomprmalos
e inicie una sesi
on de Octave cuyo directorio de trabajo sea la carpeta con los
archivos descomprimidos. Para esto, puede usar el comando cd de octave. Por
ejemplo, si los archivos descomprimidos en su PC se encuentran en la direccion
C:\Documents\taller, entonces al iniciar Octave debe escribir el comando:
cd('C:\Documents\taller5')

1.

Energa

Un concepto fundamental en procesamiento de se


nales y que es de gran
utilidad en diferentes contextos es el concepto de energa. En este taller, vamos
a utilizar la energa junto con el concepto de relacion se
nal a ruido para medir
los efectos de la cuantizaci
on durante el proceso de digitalizacion. La energa de
una se
nal se define como:

X
E=
|x(n)|2
(1)
n=

Ejercicio
Modifique el archivo energy.m para que permita el calculo de la energa de
una se
nal. La funci
on deber
a tener una entrada y una salida. La entrada x es un
vector correspondiente a una secuencia discreta y la salida E es un escalar con
la energa de dicha secuencia. Una vez la funcion sea debidamente modificada y
editada, esta podr
a invocarse en Octave como:
E = energy(x);

Para verificar que la funcion energy ha sido editada correctamente, utilice


la funci
on check:
check('energy');

Si el ejercicio fue completado con exito, en la pantalla se muestra el mensaje


Function energy seems to be OK :).

2.

Efectos de la cuantizaci
on

La cuantizaci
on es el proceso que tiene lugar cuando una secuencia discreta
es digitalizada para su representacion en un sistema de procesamiento digital.
Usando la notaci
on de operador, este proceso se puede representar como:
xQ (n) = Q{x(n)},

(2)

donde x(n) es la secuencia discreta original, xQ (n) corresponde a la secuencia


cuantizada y Q{} corresponde al operador cuantizacion.
Especficamente, la cuantizacion consiste en representar los valores de una
se
nal discreta usando un n
umero finito N de valores separados una distancia .
Por un lado, el n
umero de valores que se puede utilizar para representar una
se
nal digitalizada depende a su vez del n
umero de bits B del sistema:
N = 2B

(3)

Por otro lado, la distancia de separacion, o paso de cuantizacion, depende


del rango din
amico del conversor :

(4)
N 1
Para minimizar el impacto del proceso de cuantizacion en la digitalizacion de
una se
nal, el conversor AD se dise
na de tal manera que su rango dinamico coincida con el rango de la se
nal de entrada, tal que | max{x(n)} mn{x(n)}|.
=

2.1.

Cuantizaci
on uniforme

Existen tres tipos comunes de cuantizacion uniforme: la cuantizacion por


redondeo, por redondeo hacia abajo y por redondeo hacia arriba. Estos esquemas
de cuantizaci
on difieren en la manera en que se calcula el valor cuantizado
de cada muestra de la secuencia de entrada. En la cuantizacion uniforme, por
ejemplo, el i-esimo nivel de cuantizacion corresponde a:
xi = xmin + i,

(5)

donde xmin es el mnimo valor del rango dinamico y i = 0, 1, 2, , N 1.


En la cuantizaci
on uniforme, cada valor de la se
nal de entrada es representado por el nivel en (5) m
as cercano al valor original, tal que Q{x(n)} = xi si
xi 0.5 x(n) < xi + 0.5.
2

3 bits

16 bits

Q{x(n)}

x(n)
Q{x(n)}

x(n)
Q{x(n)}

1
1

0
x(n)

(a)

(b)

(c)

Figura 1: Cuantizaci
on uniforme por redondeo. (a) Relacion entrada-salida. (b)
Cuantizaci
on de una se
nal sinusoidal usando un conversor de 3 bits. (b) Cuantizaci
on de una se
nal sinusoidal usando un coversor de 16 bits
Ejercicio
Modifique el archivo digitize.m para que permita la digitalizacion de una
secuencia discreta mediante cuantizacion por redondeo. La funcion tendra dos
entradas y una salida. La primera entrada, x, corresponde a un vector con una
secuencia discreta. La segunda entrada, B, corresponde al n
umero de bits del
sistema de representaci
on. La salida, xQ, correspondera a la version cuantizada
de la entrada, mediante cuantizacion uniforme por redondeo. Ajuste el rango
din
amico del cuantizador de tal forma que coincida con el rango de la secuencia
de entrada. Los niveles de cuantizacion se deben determinar seg
un 5. Una vez la
funci
on sea correctamente editada y modificada, esta podra invocarse en Octave
como:
xQ = digitize(x);

Para verificar que la funcion digitize ha sido editada correctamente, utilice la funci
on check:
check('digitize');

Si el ejercicio fue completado con exito, en la pantalla se muestra el mensaje


Function digitize seems to be OK :) y se generaran las graficas de la
figura 1. En esta figura se muestra la relacion entrada salida de un cuantificador
de 3 bits y se muestra el ejemplo de la cuantizacion de una se
nal sinusoidal con
3 y 16 bits.

2.2.

Ruido de cuantizaci
on

Con el objetivo de medir los efectos de la cuantizacion sobre la calidad de


una se
nal, una se
nal cuantizada Q{x(n)} puede modelarse como la suma de la
se
nal original mas una componente de ruido de cuantizacion :
Q{x(n)} = x(n) + (n)

(6)

Concretamente, una medida de la calidad de una se


nal ampliamente utilizada
corresponde a la relaci
on se
nal a ruido (SNR por sus siglas en ingles). La relacion
se
nal a ruido mide la relaci
on entre la potencia de la se
nal y la potencia de la
componente de ruido:
 
Ex
SNR (dB) = 10 log
,
(7)
E
donde Ex es la energa de la se
nal original antes de la cuantizacion y E es la
energa de la se
nal de ruido de cuantizacion.

En el caso de la cuantificacion uniforme, es posible modelar el ruido como una


variable aleatoria de distribucion uniforme. En este caso, es posible demostrar
que la SNR vara en funci
on del n
umero de bits B usados en la cuantizacion
como:
SNR (dB) = 6.02B + 1.76

(8)

A partir de (8) es posible notar que, a medida que se aumenta el n


umero de
bits del sistema, la SNR aumenta en unos 6 dB.
Ejercicio
Modifique la funci
on snr.m para que permita calcular la relacion se
nal a
ruido entre una se
nal y la componente de ruido de cuantizacion. La funcion tiene
dos entradas y una salida. La primera entrada, x, corresponde a un vector con
una secuencia discreta. La segunda entrada, N, corresponde al n
umero de bits
con los que se va a representar la se
nal de entrada. La salida, S, corresponde
al SNR de la se
nal cuantizada usando cuantizacion uniforme por redondeo.
Para resolver este punto, puede usar las funciones desarrolladas en los puntos
anteriores, energy y digitize, para cuantizar la se
nal de entrada, calcular la
se
nal de error usando (6), y determinar el SNR de la se
nal cuantizada usando (7).
Una vez la funci
on sea correctamente editada y modificada, esta podra invocarse
en Octave como1 :
B = 3; %Numero de bits
S = snr(x, B);

Para verificar que la funcion snr ha sido editada correctamente, utilice la


funci
on check:
check('snr');

Para que la funci


on check funcione correctamente, es necesario que las funci
on digitize haya sido editada con anterioridad correctamente. Si el ejercicio
fue completado con exito, en la pantalla se muestra el mensaje Function snr
seems to be OK :) y se generaran las graficas de la figura 2. En la figura
2a se muestra la distribuci
on de probabilidad del error de cuantizacion para un
cuantificador de 16 bits. De esta figura es posible notar que la distribucion del
error se aproxima a una distribucion uniforme.

3.

Filtrado

El dise
no de filtros FIR mediante el metodo del enventanda (windowing) es
bastante simple y se puede dividir en tres pasos:
1. A partir de las frecuencias de corte deseadas, determinar la respuesta al
impulso h(n) del filtro ideal correspondiente
2. Seg
un las especificaciones de rizado, banda de transicion y atenuacion
deseados, seleccionar la ventana apropiada y determinar su longitud L
3. Multiplicar la ventana del paso anterior con h(n M ), donde M = (L
1)/2
Como resultado de seguir los pasos anteriores, se obtiene la respuesta al
impulso de un filtro FIR. A manera de ilustracion, en este taller vamos a realizar
el dise
no de un filtro FIR pasabajas.
1 Nota:

en Octave el logaritmo en base 10 se calcula con la funci


on log10

SNR

pdf()
200

Experimental
S = 6.02B + 1.76
150

100

50

10

12

14

16

(a)

(b)

Figura 2: Relaci
on se
nal a ruido (SNR). (a) Funcion de distribucion de probabiliadad (PDF) del error de cuantizacion para un cuantificador de 16 bits. (b)
Variaci
on del SNR en funci
on del n
umero de bits. La curva teorica corresponde
a (8)

3.1.

Enventanado

El filtro pasabajas ideal de frecuencia discreta de corte c tiene respuesta al


impulso:
(
sin(c n)
si n 6= 0
(9)
h(n) = c n
si n = 0

La respuesta al impulso de 9 corresponde a un caso ideal pero que, debido


a su duraci
on infinita y no causalidad, no puede implementarse en la practica
para procesar se
nales en tiempo real. Para que el filtro sea realizable, este debe
desplazarse y multiplicarse con una ventana, dando como resultado:
hR (n) = v(n M )h(n M ),

(10)

donde M es un n
umero entero que corresponde a un desplazamiento y v(n) es
una ventana de truncamiento. En este taller, vamos a considerar 5 ventanas:
rectangular, Bartlett, Hanning, Hamming y Blackmann. La secuencia de datos
correspondiente a estas cuantro ventanas se puede generar en Octave mediante
las funciones bartlett, hanning, hamming y blackman, respectivamente.
La longitud L de la ventana se selecciona de tal manera que L = 2M + 1.
Por ejemplo, para generar una ventana tipo Blackman de longitud L = 51, se
ejecutan los comandos:
L = 51;
v = blackman(51);

Ejercicio
Modifique la funci
on getfilter para obtener la respuesta al impulso de
un filtro pasabajas realizable mediante la tecnica del enventanado. La funcion
tiene cuatro entradas y una salida. La primera entrada window corresponde
a una cadena de caracteres con el nombre de la ventana a utilizar. Dicha cadena de caracteres puede ser rectangular, bartlett, hanning,
hamming o blackman. La segunda entrada, L, corresponde a la longitud
de la ventana. La tercera entrada, fc, es la frecuencia de corte en Hertz del
filtro. Esta frecuencia corresponde a la frecuencia deseada en tiempo continuo y
por lo tanto debe ser convertida a frecuencia discreta. Finalmente, la cuarta entrada fs corresponde a la frecuencia de muestreo del sistema discreto. La salida
h corresponde a la respuesta al impulso del filtro pasabajas realizable. Una vez

h(n)

|H()|

25

(a)

(b)

Figura 3: Dise
no de filtros por enventanado. (a) Respuesta al impulso. (b) Respuesta en frecuencia
la funci
on sea correctamente editada y modificada, esta se debera poder invocar
en Octave como:
fs = 200;
%Sampling frequency (200 Hz)
fc = 20;
%Cutoff frequency (20Hz)
L = 51;
%Filter length = 51 samples.
h = getfilter('hanning', L, fc, fs);

En este ejemplo, se genera la respuesta al impulso de un filtro con una


frecuencia de corte f c = 20 Hz, de longitud L = 51 muestras, con una ventana
de Hanning, para un sistema que funciona a f s = 200 Hz.
Para verificar que la funcion getfilter ha sido editada correctamente,
utilice la funci
on check:
check('getfilter');

Si el ejercicio fue completado con exito, en la pantalla se muestra el mensaje


Function getfilter seems to be OK :) y se generaran las graficas de
la figura 3. En la figura 3a se muestra la respuesta al impulso de un filtro
dise
nado mediante enventanado usando una ventana de Hanning de longitud
L = 51. El filtro ha sido dise
nado para tener una frecuencia de corte de f c = 20
Hz y trabajar a una frecuencia de muestreo de f s = 200Hz. De la respuesta en
frecuencia del filtro (figura 3b) se puede observar que la respuesta en frecuencia
es muy cercana a la de un filtro ideal.

3.2.

Especificaciones del filtro

El dise
no de filtros mediante la tecnica de envantanado se reduce a seleccionar
el tipo de ventana y longitud apropiadas para obtener unas especificaciones
dadas. Especficamente, son tres las especificaciones que se tienen en cuenta al
momento de dise
nar un filtro. Las siguientes definiciones hacen referencia a la
figura 4:
Rizado en banda de paso. Se mide en decibelios y se define en funcion
del par
ametro p como:


1 + p
Ap = 20 log
(11)
1 p
Atenuaci
on. Se mide en decibelios y esta en funcion del rizado en la
banda de atenuaci
on:
 
1
As = 20 log
(12)
s
6

1+ p

1 p

As
s

Figura 4: Especificaciones de un filtro. Rizado en la banda de paso p , rizado en


la banda de atenuaci
on s y banda de transicion .
Ventana
Rectangular
Bartlett
Hanning
Hamming
Blackman

rizado (p = s )
0.09
0.05
0.0063
0.0022
0.0022

Transicion
1.8/L
6.1/L
6.2/L
6.6/L
11/L

Atenuacion (As )
21
26
44
53
74

Tabla 2: Caractersticas de las ventanas.


Banda de transici
on. Es el ancho de la transicion de la banda de
paso a la banda de atenuacion.
Dado que cada ventana tiene sus propias caractersticas (ver table 2), esta
debe seleccionarse seg
un las especificaciones del fitro.
A partir de las especificaciones de un filtro: Ap , As y , la ventana y su
longitud se pueden seleccionar siguiendo lo siguientes pasos:
1. Determinar los rizados p y s y seleccionar el mas restrictivo = mn{p , s }
2. Re-calcular la atenuacion del filtro como A = 20 log(1/)
3. De la tabla 2 seleccionar la ventana cuya atenuacion es la mayor y mas
cercana a A.
4. Calcular la longitud de la ventana a partir de la expresion correspondiente
a
Ejercicio 1
Modifique la funci
on getwindow para seleccionar la ventana apropiada
seg
un las especificaciones de un filtro. La funcion tiene dos entradas y una
salida. La primera entrada, Ap corresponde al parametro de rizado en la banda de paso y la segunda entrada, As, corresponde a la atenuacion. La salida
window es una cadena de caracteres con el nombre de la ventana correspondiente seg
un la tabla 2. As, la salida puede tomar solo uno de los siguientes valores:
rectangular, bartlett, hanning, hamming o blackman.
Una vez la funci
on sea correctamente editada y modificada, esta debera poderse
invocar en Octave como:
As = 50;
Ap = 1;
window = getwindow(Ap, As);

Para verificar que la funcion getwindow ha sido editada correctamente,


utilice la funci
on check:
check('getwindow');

Si el ejercicio fue completado con exito, en la pantalla se muestra el mensaje


Function getwindow seems to be OK :)
Ejercicio 2
Modifique la funci
on getlength para determinar la longitud de una ventana a partir del ancho de banda de transicion deseado. La funcion tiene tres
entradas y una salida. La primera entrada, window, es una cadena de caracteres
con el nombre de la ventana. La segunda entrada, delta_f corresponde a la
banda de transici
on en Hertz. Esta banda de transicion se especifica en frecuencias en tiempo continuo y por lo tanto debe ser convertida a frecuencia discreta.
La tercera entrada, fs, corresponde a la frecuencia de muestreo del sistema. La
salida L corresponde a la longitud de la ventana. Con el objetivo de obtener un
filtro FIR tipo I de fase lineal, aseg
urese que el valor de L es impar. Una vez
la funci
on sea correctamente editada y modificada, esta debera poderse invocar
en Octave como:
fs = 200; %Sampling frequency (Hz)
df_s = 10; %Transition band (Hz)
L = getlength('hamming', df_s, fs);

Para verificar que la funcion getwindow ha sido editada correctamente,


utilice la funci
on check:
check('getlength');

Si el ejercicio fue completado con exito, en la pantalla se muestra el mensaje


Function getlength seems to be OK :)

Tension (mV)
0

10

tiempo (s)

tiempo (s)

tiempo (s)

(a)

(b)

(c)

Figura 5: Eliminaci
on de ruido. (a) Se
nal ECG original. (b) Se
nal ECG contaminada con ruido. (c) Se
nal ECG filtrada
Ejercicio opcional
En este ejercicio aplicaremos las funciones desarrolladas anteriormente para
filtrar una se
nal electrocardiografica (ECG) contaminada con ruido. La se
nal en
cuesti
on corresponde a una se
nal ECG de ritmo normal muestreada a 128 Hz.
Para detalles sobre esta se
nal, visitar Physionet2 .
La se
nal original (5a), ha sido contaminada con ruido de alta frecuencia
dando como resultado la se
nal mostrada en la figura 5b. Con el objetivo de
aplicar un filtro de eliminacion de ruido, se dise
nara un filtro pasabajas de
frecuencia de corte 50 Hz. Con este proposito, digite los siguientes comandos:
load ecg
%Load signals
figure
subplot(1,3,1), plot(t, x) %plot original signal
xn = x + 3*n;
%add noise
subplot(1,3,2), plot(t, xn) %plot Noisy signal
Ap = 0.1;
%ripple
As = 50;
%atenuation
fs = 128;
%sampling frequency
fc = 50;
%cut-off frequency
df = 5;
%transition band
w = getwindow(Ap, As);
%get tappering window
L = getlength(w, df, fs);
%get filter length
h = getfilter(w, L, fc, fs); %get impulse response
xf = filter(h, 1, xn);
%filter noisy signal
subplot(1,3,3), plot(t, xf) %plot filtered signal

Si el filtrado es exitoso, el resultado debe ser parecido al de la figura 5c.

Entrega
Para entregar la soluci
on de los ejercicios, comprima los archivos que edito en
un archivo de nombre solucion5.zip. Dicho archivo comprimido s
olo debe
tener los archivos mostrados en la tabla 3, y que han sido editados por usted
durante la realizaci
on de este taller. El archivo comprimido debe ser subido en
el portal del curso en el lugar correspondiente y antes de la fecha lmite.

2 Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE,
Moody GB, Peng C-K, Stanley HE. PhysioBank, PhysioToolkit, and PhysioNet: Components
of a New Research Resource for Complex Physiologic Signals. Circulation 101(23):e215-e220
Circulation Electronic Pages. 2000 (June 13)

No.
1
2
3
4
5
6

Archivo
energy.m
digitize.m
snr.m
getwindow.m
getlength.m
getfilter.m

puntos
8
8
10
10
12
12

Tabla 3: Lista de archivos a entregar. Los archivos deben comprimirse en un


archivo de nombre solucion4.zip

10

S-ar putea să vă placă și