Está en la página 1de 22

Introducción

Durante las últimas décadas, el campo del procesamiento de


señales digitales (DSP) se ha vuelto importante, tanto teórica como
tecnológicamente.
Una de las principales razones de su éxito en la industria es el
desarrollo y uso de software y hardware de bajo costo.
Las nuevas tecnologías y aplicaciones en varios campos ahora
están aprovechando los algoritmos DSP. Esto conducirá a una
mayor demanda de ingenieros electrónicos eléctricos e
informáticos con experiencia en DSP.
Por lo tanto, es necesario hacer que DSP sea una parte integral de
cualquier plan de estudios de ingeniería de estas especialidades.

Hace dos décadas se empezó a impartir cursos introductorios sobre


DSP principalmente en el nivel de posgrado. Se complementó con
ejercicios de computadora sobre diseño de filtros, estimación de
espectro y temas relacionados utilizando mainframe (o mini)
computadoras. Sin embargo, avances considerables en
computadoras personales y el software durante las últimas dos
décadas ha hecho necesario introducir un curso de DSP a los
estudiantes universitarios de pregrado.

Dado que las aplicaciones DSP son principalmente algoritmos que


se implementan en un procesador DSP o en software, se requiere
una buena cantidad de programación.
Usando software interactivo, como MATLAB, ahora es posible
poner más énfasis en aprender conceptos nuevos y difíciles que en
algoritmos de programación.
Se pueden discutir interesantes ejemplos prácticos y se pueden
explorar problemas útiles.

Se debe considerar a MATLAB como herramienta de


programación principalmente debido a su amplia disponibilidad en
plataformas informáticas en muchas universidades de todo el
mundo.
Además, hace varios años que se encuentra disponible una versión
para estudiantes de bajo costo de MATLAB, lo que la coloca entre
los productos de software menos costosos para fines educativos.
Se debe considerar a MATLAB como una caja de herramientas de
programación y computación que contiene varias herramientas
(una especie de súper calculadora con varias teclas) que se pueden
utilizar para explorar y resolver problemas y, por lo tanto, mejorar
el proceso de aprendizaje con fines educativos.

Suponemos que el estudiante está familiarizado con MATLAB y


está actualmente tomando un curso en DSP.
Se proporciona herramientas analíticas básicas necesarias para
procesar señales del mundo real (también conocidas como señales
analógicas) utilizando técnicas digitales.
Se tratarán principalmente señales y sistemas de tiempo
discreto, que se analizan tanto en el dominio del tiempo como
en el de la frecuencia.

El análisis y diseño de estructuras de procesamiento llamadas


filtros y analizadores de espectro se encuentran entre los aspectos
más importantes de DSP y se tratarán con gran detalle después, así
como también dos temas importantes sobre los efectos de la
longitud de palabras finitas y la conversión de la tasa de muestreo.

Los temas más avanzados del procesamiento de señales moderno,


como el procesamiento de señales estadístico y adaptativo,
generalmente se tratan en un curso de posgrado.

Se espera que la experiencia adquirida con este curso introductorio


permita a los estudiantes abordar temas avanzados con mayor
facilidad y comprensión.
Descripción general del DSP
En este mundo moderno estamos rodeados de todo tipo de señales
en diversas formas. Algunas de las señales son naturales, pero la
mayoría de las señales son artificiales. Algunas señales son
necesarias (habla), otras son agradables (música), mientras que
muchas son indeseables o innecesarias en una situación
determinada.

En un contexto de ingeniería, las señales son portadoras de


información, tanto útil como no deseada. Por lo tanto, extraer o
mejorar la información útil de una combinación de información
contradictoria es la forma más sencilla de procesamiento de
señales.

De manera más general, el procesamiento de señales es una


operación diseñada para extraer, mejorar, almacenar y transmitir
información útil. La distinción entre información útil y no deseada
suele ser tanto subjetiva como objetiva. Por tanto, el procesamiento
de señales tiende a depender de la aplicación.

¿CÓMO SE PROCESAN LAS SEÑALES?

Las señales que encontramos en la práctica son en su mayoría


señales analógicas.

Estas señales, que varían continuamente en tiempo y amplitud, se


procesan mediante redes eléctricas que contienen elementos de
circuitos activos y pasivos.
Este enfoque se conoce como procesamiento de señales analógicas
(ASP), por ejemplo, receptores de radio y televisión.

