Universidad Industrial de Santander
Escuela de Ingenierı́as Eléctrica, Electrónica y de Telecomunicaciones
Taller 1: Digitalización y sistemas básicos
Introducción
El objetivo de este taller es tener un primer contacto con la plataforma de
programación Matlab y utilizarla para implementar nuestras primeras tareas
de procesamiento de señales y algunos sistemas discretos básicos. Este taller
viene con un paquete de archivos, files.zip, que se pueden descargar desde
el portal del curso. Los archivos en este paquete le permitirán realizar el taller y
verificar sus resultados. En la tabla 1, puede encontrar una lista de los archivos
contenidos en el paquete.
Archivo Descripción
energy.m Funcion para calcular la energı́a de una señal
digitize.m Función para cuantizar una señal
snr.m Función para calcular la relación señal a ruido de una
señal cuantizada
example.m(*) Ejemplo con la implementación de un sistema slapback
slapback.m Funcion para la implementación del sistema slapback
reverb.m Función para la implementación del sistema echo
kstrong.m Función para implementar el algoritmo de Karplus-
Strong
hello.wav(*) Audio usado para probar los sistemas slapback y reverb
Tabla 1: Archivos en el paquete files.zip. Los archivos marcados con (*) no
deben ser modificados por el estudiante y son suministrados para verificar la
solución de los ejercicios.
Importante: Una vez descargado el paquete de archivos, descomprı́malos
e inicie una sesión de Matlab cuyo directorio de trabajo sea la carpeta con los
archivos descomprimidos. Para esto, puede usar el comando cd de Matlab. Por
ejemplo, si los archivos descomprimidos en su PC se encuentran en la dirección
C:\Documents\files, entonces al iniciar Matlab debe escribir el comando:
cd('C:\Documents\files')
1. Energı́a
Un concepto fundamental en procesamiento de señales y que es de gran
utilidad en diferentes contextos es el concepto de energı́a. En este taller, vamos
a utilizar la energı́a junto con el concepto de relación señal a ruido para medir
los efectos de la cuantización durante el proceso de digitalización. La energı́a de
una señal se define como:
X∞
E= |x(n)|2 (1)
n=−∞
1
Ejercicio 1
Modifique el archivo energy.m para que permita el cálculo de la energı́a de
una señal. La función deberá 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 energı́a de dicha secuencia. Para verificar el funcionamiento de la solución,
intente reproducir los siguientes comandos en el prompt de Matlab:
x = [1,2,3,4,5];
E = energy(x);
En las lı́neas anteriores, la variable E deberı́a corresponder a la energı́a de
la secuencia x, tal que E = 55.
2. Cuantización de una señal
La cuantización es el proceso que tiene lugar cuando una secuencia discreta
es digitalizada para su representación en un sistema de procesamiento digital.
Usando la notación 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 cuantización.
Especı́ficamente, la cuantización consiste en representar los valores de una
señal discreta usando un número finito N de valores separados una distancia ∆.
Por un lado, el número de valores que se puede utilizar para representar una
señal digitalizada depende a su vez del número de bits B del sistema:
N = 2B (3)
Por otro lado, la distancia de separación, o paso de cuantización, depende
del rango dinámico del conversor χ:
χ
∆= (4)
N −1
Para minimizar el impacto del proceso de cuantización en la digitalización de
una señal, el conversor AD se diseña de tal manera que su rango dinámico coin-
cida con el rango de la señal de entrada, tal que χ = | máx{x(n)} − mı́n{x(n)}|.
2.1. Cuantización uniforme
Existen tres tipos comunes de cuantización uniforme: la cuantización por
redondeo, por redondeo hacia abajo y por redondeo hacia arriba. Estos esquemas
de cuantización difieren en la manera en que se calcula el valor cuantizado
de cada muestra de la secuencia de entrada. En la cuantización uniforme por
redondeo, por ejemplo, el i-ésimo nivel de cuantización corresponde a:
xi = xmin + ∆i, (5)
donde xmin es el mı́nimo valor del rango dinámico y i = 0, 1, 2, · · · , N − 1.
En la cuantización uniforme, cada valor de la señal de entrada es represen-
tado por el nivel en (5) más cercano al valor original, tal que Q{x(n)} = xi si
xi − 0.5∆ ≤ x(n) < xi + 0.5∆.
2
7 1
x(n)
6
Q{x(n)}
5
Q{x(n)}
4
0
3
2
1
-1
1 2 3 4 5 6 7 0 1
x(n) x(n)
(a) (b)
Figura 1: Cuantización uniforme por redondeo. (a) Relación entrada-salida. (b)
Cuantización de una señal sinusoidal usando un conversor de 3 bits. (b) Cuan-
tización de una señal sinusoidal usando un coversor de 16 bits
Ejercicio 2
Modifique el archivo digitize.m para que permita la digitalización de una
secuencia discreta mediante cuantización por redondeo. La función tendrá dos
entradas y una salida. La primera entrada, x, corresponde a un vector con una
secuencia discreta. La segunda entrada, B, corresponde al número de bits del
sistema de representación. La salida, xQ, corresponderá a la versión cuantizada
de la entrada, mediante cuantización uniforme por redondeo. Ajuste el rango
dinámico del cuantizador de tal forma que coincida con el rango de la secuencia
de entrada. Los niveles de cuantización se deben determinar según 5.
Para verificar que la función digitize ha sido editada correctamente, in-
tente reproducir las siguientes instrucciones en el prompt de Matlab:
x = linspace(0, 1, 500);
nbits = 3;
xQ = digitize(7*x, nbits);
subplot(121), plot(7*x, xQ), xlabel('x(n)'), ylabel('Q\{x(n)\}')
y = sin(2*pi*x);
yQ = digitize(y, nbits);
subplot(122), plot(x, y, x, yQ), legend({'x(n)','Q\{x(n)\}'})
Las lı́neas de código anteriores corresponden a la cuantización de una señal
lineal continua x ∈ [0, 7] y una senoidal y ∈ [0, 1] con 3 bits de representación (8
niveles). Para la primera señal, x, los niveles de cuantización deberı́an coincidir
con los enteros 0, 1, 2, · · · , 7.
2.2. Ruido de cuantización
Con el objetivo de medir los efectos de la cuantización sobre la calidad de
una señal, una señal cuantizada Q{x(n)} puede modelarse como la suma de la
señal original mas una componente de ruido de cuantización ν:
Q{x(n)} = x(n) + ν(n) (6)
Concretamente, una medida de la calidad de una señal ampliamente utilizada
corresponde a la relación señal a ruido (SNR por sus siglas en inglés). La relación
señal a ruido mide la relación entre la potencia de la señal y la potencia de la
componente de ruido:
Ex
SNR (dB) = 10 log , (7)
Eν
3
80
SNR (dB)
60
40
20
0
3 4 5 6 7 8 9 10 11 12 13 14 15 16
B (bits)
Figura 2: Variación del SNR en función del número de bits
donde Ex es la energı́a de la señal original antes de la cuantización y Eν es la
energı́a de la señal de ruido de cuantización.
Ejercicio 3
Modifique la función snr.m para que permita calcular la relación señal a
ruido entre una señal y la componente de ruido de cuantización. La función 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úmero de bits
con los que se va a representar la señal de entrada. La salida, S, corresponde
al SNR de la señal cuantizada usando cuantización uniforme por redondeo.
Para resolver este punto, puede usar las funciones desarrolladas en los puntos
anteriores, energy y digitize, para cuantizar la señal de entrada, calcular
la señal de error usando (6), y determinar el SNR de la señal cuantizada usando
la ecuación (7)1 . Una vez la función sea correctamente editada y modificada,
compruebe su funcionamiento intentando reproducir los siguientes comandos:
x = linspace(0, 1, 500);
y = sin(2*pi*x);
B = 3:16;
S = zeros(length(B), 1);
for n = 1:length(B)
S(n) = snr(y, B(n));
end
figure, plot(B, S), xlabel('B (bits)'), ylabel('SNR (dB)')
Las instrucciones anteriores toman una señal senoidal y la cuantizan con
diferentes niveles de precisión. Especı́ficamente, el número de bits aumenta des-
de B = 3 hasta B = 16. La Fig. 2 muestra el SNR en función del número
de bits. Claramente, a medida que aumenta la precisión de la representación,
aumenta también la relación señal a ruido. Para N = 16 bits, la SNR alcanza
aproximadamente 100 dB.
3. Sistemas básicos
3.1. Sistema Slapback
El efecto de audio conocido como slapback corresponde a un sistema lineal
e invariante al desplazamiento discreto descrito por la ecuación en diferencias:
y(n) = x(n) + αx(n − M ), (8)
donde α ∈ R y M ∈ Z son constantes.
A manera de ejemplo, en el paquete de archivos se encuentra la función
example.m con un ejemplo de implementación de un sistema slapback para
cuando M = 5 y α = 0.5. Dicha función toma como entrada una secuencia x y
1 Nota: en Matlab el logaritmo en base 10 se calcula con la función log10
4
genera la salida y resolviendo interativamente la ecuación en diferencias de (8).
Puede usar este ejemplo como referencia para implementar una solución más
general del slapback en el siguiente ejercicio.
Ejercicio 4
El ejercicio consiste en editar la función slapback.m para poder resolver
la ecuación en diferencias en (8). La función consta de tres entradas: un vector
x ∈ RN con la secuencia de entrada del sistema, un número decimal alpha con
el valor de la constante α y un entero M con el retardo del sistema. La salida
debe ser un vector y del mismo tamaño que x. Recuerde que para resolver este
ejercicio, puede tomar como punto de partida el código en el archivo example.m
y modificarlo a conveniencia.
Una vez haya completado el ejercicio, a manera de ejemplo, para procesar
un archivo de audio y aplicarle el efecto del sistema slapback, puede ejecutar
los siguientes comandos. Nota: para poder escuchar el resultado de los siguien-
tes comandos, asegúrese de que dispone de un sistema para reproducir audio
(audı́fonos o parlantes) conectados al PC.
[x, fs] = audioread('hello.wav'); %Cargar audio y frecuencia de ...
muestreo
alpha = 0.8;
M = 2400;
y = slapback(x, alpha, M);
soundsc(x, fs); %reproducir audio original
soundsc(y, fs); %reproducir audio con efecto slapback
Como resultado de esta secuencia de comandos, podrá escuchar el efecto del
sistema slapback en una señal de audio. Puede repetir el experimento anterior
cambiando los valores de α y de M para comprobar qué resultado tiene el efecto
en la señal de audio.
3.2. Sistema reverberation
El efecto de audio conocido como reverberation, o simplemente eco, corres-
ponde a un sistema LI discreto descrito por la ecuación en diferencias:
y(n) = x(n) + αy(n − M ), (9)
donde α y M son constantes.
Ejercicio 5
El ejercicio consiste en editar la función reverb.m para poder resolver la
ecuación en diferencias en (9). La función consta de tres entradas: un vector x
con la secuencia de entrada del sistema, un número decimal alpha con el valor
de la constante α y un entero M con el retardo del sistema. La salida debe ser
un vector y del mismo tamaño que x con respuesta del sistema.
Una vez haya completado el ejercicio, para procesar un archivo de audio y
aplicarle el efecto del sistema reverb, puede ejecutar los siguientes comandos:
[x, fs] = audioread('hello.wav');
alpha = 0.5;
M = 9600;
y = reverb(x, alpha, M);
soundsc(x, fs); %audio original
soundsc(y, fs); &audio procesado
Como resultado de esta secuencia de comandos, se generará un archivo de
audio denominado hello_reverb.wav con la señal de audio procesada. Puede
5
+
Figura 3: Sistema para la implementación del algoritmo Karplus-Strong. El
parámetro N depende de la frecuencia de la nota que se quiere simular
reproducir este archivo y compararlo con el original, hello.wav para apreciar
el efecto.
3.3. Algoritmo Karplus-Strong
En 1983, Alex Strong and Kevin Karplus publicaron un algoritmo simple
pero bastante efectivo para simular el sonido de una cuerda pulsada, como por
ejemplo un piano2 . La Fig. 3 muestra un diagrama de bloques para la imple-
mentación del algoritmo Karplus-Strong.
Para simular el sonido de una cuerda que está entonando una nota asociada
a la frecuencia f0 y que es muestreada a una frecuencia Fs , el algoritmo Karplus-
Strong funciona de la siguiente manera:
1. Se calcula el retardo en muestras N como:
N = Fs /f0 − 1/2 (10)
2. Se genera una secuencia x con valores aleatorios de 1 o -1 y que tenga
longitud N
3. Se genera la secuencia y a partir del diagrama de bloques en la Fig. 3
usando como entrada la secuencia x.
Ejercicio 6
El ejercicio consiste en editar la función kstrong.m para simular el sonido
de una cuerda mediante el algoritmo de Karplus-Strong. La función tiene dos
entradas: la frecuencia de la nota que se quiere simular f0 y la frecuencia de
muestreo Fs. Ambas frecuencias se miden en Hertz. La salida debe ser una se-
cuencia y correspondiente a una simulación de 5 segundos de duración obtenida
mediante el algoritmo de Karplus-Strong. Nota: teniendo en cuenta que en el
paso 1 del algoritmo de Karplus-Strong se pueden obtener valores no enteros de
desplazamiento, redondee el valor de M obtenido al entero más cercano.
Una vez haya completado el ejercicio, intente reproducir los siguientes co-
mandos para simular el sonido de una cuerda entonando la nota A1 (primera
de LA), la cual tiene una frecuencia de 55 Hz.
f0 = 55; %frecuencia de A1
Fs = 16000; %frecuencia de muestreo
y = kstrong(f0, Fs);
soundsc(y, Fs); %audio original
2 Kevin Karplus, Alex Strong, Digital Synthesis of Plucked String and Drum Timbres,
Computer Music Journal (MIT Press) 7(2), 1983
6
Nota Frecuencia (Hz)
Do (C) 261.626
Re (D) 293.665
Mi (E) 329.628
Fa (F) 349.228
Sol (G) 391.995
La (A) 440.000
Si (B) 493.883
Tabla 2: Frecuencias de las notas musicales en la Octava 4
Como resultado de esta secuencia de comandos, deberı́a poder escuchar el
sonido de la nota correspondiente. Para experimentar con diferentes notas, la
tabla 2 incluye las frecuencias asociadas a diferentes notas musicales en la cuarta
octava.
Entrega
Para entregar la solución de los ejercicios, comprima los archivos que editó
en un archivo de nombre solucion.zip. Dicho archivo comprimido sólo debe
tener los archivos mostrados en la tabla 3, y que han sido editados por usted
durante la realización de este taller. El archivo comprimido debe ser subido en
el portal del curso en el lugar correspondiente y antes de la fecha lı́mite.
No. Archivo Ponderación
1 energy.m 5%
2 digitize.m 20 %
3 snr.m 5%
4 slapback.m 20 %
5 reverb.m 20 %
6 kstrong.m 30 %
Tabla 3: Lista de archivos a entregar. Los archivos deben comprimirse en un
archivo de nombre solucion.zip.