También se pueden procesar usando hardware digital que contenga


sumadores, multiplicadores y elementos lógicos o usando
microprocesadores para propósitos especiales.
Sin embargo, es necesario convertir las señales analógicas en una
forma adecuada para hardware digital. Esta forma de señal se llama
señal digital.
Toma uno de un número finito de valores en instancias específicas
en el tiempo y, por lo tanto, puede representarse mediante números
binarios o bits.
El procesamiento de señales digitales se llama DSP; que en forma
de diagrama de bloques está representado por

• PrF: Este es un prefiltro o un filtro antialiasing, que


acondiciona la señal analógica para evitar el aliasing.
• ADC: este es un convertidor de analógico a digital, que
produce un flujo de números binarios a partir de señales
analógicas.
• Procesador de señal digital: este es el corazón de DSP y
puede representar una computadora de uso general o un
procesador de propósito especial, o hardware digital, etc.
• DAC: esta es la operación inversa al ADC, llamado
convertidor de digital a analógico, que produce una forma
de onda escalonada a partir de una secuencia de números
binarios, un primer paso hacia la producción de una señal
analógica.
• PoF: Este es un postfiltro para suavizar la forma de onda de
escalera en la señal analógica deseada.

A partir de los dos enfoques anteriores para el procesamiento de


señales, analógico y digital, el enfoque DSP es el más complicado,
ya que contiene más componentes que el ASP de "apariencia más
simple". Por lo tanto, uno podría preguntarse: ¿Por qué procesar
señales digitalmente? La respuesta radica en las muchas ventajas
que ofrece DSP.
VENTAJAS DE DSP SOBRE ASP

Un gran inconveniente de ASP es su alcance limitado para realizar


aplicaciones complicadas de procesamiento de señales. Esto se
traduce en falta de flexibilidad en el procesamiento y complejidad
en los diseños de sistemas. Todos estos generalmente conducen a
productos costosos.

Por otro lado, utilizando un enfoque DSP, es posible convertir una


computadora personal económica en un potente procesador de
señales. Algunas ventajas importantes de DSP son estas:
1. Los sistemas que utilizan el enfoque DSP se pueden
desarrollar utilizando software que se ejecute en una
computadora de propósito general. Por lo tanto, DSP es
relativamente conveniente de desarrollar y probar, y el
software es portátil.
2. Las operaciones de DSP se basan únicamente en adiciones y
multiplicaciones, lo que conduce a una capacidad de
procesamiento extremadamente estable, por ejemplo,
estabilidad independiente de la temperatura.
3. Las operaciones de DSP pueden modificarse fácilmente en
tiempo real, a menudo mediante simples cambios de
programación o recargando los registros.
4. DSP tiene un costo menor debido a la tecnología VLSI, que
reduce los costos de memorias, puertas, microprocesadores,
etc.

La principal desventaja de DSP es la velocidad limitada de


operaciones, limitada por el hardware DSP, especialmente en
señales a frecuencias muy altas.

Principalmente debido a sus ventajas, DSP se está convirtiendo en


la primera opción en muchas tecnologías y aplicaciones, como
electrónica de consumo, comunicaciones, teléfonos inalámbricos e
imágenes médicas.
DOS CATEGORÍAS IMPORTANTES DE DSP
La mayoría de las operaciones de DSP se pueden clasificar como
tareas de análisis de señales o tareas de filtrado de señales:

Análisis de señales Esta tarea se ocupa de la medición de las


propiedades de las señales.
Generalmente es una operación en el dominio de la frecuencia.
Algunas de sus aplicaciones son
• análisis de espectro (frecuencia y / o fase)
• reconocimiento de voz
• verificación del hablante
• detección de objetivos

Filtrado de señales Esta tarea se caracteriza por la situación de


entrada de señal de salida. Los sistemas que realizan esta tarea
generalmente se denominan filtros.
MATLAB para DSP
MATLAB es un sistema interactivo basado en matrices para la
visualización y el cálculo numérico científico y de ingeniería. Su
fortaleza radica en el hecho de que los problemas numéricos
complejos se pueden resolver fácilmente y en una fracción del
tiempo de lo que requiere un lenguaje de programación como
Fortran o C.

También es poderoso en el sentido de que, con su capacidad de


programación relativamente simple, MATLAB puede ampliarse
fácilmente para crear nuevos comandos y funciones.
MATLAB está disponible en varios entornos informáticos: PC
ejecutando todas las versiones de Windows, Apple Macs con OS-
X, UNIX / Linux, estaciones de trabajo y computadoras paralelas.

El programa básico de MATLAB es mejorado aún más por la


disponibilidad de numerosas cajas de herramientas (una colección
de funciones especializadas en un tema específico) a lo largo de los
años.

Además del producto básico de MATLAB, se requiere la caja de


herramientas de procesamiento de señales (caja de herramientas
SP).

Primero se realizará una breve revisión de MATLAB.

Para una discusión más detallada basada en tutoriales, los


estudiantes y lectores nuevos en MATLAB también deben
consultar varios libros de referencia excelentes disponibles en la
literatura, incluidos [10], [7] y [21]. La información proporcionada
en todas estas referencias, junto con la función de ayuda en línea
de MATLAB, suele ser suficiente para que los lectores puedan
avanzar en el curso.

El mejor enfoque para familiarizarse con MATLAB es abrir una


sesión de MATLAB y experimentar con varios operadores,
funciones y comandos hasta que se comprendan su uso y
capacidades. Luego, se puede progresar a la escritura de scripts y
funciones simples de MATLAB para ejecutar una secuencia de
instrucciones para lograr un objetivo analítico.

[10] B. R. Hunt, R. L. Lipsman, J. M. Rosenberg, and Kevin R.


Coombes. A Guide to MATLAB: For Beginners and Experienced
Users. Cambridge University Press, New York, NY, 2001.

[7] D. Hanselman and B. Littlefield. Mastering MATLAB 7.


Pearson/Prentice Hall, Englewood Cliffs, NJ, 2005.

[21] R. Pratap. Getting Started with MATLAB7: A Quick


Introduction for Scientists and Engineers. Oxford University
Press, USA, 2005.

EMPEZANDO
La interacción con MATLAB es a través de la ventana de
comandos de su interfaz gráfica de usuario (GUI).
En la ventana de comandos, el usuario escribe instrucciones
MATLAB, que se ejecutan instantáneamente, y los resultados se
muestran en la ventana.
En la ventana de comandos de MATLAB, los caracteres “>>”
indican el indicador que está esperando que el usuario escriba un
comando para ejecutarlo. Por ejemplo,

>> comando;
significa que se ha emitido un comando de instrucción en el
indicador de MATLAB.

Si se coloca un punto y coma (;) al final de un comando, toda la


salida de ese comando se suprime. Se pueden colocar varios
comandos en la misma línea, separados por punto y coma;
Los comentarios se marcan con el signo de porcentaje (%), en
cuyo caso MATLAB ignora todo lo que esté a la derecha del
signo. Los comentarios permiten al lector seguir el código más
fácilmente.

El manual de ayuda integrado proporciona ayuda para cada


comando a través del fragmento

>> comando de ayuda;

que proporcionará información sobre las entradas, salidas, uso y


funcionalidad del comando. Se puede obtener una lista completa
de comandos ordenados por funcionalidad escribiendo help en el
indicador.

Hay tres elementos básicos en MATLAB: números, variables y


operadores. Además, los signos de puntuación (,, ;, :, etc.) tienen
significados especiales.

Números MATLAB es un motor numérico de alta precisión y


puede manejar todo tipo de números, es decir, enteros, números
reales, números complejos, entre otros, con relativa facilidad.
Por ejemplo, el número real 1,23 se representa simplemente 1,23
mientras que el número real 4,56 × 10^7 se puede escribir como
4,56e7.

El número imaginario √ −1 se denota por 1i o 1j, aunque aquí


usaremos el símbolo 1j. Por tanto, el número complejo cuya parte
real es 5 y cuya parte imaginaria es 3 se escribirá como 5 + 3j.

Otras constantes asignadas previamente por MATLAB son pi para


π, inf para ∞ y NaN para no un número (por ejemplo, 0/0). Estas
constantes asignadas previamente son muy importantes y, para
evitar confusiones, no deben redefinirse por los usuarios.

Variables En MATLAB, que son las siglas de MATrix


LABoratory, la variable básica es una matriz o un arreglo. Por
tanto, cuando MATLAB opera sobre esta variable, opera sobre
todos sus elementos. Esto es lo que lo convierte en un motor
potente y eficiente. MATLAB ahora admite matrices
multidimensionales; discutiremos sólo matrices de números de
hasta dos dimensiones.

1. Matriz: Una matriz es un conjunto bidimensional de números


dispuestos en filas y columnas. Los números pueden tener
valores reales o complejos.
2. Arreglo: este es otro nombre para matriz. Sin embargo, las
operaciones en arreglos se tratan de manera diferente a las
operaciones en matrices. Esta diferencia es muy importante
en la implementación.

Los siguientes son cuatro tipos de matrices (o arreglos):

• Escalar: esta es una matriz de 1 × 1 o un número único que


se indica con el símbolo de variable, es decir, tipo de letra
cursiva en minúscula como:
a = a11

• Vector de columna: se trata de una matriz (N × 1) o una


disposición vertical de números. Se denota con el símbolo del
vector, es decir, tipografía en negrita y minúscula como:

Un vector típico en álgebra lineal se denota mediante el


vector columna.

• Vector de fila: es una matriz (1 × M) o una disposición


horizontal de números. También se denota con el símbolo del
vector, es decir,
Una señal de tiempo discreto unidimensional se representa
típicamente mediante un arreglo como un vector de fila.

• Matriz general: este es el caso más general de una matriz (N


× M) y se denota con el símbolo de matriz, es decir, tipografía
en negrita mayúscula como:

Esta disposición se usa típicamente para señales o imágenes


bidimensionales de tiempo discreto.

MATLAB no distingue entre un arreglo y una matriz, excepto


para las operaciones. Las siguientes asignaciones denotan tipos de
matriz indicados en MATLAB:
a = [3] es un escalar,
x = [1,2,3] es un vector de fila,
y = [1; 2; 3] es un vector de columna y
A = [1,2,3; 4,5,6] es una matriz.
MATLAB proporciona muchas funciones útiles para crear
matrices especiales.
Estos incluyen zeros (M, N) para crear una matriz de todos los
ceros, ones (M, N) para crear una matriz de todos unos, eye (N)
para crear una matriz de identidad N × N, etc.

Consulte el manual de ayuda de MATLAB para obtener una lista


completa.
Operadores MATLAB proporciona varios operadores aritméticos
y lógicos, algunos de los cuales siguen. Para obtener una lista
completa, debe consultar el manual de ayuda de MATLAB.
= asignación == igualdad
+ suma - resta o menos
* multiplicación. . * multiplicación de arreglo
^ potencia. . ^ potencia de arreglo
/ division . / division de areglo
<> operadores relacionales & AND lógico
| OR LÓGICO ~ NOT LÓGICO
' Transpuesta . ' transpuesta de arreglo

Ahora proporcionamos una explicación más detallada sobre


algunos de estos operadores.

OPERACIONES DE MATRIZ
A continuación, se muestran las operaciones más útiles e
importantes sobre matrices.

• Suma y resta de matrices: son operaciones sencillas que


también se utilizan para la suma y resta de matrices. Se debe
tener cuidado de que los dos operandos de la matriz tengan
exactamente el mismo tamaño.
• Conjugación de matrices: esta operación es significativa
solo para matrices de valor complejo. Produce una matriz en
la que se niegan todas las partes imaginarias. Se denota por A
∗ en análisis y por conj (A) en MATLAB.
• Transposición de matriz: esta es una operación en la que
cada fila (columna) se convierte en columna (fila). Sea X una
matriz (N × M). Entonces:
es una matriz (M × N). En MATLAB, esta operación tiene
una característica. Si la matriz tiene un valor real, entonces la
operación produce una transposición de una compleja
conjugada. Para obtener solo la transposición, usamos la
operación de arreglo de conjugación, es decir,
A .' hará solo la transposición.
• Multiplicación por un escalar: este es una sencilla y
directa operación en la que cada elemento de una matriz se
escala mediante una constante, es decir,

ab ⇒ a * b (escalar)
ax ⇒ a * x (vector o arreglo)
aX ⇒ a * X (matriz)

Esta operación también es válida para un arreglo escalado por


una constante.

• Multiplicación vector-vector: en esta operación hay que


tener cuidado sobre las dimensiones de la matriz para evitar
resultados no válidos. La operación produce un escalar o una
matriz. Sea x un vector (N × 1) e y un vector (1 × M).
Entonces

produce una matriz. Si M = N, entonces


• Multiplicación matriz-vector: si la matriz y el vector son
compatibles (es decir, el número de columnas de la matriz es
igual número de filas del vector ), entonces esta operación
produce un vector columna:

• Multiplicación matriz-matriz: Finalmente, si dos matrices


son compatibles, entonces su producto está bien definido. El
resultado también es una matriz con el número de filas
igual al de la primera matriz y el número de columnas
igual al de la segunda matriz. Tenga en cuenta que el
orden en la multiplicación de matrices es muy importante.

Operaciones de ARREGLOS

Estas operaciones tratan las matrices como arreglos. También se


conocen como operaciones con puntos porque los operadores
aritméticos tienen como prefijo un punto (.).
Es decir: . *, . / o . ^.

• Multiplicación de arreglos: esta es una operación de


multiplicación de elemento por elemento. Para que sea una
operación válida, ambas matrices deben tener el mismo
tamaño. Así tenemos

x.*y → Arreglo de una dimensión


X.*Y → Arreglo de dos dimensiones.

• Exponenciación con un arreglo: en esta operación, un


escalar (valor real o complejo) se eleva a la potencia igual a
cada elemento del arreglo, es decir,
es un arreglo de (N × 1), mientras que

es un arreglo (N × M).

• Transposición de un arreglo: como se explicó, la operación


A .' produce la transposición de un arreglo de valor real o
complejo A

Operaciones de indexación

MATLAB proporciona operaciones de indexación de matrices


muy útiles y potentes mediante el operador (:). Puede usarse para
generar secuencias de números, así como para acceder a ciertos
elementos de fila / columna de una matriz. Usando la expresión x
= [a: b: c], podemos generar números de a a c en incrementos de b.
Si b es positivo (negativo), obtenemos valores crecientes
(decrecientes) en la secuencia x.

La expresión x (a: b: c) accede a elementos de x comenzando con


el índice a en los pasos de b y terminando en c. Se debe tener
cuidado de utilizar valores enteros para elementos de indexación.
De manera similar, el operador: se puede usar para extraer una
submatriz de una matriz. Por ejemplo, B = A (2: 4,3: 6) extrae una
submatriz de 3 × 4 que comienza en la fila 2 y la columna 3.

Otro uso del operador “:” es para formar vectores de columna a


partir de vectores de fila o matrices. Cuando se usa en el lado
derecho del operador de igualdad (=), la expresión x = A (:) forma
un vector de columna larga x de elementos de A concatenando
todas sus columnas. De manera similar, x = A (:, 3) forma un vector
x de la tercera columna de A.

Sin embargo, cuando se usa en el lado derecho del operador =, la


expresión A (:) = x reformatea los elementos de x en un tamaño
predefinido de A.

Control-Flow

MATLAB proporciona una variedad de comandos que nos


permiten controlar el flujo de comandos en un programa. La
construcción más común es la estructura if-elseif-else. Con estos
comandos podemos permitir que se ejecuten diferentes bloques de
código dependiendo de alguna condición.

El formato de esta construcción es:

if condition1
comando1
elseif condition2
comando2
else
comando3
end

que ejecuta sentencias en comando1 si se satisface la condición 1;


de lo contrario, se ejecutan las declaraciones en comando 2 si se
satisface la condición 2, o finalmente las declaraciones en comando
3.
Otra construcción de control de flujo común es el bucle for..end.
Este es simplemente un ciclo de iteración que le dice a la
computadora que repita alguna tarea un número determinado de
veces. El formato de un bucle for..end es:

For índice = valores


declaraciones del programa
:
End

Aunque los bucles for..end son útiles para procesar datos dentro de
matrices mediante el uso de la variable de iteración como índice en
la matriz, siempre que sea posible, el usuario debe intentar utilizar
las matemáticas de matriz completa de MATLAB.
Esto resultará en programas más cortos y un código más eficiente.
En algunas situaciones, el uso del bucle for..end es inevitable.
Primeros Scripts
Ejemplo 1:

Considerar la siguiente suma de funciones sinusoidales:

Usando MATLAB, queremos generar muestras de x (t) en


instantes de tiempo
0: 0,01: 1.

Se discutirán 2 desarrollos

En el desarrollo matricial, se usará la multiplicación matriz-


vector, en la que MATLAB es muy eficiente. Para fines de
demostración, considere solo cuatro valores para t = [t1, t2, t3,
t4]. Entonces:
Pueden ser escritos en forma matricial como:

o después de tomar la transposición

Por lo tanto, el código MATLAB es:

>> t = 0:0.01:1; k = 1:2:5;


>> xt = (1./k)*sin(2*pi*k’*t);
Tenga en cuenta el uso de la división de matriz (1./k) para generar
un vector de fila y multiplicaciones de matriz para implementar
todas las demás operaciones.

Este es el código más compacto y la ejecución más eficiente en


MATLAB, especialmente cuando el número de términos
sinusoidales es muy grande.
Scripts y Funciones
MATLAB es conveniente en el modo de comando interactivo si
queremos ejecutar pocas líneas de código. Pero no es eficiente
si queremos escribir código de varias líneas que queremos
ejecutar repetidamente o si queremos usar el código en varios
programas con diferentes valores de variable.

MATLAB proporciona dos construcciones para este propósito.

Scripts
Esta primera construcción se puede lograr utilizando el llamado
modo de operación de bloque. En MATLAB, este modo se
implementa mediante un archivo de secuencia de comandos
llamado archivo m (con una extensión .m), que es solo un archivo
de texto que contiene cada línea del archivo como si las hubiera
escrito en el símbolo del sistema.

Estos scripts se crean utilizando las funciones integradas de


MATLAB editor, que también proporciona colores y sangrías
sensibles al contexto para cometer menos errores y facilitar la
lectura.
La secuencia de comandos se ejecuta escribiendo el nombre de la
secuencia de comandos en el símbolo del sistema.
El archivo de script debe estar en el directorio actual en el
directorio del entorno de ruta.
Como ejemplo, considere la función sinusoidal en el Ejemplo 1.

Una forma general de esta función es:


Si se quiere experimentar con diferentes valores de los
coeficientes ck y / o el número de términos K, entonces
deberíamos crear un archivo de script. Para implementar el
segundo desarrollo del Ejemplo 1, se puede escribir un archivo de
script:

>> % Archivo de script para implementar Ejemplo 1


>> t = 0:0.01:1;
>> k = 1:2:5;
>> ck = 1./k;
>> xt = ck * sin(2*pi*k'*t);

Ahora se puede experimentar con diferentes valores.

Funciones
La segunda construcción de la creación de un bloque de código es
a través de subrutinas.

Estas se denominan funciones, que también nos permiten ampliar


las capacidades de MATLAB.

De hecho, una gran parte de MATLAB se ensambla utilizando


archivos de función en varias categorías y utilizando colecciones
especiales llamadas cajas de herramientas. Las funciones
también son archivos m (con extensión .m).

Una diferencia importante entre los archivos de script y de


función es que la primera línea ejecutable en un archivo de
función comienza con la palabra clave "function" seguida de
una declaración de variable de entrada y salida. Como
ejemplo, considere el cálculo de la función x (t) en el ejemplo
anterior con un número arbitrario de términos sinusoidales, que
implementaremos como una función almacenada como un archivo
m llamado sinsum.m.
Aquí la función es

Y el programa de tipo function será:

function xt = sinsum(t,k)
% Calcula la suma de términos sinusoidales de la expresión x(t)
% xt = sinsum(t,k)
% los vectores t y k deben asignarse antes de usar la función
%
ck = 1./k;
ck = ck(:)'; t = t(:)';
xt = ck * sin(2*pi*k'*t);
plot(t,xt); grid;
end

Los vectores t y ck deben asignarse antes de usar la función


sinsum.

Tenga en cuenta que ck (:)' y t (:)' usan operaciones de indexación


y transposición para forzarlos a ser vectores de fila.
También tenga en cuenta los comentarios que siguen
inmediatamente a la declaración de la función, que son utilizados
por el comando help sinsum. Allí se debe proporcionar
suficiente información para que el usuario comprenda lo que se
supone que debe hacer la función.

También podría gustarte