You are on page 1of 213

Universidad de Costa Rica

Facultad de Ingeniera
Escuela de Ingeniera Elctrica
IE 0502 Proyecto Elctrico
Diseo de prcticas de procesamiento digital de
seales usando SCILAB y SCICOS.
Por:
Arthur Chavarra Prez
Ciudad Universitaria Rodrigo Facio
Julio del 2009
Diseo de prcticas de procesamiento digital de seales usando SCILAB y
SCICOS.
Por:
Arthur Chavarra Prez
Sometido a la Escuela de Ingeniera Elctrica
de la Facultad de Ingeniera
de la Universidad de Costa Rica
como requisito parcial para optar por el grado de:
BACHILLER EN INGENIERA ELCTRICA
Aprobado por el Tribunal:
_________________________________
Ph.D. Jorge Romero Chacn
Profesor Gua
_________________________________ _________________________________
Ing. Rodrigo Chacn Quesada Ing. Claudio Umaa Valverde
Profesor lector Profesor lector
ii
DEDICATORIA
Dedico este proyecto a mis padres, hermanos, otros familiares y
amigos quienes siempre han estado cerca de m y me han
apoyado en todo momento.
iii
NDICE GENERAL
NDICE DE FIGURAS..................................................................................vii
NDICE DE TABLAS......................................................................................x
NOMENCLATURA........................................................................................xi
RESUMEN......................................................................................................xii
CAPTULO 1: Introduccin...........................................................................1
1.1 Objetivos..........................................................................................................................................................3
1.1.1 Objetivo general.................................................................................................................................3
1.1.2 Objetivos especficos.........................................................................................................................3
1.2 Metodologa....................................................................................................................................................4
CAPTULO 2: Desarrollo terico...................................................................5
2.1 Introduccin a SCILAB..................................................................................................................................5
2.2 SCILAB y el procesamiento de seales..........................................................................................................6
2.2.1 Tratamiento de seales.......................................................................................................................7
a) Representacin de un sistema lineal por su funcin de transferencia.....................................................7
b) Representacin en el espacio de estados (EE) de un sistema lineal.......................................................8
c) Cambio de representacin: paso de funcin de transferencia (FT) al Espacio de Estados (EE) y
viceversa......................................................................................................................................................9
d) Discretizacin de sistemas continuos.....................................................................................................9
e) Filtrado y su representacin grfica......................................................................................................11
f) La FFT (Transformada rpida de Fourier) y la DFT (Transformada de Fourier discreta)....................13
g) Convolucin..........................................................................................................................................15
h) Chirp Z-transform (CZT). ....................................................................................................................16
2.2.2 Diseo de filtros con SCILAB........................................................................................................18
a) Diseo de filtros FIR (Finite Impulse Response).................................................................................18
b) Tcnicas de muestreo de frecuencia.....................................................................................................21
2.2.3 Manipulacin de sonido en SCILAB...............................................................................................25
2.2.4 Grficas............................................................................................................................................26
2.3 SCICOS.........................................................................................................................................................28
2.3.1 El editor de SCICOS.......................................................................................................................31
2.3.2 Construccin de un modelo en SCICOS.........................................................................................31
2.3.3 Tipos de bloques en SCICOS..........................................................................................................36
a) Bloque normal simple continuo. ..........................................................................................................37
b) Bloque normal simple discreto. ...........................................................................................................39
c) Bloque simple de cruce por cero...........................................................................................................40
d) Bloque simple sincronizado..................................................................................................................41
e) Herencia y dependencia temporal ........................................................................................................42
2.3.4 Construccin de nuevos bloques.....................................................................................................42
iv
2.3.5 Definicin de la estructura de datos del bloque. ............................................................................45
2.3.6 Funcin computacional...................................................................................................................48
a) Tipos de funciones computacionales....................................................................................................51
CAPTULO 3: Elaboracin de prcticas de procesamiento digital de
seales en SCILAB.........................................................................................53
3.1 Primera prctica.............................................................................................................................................53
3.1.1 Resultados para la primera prctica:. ..............................................................................................59
a) Resultados del programa 1.1.................................................................................................................59
b) Resultados del programa 1.2.................................................................................................................61
c) Resultados del programa 1.3.................................................................................................................62
d) Resultados del programa 1.4.................................................................................................................64
3.2 Segunda prctica...........................................................................................................................................66
3.2.1 Resultados de la segunda prctica. .............................................................................................72
a) Resultados del programas 2.1...............................................................................................................72
b) Resultados del programa 2.2.................................................................................................................73
c) Resultados del programa 2.3.................................................................................................................74
d) Resultados del programa 2.4 ................................................................................................................76
3.3 Tercera prctica............................................................................................................................................78
3.3.1 Resultados de la tercera prctica......................................................................................................88
a) Resultados del programa 3.1.................................................................................................................88
b) Resultados del programa 3.2.................................................................................................................89
c) Resultados del programa 3.3.................................................................................................................91
d) Resultados del programa 3.4.................................................................................................................93
e) Resultados del programa 3.5.................................................................................................................94
3.4 Cuarta prctica..............................................................................................................................................95
3.4,1 Resultados de la cuarta prctica....................................................................................................105
a) Resultados del programa 4.1...............................................................................................................105
b) Resultados del programa 4.2...............................................................................................................107
c) Resultados del programa 4.3...............................................................................................................107
d) Resultados del programa 4.4...............................................................................................................108
e) Resultados del programa 4.5 ..............................................................................................................108
f) Resultados del programa 4.6 ..............................................................................................................108
3.5 Quinta prctica .......................................................................................................................................109
3.5.1 Resultados de la quinta prctica.....................................................................................................119
a) Resultados de la parte A.....................................................................................................................119
b) Resultados de la parte B....................................................................................................................123
c) Resultados de la parte C......................................................................................................................124
3.6 Sexta prctica..............................................................................................................................................126
3.6.1 Resultados de la sexta prctica.......................................................................................................138
a) Resultados de la parte A.....................................................................................................................138
3.7 Sptima prctica............................................................................................................................................143
3.7.1 Cdigo MATLAB de la prctica 7.................................................................................................155
3.7.2 Resultados de la sptima prctica..................................................................................................161
CAPTULO 4: Elaboracin de prcticas de procesamiento digital de
seales en SCICOS.......................................................................................163
4.1 Primera prctica..........................................................................................................................................163
4.1.1 Solucin a la primera prctica en SCICOS. .............................................................................174
4.2 Segunda prctica.........................................................................................................................................177
v
4.2.1 Resultados de la segunda prctica.................................................................................................185
4.3 Tercera prctica en SCICOS.....................................................................................................................190
BIBLIOGRAFA..........................................................................................200
vi
NDICE DE FIGURAS
ndice del usuario
Figura 2.1 Seal de salida del filtro yhz.............................................................................................................12
Figura 2.2 Seal de entrada X del filtro..............................................................................................................13
Figura 2.3 Funcin coseno sin filtrar..................................................................................................................14
Figura 2.4 Transformada discreta de Fourier de la seal coseno.......................................................................15
Figura 2.4 Transformada discreta de Fourier de la seal coseno.......................................................................15
Figura 2.5 Localizacin de las muestras de la transformada Z para Wo < 1 y Wo > 1. ....................................17
Figura 2.5 Localizacin de las muestras de la transformada Z para Wo < 1 y Wo > 1. ....................................17
Figura 2.6 Filtro pasa banda tipo 1 sin muestra y con muestra en cada banda de transmisin. .......................23
Figura 2.7 Filtro paso bajo tipo 1 y tipo 2. ........................................................................................................24
Figura 2.8 Filtro paso bajo tipo 1 y tipo 2. ........................................................................................................29
Figura 2.8 Filtro paso bajo tipo 1 y tipo 2. ........................................................................................................29
Figura 2.9 Estructura de los bloques en SCICOS. .............................................................................................30
Figura 2.10 Ventana principal de SCICOS. ......................................................................................................31
Figura 2.11 Ventana de eleccin de paletas. .....................................................................................................32
Figura 2.12 Ventana de ayuda a travs de SCILAB. .........................................................................................35
Figura 2.13 Cuadro de dilogo de seleccin de demos. ....................................................................................35
Figura 2.14 Apariencia de un super bloque. ......................................................................................................36
Figura 2.15 Bloque normal simple continuo. ....................................................................................................38
Figura 2.16 Bloque normal simple discreto. ......................................................................................................40
Figura 2.17 Bloque simple de cruce por cero. . .................................................................................................41
Figura 2.18 Bloque simple sincronizado. ..........................................................................................................42
Figura 3.1 Parte real de la secuencia exponencial compleja realizada en MATLAB........................................59
Figura 3.2 Parte imaginaria de la secuencia exponencial compleja realizada en MATLAB.............................60
Figura 3.3: Parte real de la secuencia exponencial compleja realizada en SCILAB..........................................60
Figura 3.4 Parte imaginaria de la secuencia exponencial compleja realizada en SCILAB................................61
Figura 3.5 Generacin de secuencia exponencial real con a = 1.2, K = 0.2 y N = 30 en SCILAB....................61
Figura 3.6 Generacin de secuencia exponencial real con a = 0.9, K = 20 y N = 30 en SCILAB....................61
Figura 3.7 Generacin de secuencia exponencial real con a = 1.2, K = 0.2 y N = 30 en MATLAB.................62
Figura 3.8 Generacin de secuencia exponencial real con a = 0.9, K = 20 y N = 30 en MATLAB.................62
Figura 3.9 Seal original no corrompida y seal de ruido generadas con MATLAB........................................63
Figura 3.10 Seal original no corrompida y seal de ruido generadas con SCILAB.........................................63
Figura 3.11 Seales de entrada y seal sin suavizar en SCILAB.......................................................................64
Figura 3.12 Seal original y seal suavizada obtenida con SCILAB.................................................................64
Figura 3.13 Seales de entrada y seal sin suavizar en MATLAB....................................................................65
Figura 3.14 Seal original y seal suavizada obtenida con MATLAB..............................................................65
Figura 3.15 Ilustracin de convolucin en SCILAB..........................................................................................73
Figura 3.16 Ilustracin de convolucin en MATLAB.......................................................................................73
Figura 3.17 Ilustracin del clculo de la respuesta al impulso en SCILAB.......................................................74
Figura 3.18 Ilustracin del clculo de la respuesta al impulso en MATLAB....................................................74
Figura 3.19 Clculo de la secuencia de correlacin cruzada en SCILAB..........................................................75
Figura 3.20 Clculo de la secuencia de correlacin cruzada en MATLAB.......................................................75
Figura 3.21 Clculo de la autocorrelacin de una secuencia sinusoidal corrompida por ruido usando SCILAB.
............................................................................................................................................................................76
Figura 3.22 Clculo de la autocorrelacin de rdd usando SCILAB...................................................................76
vii
Figura 3.23 Clculo de la autocorrelacin de una secuencia sinusoidal corrompida por ruido usando
MATLAB...........................................................................................................................................................77
Figura 3.24 Clculo de la autocorrelacin de rdd usando MATLAB................................................................77
Figura 3.25 Calculo de la DFT en MATLAB....................................................................................................88
Figura 3.27 Secuencia temporal original en SCILAB........................................................................................89
Figura 3.28 Magnitud de las muestras de la DFT y fase de las muestras de la DFT en SCILAB....................89
Figura 3.29 Secuencia temporal original en MATLAB.....................................................................................90
Figura 3.30 Magnitud de las muestras de la DFT y fase de las muestras de la DFT en MATLAB..................90
Figura 3.31 Muestras originales DFT en SCILAB.............................................................................................91
Figura 3.32 Parte real de las muestras temporales y parte real de las muestras temporales en SCILAB..........91
Figura 3.33 Muestras originales DFT en MATLAB..........................................................................................92
Figura 3.34 Parte real de las muestras temporales y parte real de las muestras temporales en MATLAB.......92
Figura 3.35 Grfica de la respuesta en frecuencia en SCILAB..........................................................................93
Figura 3.36 Grfica de la respuesta en frecuencia en MATLAB.......................................................................93
Figura 3.37 Convolucin lineal por medio de la DFT en SCILAB....................................................................94
Figura 3.38 Polos y ceros en el plano Z obtenidos en MATLAB....................................................................106
Figura 3.39 Polos y ceros en el plano Z obtenidos en SCILAB.......................................................................107
Figura 3.40 Tren de pulsos en MATLAB y SCILAB......................................................................................119
Figura 3.41 Espectro correspondiente sobre el intervalo de Nyquist normalizado (-1,1) en MATLAB y
SCILAB............................................................................................................................................................120
Figura 3.42 Seal coseno con ocho muestras por ciclo multiplicndola (elemento por elemento) por el tren de
impulsos............................................................................................................................................................120
Figura 3.43 Respuesta al impulso efectiva y su respuesta de magnitud en MATLAB y SCILAB.................121
Figura 3.44 Seal en el dominio del tiempo obtenida con MATLAB y SCILAB...........................................121
Figura 3.45 Seal en el dominio de la frecuencia obtenida con MATLAB y SCILAB...................................122
Figura 3.46 Seales para aplicar un postfiltro en MATLAB y SCILAB.........................................................122
Figura 3.47 Respuesta en el tiempo al aplicar FFT en MATLAB y SCILAB.................................................123
Figura 3.48 Primer ejemplo de aliasing en MATLAB y SCILAB. .................................................................123
Figura 3.49 Respuesta de FFT MATLAB y SCILAB. ....................................................................................124
Figura 3.50 Secuencia exponencial causal en MATLAB y SCILAB..............................................................124
Figura 3.51 Espectro de frecuencia y seal original en MATLAB y SCILAB................................................124
Figura 3.52 Interpolacin de un senoide por L = 4.........................................................................................125
Figura 3.53 Despliegue en el dominio de la frecuencia del error en MATLAB y SCILAB..........................125
Figura 3.54 Chequeo de decimacin en MATLAB y SCILAB.......................................................................125
Figura 3.55 Efectos de la convolucin circular................................................................................................138
Figura 3.56 Convolucin circular y rellenos con ceros....................................................................................139
Figura 4.1 a) Diagrama de polos y ceros y b) respuesta en frecuencia de un resonador. ............................165
Figura 4.2 Diagrama de sistema para realizar filtrado con un filtro resonante digital..........................167
Figura 4.3 (a) Comportamiento del filtro Notch ideal y (b) comportamiento real del filtro Notch.................169
Figura 4.4 Respuesta en frecuencia del filtro....................................................170
Figura 4.5 Sistema de prueba de filtro Notch............................171
Figura 4.6 Filtro digital de orden 3........................172
Figura 4.7 Respuesta en frecuencia de un filtro paso bajo............................173
Figura 4.8 Aplicacin para filtro paso bajo...........................174
Figura 4.9 Seal de salida Grfico 1 y seal de entrada Grfico 2............................175
Figura 4.10 Seal de entrada Grafico 1 y seal muestreada Grfico 2. Filtro paso
banda resonante digital..........................175
Figura 4.11 Seal de entrada muestreada y sin muestrear........................176
Figura 4.12 Seal filtrada por ambos filtros (Grfico 1) y seal filtrada por el filtro Notch (Grfico 2).........176
Figura 4.13 Seal de entrada y salida filtro paso bajo en diagrama de bloques........................177

viii
Figura 4.14 Seal de entrada y salida de filtro paso bajo con el bloque de funcin de
transferencia......................................................................................................................................................177
Figura 4.15 Ejemplo de un banco de filtros sencillo. ..................................................................................178
Figura 4.16 Diagrama de un banco de filtro simple.........................179
Figura 4.17 Banco de filtros anlisis-sntesis. .............................................................................................182
Figura 4.18 Aplicacin de un filtro de reconstruccin perfecta.......................................................................183
Figura 4.19 Diagrama de banco QMF. ............................................184
Figura 4.20 Diagrama en SCICOS de simulacin de un banco de filtros QMF...............................................185
Figura 4.21 Entrada y salida de diagrama de bloques de un banco de filtros simple.......................186
Figura 4.22 Diagrama en Simulink del primer ejemplo para la prctica 1 de SCICOS...................................187
Figura 4.23 Resultados de primer diagrama hechos con MATLAB................................................................187
Figura 4.24 Salida y entrada del banco de filtros anlisis-sntesis en MATLAB........................188
Figura 4.25 Diagrama para filtro anlisis-sntesis en MATLAB.........................188
Figura 4.26 Entrada y salida de banco de filtro anlisis-sntesis en SCILAB..........................189
Figura 4.27 El grfico superior muestra la salida del filtro F0, la figura inferior muestra la salida del filtro
F1......................................................................................................................................................................189
Figura 4.28 El grfico superior muestra la salida del sistema, el grfico inferior es la entrada.......................190
Figura 4.29 Respuesta en frecuencia de filtro FIR de orden 30 y de un IIR de orden 6..................................192
Figura 4.30 Implementacin de un filtro IIR paso banda.........................193
Figura 4.31 Filtro FIR.......................................................................................................................................193
Figura 4.32 Sistema de filtrado analgico y digital..........................................................................................196
Figura 4.33 Salida de seal filtrada con filtro IIR............................................................................................197
Figura 4.34 Seal de entrada y de salida para filtro FIR..........................199
Figura 4.35 Filtro analgico y filtro digital IIR................................................................................................199
ix
NDICE DE TABLAS
Tabla 2.1 Status de la funcin computacional................................................................................... 44
Tabla 2.2 Tipos de funcin................................................................................................................. 46
Tabla 2.3 Parametros de entrada/salida que utilizan funciones tipo 1.................................................47
x
NOMENCLATURA
SCICOS: SCILAB Connected Object Simulator.
INRIA: Institut National de Recherche en Informatique et Automatique
ENPC: Ecole Nationale de Ponts et Chausses
MATLAB: Matrix Laboratory
FFT: Fast Fourier Transform
DFT: Discrete Fourier Transform
EE: Espacio de Estados
FT: Funcin de Transferencia
xi
RESUMEN
Este documento se enfoca en el desarrollo de prcticas para el curso de
procedimiento digital de seales de la Escuela de Ingeniera Elctrica de la Universidad de
Costa Rica, utilizando el software libre SCILAB y su herramienta SCICOS. En total se
desarrollaron diez prcticas, de las cuales siete corresponden a prcticas elaboradas en
SCILAB y tres en SCICOS. Entre los temas desarrollados podemos encontrar prcticas
sobre la convolucin de seales, transformada rpida de Fourier, transformada discreta de
Fourier, filtros digitales, bancos de filtros, muestreo, etc.
Como parte de la teora, el segundo captulo contempla generalidades sobre el uso de
comandos y funciones en SCILAB y SCICOS, podemos encontrar adems algunos
conceptos bsicos, y ejemplos del uso del software en estudio.
El tercer captulo se refiere a las prcticas generadas o modificadas para ser
realizadas en SCILAB, adems de las prcticas en este captulo se encuentran las
soluciones de los ejercicios elaborados en SCILAB y MATLAB.
En el cuarto captulo se encuentran las prcticas realizables en SCICOS, as como la
soluciones de los ejercicios. Las conclusiones y recomendaciones se encuentran en el
quinto captulo.
Tanto SCILAB como SCICOS son herramientas de gran importancia para el estudio de muchos
estudiantes. A pesar de no ser tan atractivos como MATLAB y Simulink, SCILAB y SCICOS permiten
desarrollar prcticas de un elevado nivel acadmico y complejidad, semejantes a las elaboradas en MATLAB
y Simulink.
xii
CAPTULO 1: Introduccin
El Internet ha cambiado en mucho la educacin, permitiendo el rpido acceso a la
informacin y lo que es ms importante el acceso libre a esta. El Internet es por lo tanto un
vasto y rico depsito de recursos computacionales. El software libre o abierto es en si, una
de las ms importantes herramientas que los estudiantes pueden adquirir en Internet, siendo
una buena alternativa para elaborar aplicaciones y prcticas de ingeniera y otras
disciplinas.
Hoy en da los paquetes de software didcticos y de simulacin tales como
MATLAB y su herramienta Simulink de The Mathworks, Inc., permiten gran variedad de
aplicaciones en el aprendizaje del procesamiento digital de seales, control automtico, etc.
Sin embargo, dichos programas poseen licencias que son de difcil acceso y costosas para
los estudiantes, centros de aprendizaje y profesores. Ante esta situacin en 1990, INRIA y
ENPC desarrollaron SCILAB y su herramienta para la simulacin de sistemas dinmicos
SCICOS, programas de distribucin gratuita, los cuales son las contrapartes de MATLAB y
Simulink; tales programas pueden ser muy similares en cuanto a funciones se refiere,
permitiendo el anlisis de seales y otras aplicaciones. Al ser programas de distribucin
gratuita, cualquier persona con conocimientos bsicos de informtica, podra descargar
SCILAB en Internet, lo cual, no se puede hacer con programas como MATLAB u otros
con licencias poco accesibles y costosas.
SCILAB y SCICOS dan al estudiante y profesor un complejo mundo de opciones en
cuanto a diseo y estudio de prcticas de diversas reas, en nuestro caso SCILAB y
1
SCICOS permiten desarrollar prcticas de procesamiento digital de seales de igual
complejidad que las realizadas en MATLAB y Simulink.
Ante la notable necesidad de un cambio, para el acceso educativo y lograr que el
estudiante pueda obtener con facilidad las herramientas computacionales necesarias, surge
la tendencia a la utilizacin de programas de distribucin gratuita.
SCILAB al igual que MATLAB poseen diversos comandos y funciones para el
tratamiento de seales, lo cual garantiza la posibilidad de generar y probar prcticas para el
procesamiento digital de seales. El simulador de objetos conectados de SCILAB
(SCICOS), garantiza el modelado de sistemas dinmicos que incluyen subsistemas tanto
continuos como discretos, de esta forma es posible tomar prcticas realizadas en Simulink y
llevarlas a cabo con SCICOS. Estas prcticas se deben modificar para poder amoldarlas a
SCICOS debido a ciertas variaciones existentes en la herramienta. En forma similar las
prcticas de MATLAB se deben modificar, si se desean emplear con SCILAB.
Como estudiantes o profesionales es importante el conocer la existencia de ambos
paquetes de software. Tanto MATLAB como SCILAB pueden ser muy funcionales y sus
herramientas de gran ayuda en el aprendizaje y resolucin de problemas. A pesar de la
similitud existen muchas diferencias entre estos programas y en esto radica la importancia
de conocer dichas similitudes y diferencias entre ambos, con la finalidad de ser capaces de
utilizar ambos paquetes o de sustituir el programa de uso actual si es deseado.
2
1.1 Objetivos
1.1.1 Objetivo general
Disear, documentar y probar prcticas para la introduccin del procesamiento digital
de seales utilizando el lenguaje SCILAB y su contraparte la herramienta de simulacin de
procesos SCICOS.
1.1.2 Objetivos especficos
1.Disear y documentar prcticas de procesamiento digital de seales, a partir de los
conocimientos bsicos de la disciplina.
2.Disear y documentar prcticas de simulacin de procesos representativos del
procesamiento digital de seales con la herramienta SCICOS.
3.Realizar una comparacin tanto cualitativa como cuantitativa, con MATLAB y
Simulink.
3
1.2 Metodologa
1 Recopilacin de informacin bibliogrfica referente a SCILAB, SCICOS, MATLAB y
Simulink. Adems de informacin sobre comandos y funciones de estos programas en
cuanto a procesamiento digital de seales se refiere.
2 Recopilacin de prcticas de procesamiento digital de seales llevadas a cabo tanto en
MATLAB y Simulink, como en SCILAB y SCICOS.
3 Anlisis, interpretacin y sistematizacin de la informacin recopilada.
4 Elaboracin de prcticas de procesamiento digital de seales en SCILAB y SCICOS,
basadas en las prcticas obtenidas con MATLAB y Simulink.
5 Hacer una comparacin cualitativa y cuantitativa entre MATLAB y Simulink con
SCILAB y SCICOS.
6 Presentacin oral del proyecto ante el tribunal calificador del mismo.
4
CAPTULO 2: Desarrollo terico
Tanto SCILAB como SCICOS al ser paquetes de software matemtico poseen un
amplio nmero de comandos y funciones que les permite generar grficos, seales de
sonido, diagramas, entre otros. Esto implica que es importante conocer los comandos con
los cuales no estamos familiarizados as como las funciones a utilizar en las prcticas. Sin
embargo debido al gran nmero de funciones de SCILAB y SCICOS nos centraremos
solamente en aquellas que permiten el procesamiento de seales y generacin de bloques
en SCICOS.
2.1 Introduccin a SCILAB
SCILAB es un software gratuito de lenguaje de programacin de alto nivel
desarrollado por INRIA y ENPC. Ha sido generado para realizar aplicaciones de sistemas
de control y aplicaciones de procesamiento de seales. En si SCILAB posee tres grandes
partes: un intrprete, una librera de funciones y libreras de rutinas Fortran y C. Entre
algunas de la aplicaciones de SCILAB tenemos fundamentos de manejo de matrices,
herramientas de lgebra lineal, herramientas de control clsico, herramientas de control
robusto, herramientas de modelos ARMA, manejo de polinomios, grficos 2D y 3D,
herramientas de procesamiento de seales, etc.
SCILAB provee un entorno de programacin robusto, en el cual podemos escribir
programas llamados scripts u objetos que podemos ejecutar.
5
Al ser un programa gratuito, SCILAB se ha desarrollado en diversos sistemas
operativos como por ejemplo LINUX y WINDOWS, logrando alcanzar a todo aquel que
desee utilizar este software.

2.2 SCILAB y el procesamiento de seales.
Entre las funciones para el tratamiento de seales, SCILAB posee una gran variedad
de funciones, como por ejemplo la convolucin, la inversin de matrices, transformada
rpida de Fourier (FFT), transformada discreta de Fourier (DFT), etc.
Las herramientas encontradas en SCILAB permiten el anlisis e implementacin de
filtros digitales, incluyendo respuesta en frecuencia, retardo de grupo y retardo de fase.
Adems la implementacin de filtros puede ser directa como utilizando tcnicas en el
dominio de la frecuencia basadas en la FFT. Tambin se establece el diseo de filtros IIR,
incluyendo Butterworth, Chebyshev I, Chebyshev II, Elptico, optimizado en su diseo con
el criterio mnimo Lp. Otras propiedades de SCILAB son el diseo de filtros FIR y su
optimizado, el procesamiento de la FFT incluyendo la transformada base-2 y su inversa, y
las transformadas para potencias que no sean de dos, estimacin espectral (espectro de
potencia), filtro ptimo y suavizado (filtro de Kalman, filtro de raz cuadrada de Kalman,
transformacin de Householder, filtro de Wiener, etc).
6
2.2.1 Tratamiento de seales.
En SCILAB es posible llevar a cabo distintas funciones que permiten desde la
convolucin hasta la representacin de sistemas lineales a travs de su funcin de
transferencia o su espacio de estados.
Entre algunas de las funciones generadoras de seales SCILAB posee las siguientes:
sin: genera la funcin seno de un vector o matriz.
cos: genera la funcin seno de un vector o matriz.
asin y acos: genera la funcin seno inversa y coseno inversa de un vector o
matriz.
exp: obtiene los exponenciales de un vector o matriz.
sqrt: da la raz cuadrada de un vector o matriz.
Existen otras funciones que desarrollan otras tareas como:
disp: despliega variables en la pantalla.
Title: despliega un ttulo en una ventana de grfico.
Debido al gran nmero de funciones que posee SCILAB solo veremos las ms
importantes funciones y aplicaciones en el procesamiento de seales, las cuales se muestran
a continuacin.
a) Representacin de un sistema lineal por su funcin de transferencia.
El poder representar un sistema lineal por su funcin de transferencia nos permite
tomar distintas decisiones sobre el comportamiento de dicho sistema as como la
posibilidad de modificar este agregando filtros u otros modificadores al sistema. En
7
SCILAB se utilizan las expresiones racionales polinmicas para describir funciones de
transferencia. Estas funciones de transferencia pueden representar seales en el dominio
temporal continuo o discreto. Pero como ya sabemos las seales son sistemas continuos que
pueden ser transformados en discretos mediante el muestreo.
Para describir la funcin de transferencia en SCILAB se utiliza el comando syslin
el cual presenta la siguiente sintaxis.
-->sl=syslin(dominio, numerador,denominador);
En la sintaxis anterior se define el dominio de la funcin de transferencia, el
numerador de la funcin de transferencia y el denominador de la misma.
b) Representacin en el espacio de estados (EE) de un sistema lineal.
Existen dos tipos de representaciones clsicas en el Espacio de Estados, la continua
y la discreta.
La continua es como se muestra a continuacin:

x=Ax( t)+Bu(t ) (2.2-1)


y(t )=Cx(t )+Du( t) (2.2-2)
x( 0)=x
o
(2.2-3)
En la forma discreta tenemos:
x( n+1)=Ax( n)+Bu( n) (2.2-4)
y( n)=Cx( n)+Du( n) (2.2-5)
x( 0)=x
o
(2.2-6)
8
Siendo A, B, C y D matrices y X
o
un vector.
Para representar en el Espacio de Estados, SCILAB vuelve a utilizar la funcin
syslin, pero de la siguiente forma:
--> sl=syslin(dominio,a,b,c,[,d[,x0]])
Siendo el valor de retorno de sl una lista con los siguientes elementos:
-->S=list(lss,a,b,c,d,x0,dominio)
c) Cambio de representacin: paso de funcin de transferencia (FT) al Espacio de
Estados (EE) y viceversa.
En los problemas normales de tratamiento de seales nos puede interesar una u otra
representacin, que son totalmente equivalentes.
Para pasar de la funcin de transferencia a espacio de estados se usa el comando tf2ss
cuya sintaxis es:
-->sl=tf2ss(h)
Donde sl es el espacio de estados esperado y h es la funcin de transferencia a
transformar.
Para pasar de espacio de estados a funcin de transferencia se usa el comando ss2ft
que muestra la sintaxis:
-->h=ss2ft (sl)
9
d) Discretizacin de sistemas continuos.
En SCILAB un sistema lineal continuo en el tiempo representado por su EE o su
FT, puede ser convertido en discreto dentro del mismo dominio temporal, esto por medio
de la funcin dscr:
Considrese un sistema de espacios de estados de la forma
( C)

x( t )=Ax( t)+Bu(t )
y (t )=Cx (t )+Du (t )

(2.2-7)
De la frmula de variacin de constantes es posible estimar el valor del estado x(t)
en cualquier instante de tiempo t:
x( t)=e
At
x( 0)+
0
t
e
A(tc)
Bu(c) d c (2.2-8)
Sea i los pasos de tiempo del muestreo de la seal contina. La entrada u se
mantiene constante en los intervalos de longitud i, luego el modelo discreto (D) obtenido
del anterior (C) ser:
( D)

x( n+1)=A
i
x (n)+B
i
u(n)
y(n)=C
i
x(n)+D
i
u(n)
(2.2-9)
A
i
=exp( Ai )
(2.2-10)
B
i
=

0
i
e
A( ic)
B d c (2.2-11)
C
i
=C
(2.2-12)
D
i
=D
(2.2-13)
La sintaxis de la funcin dscr es:
10
-->[f,g[,r]]=dscr(a,b,dt[,m])
En donde a y b son matrices asociadas al espacio de estados continuo, mientras que
f y g las matrices resultantes para el espacio de estados discreto.
x( n+1)=Fx (n)+Cu (n) (2.2-14)
Si el argumento de entrada en la funcin dscr fuera el espacio de estados continuo
como una lista sl, sera:
-->[sld[,r]]=dscr(sl,dt[,m])
Siendo sld la lista que se representa en el espacio de estado discreto.
En el caso en que el espacio de estados contino est representado por su funcin de
transferencia h, esta ser el argumento de entrada de la funcin hd (FT del discreto):
-->[hd]=dscr(h,dt)
e) Filtrado y su representacin grafica.
El filtrado de seales mediante filtros representados por su espacio de estados o por
su funcin de transferencia se realiza con la funcin flts la cual tiene dos formatos:
En el caso de un sistema lineal dado por la ecuacin de estados la sintaxis es:
-->[y[,x]]=flts(u,sl[,0])
Cuando el sistema lineal est dado por su funcin de transferencia:
-->y=flts(u,h[,past])
SCILAB utiliza el comando plot para representar grficamente cualquier seal.
11
Ahora veremos un ejemplo del uso de los comandos plot y flts. Para ello
generamos dos seales sinusoidales X1 y X2, luego definimos un filtro de respuesta
impulsional finita wfir (el cual aun no ha sido visto), sumamos las dos seales de entrada
cuyo resultado es la seal x, obtenemos la funcin de transferencia del filtro la cual
llamaremos hz, aplicamos el filtro a la seal x y obtenemos la salida yhz:
-->[h,hm,fr]=wfir('lp',33,[.2 0],'hm',[0 0]);
-->t=1:200;
-->x1=sin(2*%pi*t/20);
-->x2=sin(2*%pi*t/3);
-->x=x1+x2;
-->z=poly(0,'z');
-->hz=syslin('d',poly(h,'z','c')./z**33);
-->yhz=flts(x,hz);
-->plot(yhz)
La seal de salida del filtro yhz es la mostrada en la siguiente figura:
Figura 2.1 Seal de salida del filtro yhz.
12
La seal de entrada X del filtro se muestra en la siguiente figura:
Figura 2.2 Seal de entrada X del filtro.
f) La FFT (Transformada rpida de Fourier) y la DFT (Transformada de Fourier
discreta).
Scilab para el clculo de la FFT utiliza la funcin fft, cuya sintaxis es:
[x]=fft(a,-1)
[x]=fft(a,1)
x=fft(a,-1,dim,incr)
x=fft(a,1,dim,incr)
Para este caso:
x = vector real o complejo. Matriz real o compleja (2-dim fft)
a = vector real o complejo.
Dim = entero
13
Incr = entero
A continuacin se muestra un ejemplo de una funcin coseno que es transformada
mediante la fft:
x=0:63;y=cos(2*%pi*x/16);
yf=fft(y,-1);
plot(y); //Funcin coseno sin filtrar;
plot(x,real(yf)); // DFT de la funcin coseno.
La siguiente figura muestra la seal de la funcin coseno sin haber aplicado la fft.
Figura 2.3 Funcin coseno sin filtrar.
14
Al tomar la DFT de la funcin mostrada en la figura 2.3 obtenemos el grfico
siguiente.
Figura 2.4 Transformada discreta de Fourier de la seal coseno.
Si lo que deseamos es hallar la transformada discreta de Fourier la sintaxis es:
[xf]=dft(x,flag);
En donde:
x: es el vector de entrada.
flag: indica dft (flag=-1) o idft(flag=1).
xf : es el vector de salida.
g) Convolucin.
La convolucin es definida como:
y
k
=

j
h
j
x
k+1 j
(2.2-15)
15
Scilab estima la convolucin usando el mtodo de la suma coincidente. Este es un
algoritmo basado en la definicin de convolucin y es implementado por un producto de
polinomios, el cual es mucho ms eficiente si x es un arreglo extenso.
Para poder realizar la convolucin SCILAB tiene la funcin convol la cual, presenta
tres tipos de sintaxis distintas.
-->y=convol(h,x)
-->[y]=convol(h,x)
-->[y,e1]=convol(h,x,e0)
En donde:
h: vector de la primera secuencia de entrada.
x: vector de la segunda secuencia de entrada.
e0: un vector, ltima cola de la suma en solaparse (no se usa en el primer llamado).
e1: nuevo vector de la suma en solaparse (no usado en el ltimo llamado)
h) Chirp Z-transform (CZT).
Hay aplicaciones donde se requiere calcular muestras de la transformada Z dentro o
fuera del crculo unitario, o con diferente espaciamiento angular en el crculo unitario. Un
eficiente algoritmo que puede ser usado para calcular muestras de la transformadas Z en
estas aplicaciones, es conocido como chirp Z-transform (CZT) . En particular la CZT puede
ser usada como un eficiente algoritmo para el clculo de valores de la transformada Z de un
16
ancho finito, para una secuencia de tiempo discreto, donde los puntos de la transformada Z
tienen la forma:
Z
k
=AW
k
(2.2-16)
Donde
A=A
o
e
j
0 (2.2-17)
W=W
o
e
j
(2.2-18)
Y donde A
0
y W
0
son valores reales constantes y y son ngulos.
Figura 2.5 Localizacin de las muestras de la transformada Z para Wo < 1 y Wo > 1. Referencia (1).
El grupo de puntos {z
k
} se encuentra sobre la espiral donde z
0
est a una distancia
A
0
del origen y en un ngulo del eje x. Los puntos restantes son localizados a iguales
ngulos entre ellos y aproximndose al origen por W
o
> 1, movindose desde el origen
por W
0
< 1, y permaneciendo en un crculo de radio A
0
para W
0
=1, la figura 2.5 indica la
localizacin de las muestras de la transformada z para W
o
< 1 en el lado izquierdo de la
figura y W
o
> 1 en el lado derecho de la figura.
La sintaxis de la CZT es la siguiente:
17
-->[czx]=czt(x,m,w,phi,a,theta);
En donde los parmetros son:
x: secuencia de entrada.
m: es el valor CZT en m puntos del plano z.
W: multiplicador de magnitud.
Phi: incremento de fase.
a: magnitud inicial.
theta: fase inicial.
czx: salida de chirp z transform.
2.2.2 Diseo de filtros con Scilab.
La teora general del diseo de Filtros Digitales nos conduce al agrupamiento de las
funciones para el diseo en cuatro mtodos:
Diseo de filtros IIR usando prototipos analgicos.
Diseo de filtros IIR directo.
Diseo de filtros FIR directo.
Diseo de filtro inverso.
a) Diseo de filtros FIR (Finite Impulse Response).
Como usar el comando wfir
Esta funcin puede tener dos tipos de sintaxis, la primera de ellas:
18
--> [wft,wfm,fr]=wfir()
Donde el parntesis es una parte requerida del nombre. Este tipo de funcin es
interactiva y propone el uso de parmetros de entrada requeridos, semejantes al tipo de
filtro (lp = paso bajo, hp = paso alto bp = paso banda, sp = rechaza banda), el ancho del
filtro (un integer n > 2), tipo de ventana (re = rectangular, tr = triangular, hm = hamming, kr
= kaiser, ch = chebyshev) y otro parmetro especial o para hacer generalizaciones de la
ventana Hamming (0 < o < 1) y para la ventana Kaiser ( > 0). Los tres retornan
argumentos como:
wft:: un vector contiene los coeficientes de ventana del filtro para un ancho de filtro
n.
wfm: un vector de 256 de ancho contiene la respuesta en frecuencia del filtro al cual
se le aplic la ventana.
fr: un vector de 256 de ancho contiene los valores de frecuencia de los ejes (0 < fr <
0,5) asociado al valor contenido en wfm.
La segunda sintaxis de la funcin es la siguiente.
--> [wft,wfm,fr] =wfir(ftype,forder,cfreq,wtype,fpar)
Esta forma de la funcin no es interactiva y todos los parmetros de entrada deben
ser dados como argumentos de la funcin.
Ftype: indica el tipo de filtro a construir y puede tomar valores de lp, hp, bp y sb
representando paso bajo, paso alto, paso banda y rechaza banda respectivamente.
Forder: es un integer positivo que da el orden del filtro elegido.
19
Cfreq: es un vector-dos para el cual solo el primer elemento es usado para el caso de
filtros paso bajo y paso alto. Bajo estas circunstancias cfreq(1) es la frecuencia de corte
(cut-off frequency) en Hertz del filtro escogido. Para el pasa banda y el rechaza banda
ambos elementos de cfreq son usados, el primero de ellos es la frecuencia baja de corte y el
segundo la frecuencia alta de corte del filtro. Ambos valores de cfreq deben estar entre 0 y
0.5 correspondiendo a los posibles valores de una respuesta de frecuencia discreta.
Ftype indica el tipo de ventana escogida y puede tomar valores de re, tr, hm, hn, kr,
o ch representando respectivamente las ventanas rectangular, triangular, Hamming,
Hanning, Kaiser y Chebyshev.
Fpar es un vector de dos valores para el cual solo el primer valor es usado para el
caso del uso de la ventana Kaiser y solo en la ventana Chebyshev se usan ambos elementos.
En el caso de la ventana Kaiser el primer elemento indica el cambio relativo entre el lbulo
principal de la respuesta en frecuencia de la ventana y el ancho del lado del lbulo (debe ser
un entero positivo). Para la ventana Chebyshev se puede especificar el ancho del lbulo
principal de la ventana o el tamao de los lados del lbulo. El primer elemento de fpar
indica el tamao del lado del lbulo y toma valores con rangos entre 0 y 1 y el segundo
elemento da el ancho del lbulo principal el cual puede tener valores entre 0 y 0.5. el
elemento especificado del vector fpar es indicado asignando un valor negativo. De esta
manera fpar = [0.01, -1] significa que la ventana Chebyshev tiene los lados del lbulo de
un tamao 0.01 y el ancho del lbulo principal izquierdo no especificado.
Debido a las propiedades lineales de los filtros de fase lineal FIR no es posible
disear un filtro paso alto de un ancho regular o un filtro rechaza banda.
20
b) Tcnicas de muestreo de frecuencia.
Esta tcnica es basada en un grupo especificado de muestras que se eligen de la
respuesta en frecuencia tomada con N puntos espaciados uniformemente alrededor de un
crculo unitario, donde N es la longitud del filtro. Segn la referencia (1) la transformada z
de un filtro FIR es mostrada de la siguiente forma:
H ( z)=(1
z
N
N
)

k =0
N1
(
( H (k))
(1z
1
e
( j ( 2n/ N) k )
)
) (2.2-19)
Esto significa que una aproximacin de respuesta en frecuencia continua se obtiene
tomando un muestreo en frecuencia con N puntos equidistantes alrededor del crculo
unitario (la frecuencia de muestreo), e interpolando entre estos obteniendo la respuesta en
frecuencia continua. De esta forma el error de aproximacin podra ser exactamente cero
en las frecuencias de muestreo y finito entre estos. Este factor tiene que ser relacionado a la
construccin de una funcin continua para estas muestras.
La frmula de interpolacin para un filtro FIR, que sta en esta respuesta de
frecuencia, es obtenido al evaluar la ecuacin anterior en el circulo unitario.
H (e
jw
)=
e
( jw( N1) /2)
N

k =0
N1

| H ( k) e
( jkn/ N)
sin( Nw/ 2)
|sin(w/ 2k n/ N )

(2.2-20)
H (e
jw
)=
e
( jw( N1) /2)
N

k =0
N1
H( k) S (w , k ) (2.2-21)
Donde
S( w , k)=e
( jk n/ N)
(sin( Nw/ 2))
(sin (w/ 2k n/ N ))
=!e
( jkn/ N)
(sin( N (w/ 2)k n/ N ))
(sin(w/ 2k n/ N))
(2.2-22)
21
La ecuacin 2.2-22 muestra las funciones interpoladas. De esta forma, cada
frecuencia muestreada de la respuesta en frecuencia continua es proporcional a la
interpolacin sin(Nw/2)/sin(w/2) sustituyendo por k n/ N en frecuencia. La principal
deficiencia de esta tcnica es la carencia de flexibilidad al especificar la transicin del
ancho de banda, el cual es igual al nmero de muestras elegidas en el tiempo /N y de esta
manera esta fuertemente relacionado a N. Esto genera un pequeo rizado cerca del flanco
de la banda.
La figura 2.6 muestra la respuesta obtenida por un filtro paso banda tipo 1 con una
longitud de 65. La primera respuesta es obtenida sin muestras en la banda de transicin y la
segundo con un muestreo de magnitud 0.5 en cada una de las bandas. Dependiendo de
donde ocurra la frecuencia de muestreo, se dan dos distintos grupos de frecuencias de
muestreo correspondientes a los llamados filtros FIR tipo 1 y tipo 2.
f
k
=
k
N
k=0,... , N1 para filtrotipo1
(2.2-23)
f
k
=
(k+1/ 2)
N
k=0,... , N1 para filtrotipo2 (2.2-24)
22
Figura 2.6 Filtro pasa banda tipo 1 sin muestra y con muestra en cada banda de transmicin.
Referencia (1).
Para obtener esta figura se tiene el siguiente cdigo:
hd=[0*ones(1,15) ones(1,10) 0*ones(1,39) ];//muestras tomadas
hst1=fsfirlin(hd,1);//filtro sin muestras en la transicin.
hd(15)=0.5;hd(26)=0.5;//muestras en la banda de transicin
hst2=fsfirlin(hd,1);//filtro correspondiente
pas=1/prod(size(hst1))*.5;
fg=0: pas:0.5;// grid de frecuencia normalizada
n=prod(size(hstl))
n= 257.
23
plot (fg(1:n),hst1);
plot2d(fg(1:n)', hst2');
El tipo de diseo deseado depende de la aplicacin. Por ejemplo, un corte de banda
puede ser ms cerrado en los puntos de frecuencia muestreada en un filtro tipo 1 que en un
filtro tipo 2. La siguiente figura muestra estos puntos para un filtro paso bajo con una
longitud 64 y sin muestrear en la banda de transicin.

Figura 2.7 Filtro paso bajo tipo 1 y tipo 2. Referencia (1).
El cdigo para generar esta figura es:
-->hd =ones (1,32); hd(65)=0;//definicin de muestras
-->hst1=fsfirlin(hd,1);//filtro tipo 1
-->hst2=fsfirlin(hd,2);//filtro tipo 2
-->pas=1/prod(size(hst1))*0.5;
-->fg=pas:pas:0.5;//grid de frecuencia normalizada.
-->plot2d([fg;fg]',[hst1;hst2]');
24
La lnea rellena da la respuesta aproximada para el filtro lneal FIR tipo 1.
2.2.3 Manipulacin de sonido en SCILAB.
SCILAB permite agregar archivos de audio tipo wav, permitiendo modificar estos a
gusto utilizando filtros y otras formas de alteracin. Adems permite graficar la
frecuencia de una seal de sonido y generar sus propios sonidos si es requerido y as
poder salvar estos como archivos tipo wav. Esto es de gran utilidad, ya que, permite
mostrar la eficiencia y funcionamiento de otras funciones y propiedades de este
software.
Para graficar la frecuencia de una seal de audio se utiliza la funcin analyze la cual
tiene la siguiente sintaxis.
-->analyze(w[,fmin,fmax,rate,points])
En donde:
fmin: es un escalar cuyo valor por defecto es de 100 e indica la frecuencia mnima de la
grfica.
Fmax: es un escalar y determina la frecuencia mxima de la grfica cuyo valor por
defecto es de 1500.
w: es la seal a graficar.
Rate: es la velocidad de muestreo y tiene un valor por defecto de 22050.
points: marca el nmero mximo del largo de los datos y posee un valor por defecto
de 8192.
25
Es posible cargar un archivo de sonido en SCILAB; para ello, se utiliza la funcin
loadwave. Esta funcin carga un archivo se sonido tipo wav en un vector de salida X
mediante la sintaxis:
-->X=loadwave('nombre del archivo');
SCILAB puede adems generar la grfica de un mapa de sonido mediante la
secuencia llamada mapsound cuya sintaxis es:
-->mapsound (w,dt,fmin,fmax,simpl,rate).
Esta funcin lleva a cabo la FFT en incrementos de tiempo dt (con un valor por
defecto de 0.1), donde rate es la velocidad de muestreo, simpl son los puntos
muestreados. fmin y fmax marcan los lmites de frecuencia del mapa de sonido de la seal
de entrada w.
Finalmente es posible guardar un archivo de sonido empleando la funcin savewave la cual
salva un determinado sonido en un vector x a una razn de velocidad rate. Para esta
funcin la sintaxis es:
-->savewave('nombre del archivo',x[,rate]);
2.2.4 Grficas
Como se menciono anteriormente para poder graficar una funcin, SCILAB utiliza la
funcin plot y plot2d.
La funcin plot realiza la grfica de un grupo de curvas 2D utilizando una de las
siguientes sintaxis:
-->plot (y, <linea_especial>, <propiedad_global>)
26
-->plot(x,y, <linea_especial>, <propiedad_global>)
--> plot(x1,y1,<linea__especial1>,<propiedad_global_1>,x2,y2,<linea_especial_2>,
<propiedad_global_2>, ..., xN,yN,<linea_especial_N>,<propiedad_global_N>)
En donde:
x: es una matriz o vector real.
y: es una matriz o vector real.
<linea_especial>: es un argumento opcional que debe ser un arreglo y ha de ser
utilizado como una conexin a especificar una ruta de dibujo de la lnea. Esta determina el
estilo de la lnea y el color.
<propiedad_global>: Este argumento representa una secuencia de acoples de estados
{nombre_de_la_propiedad,valor_de_la_propiedad} que define las propiedades globales del
objeto aplicadas a todas las curvas creadas en estas grficas.
Para graficar un vector o matriz versus otro vector o matriz se utiliza la funcin
plot2d, cuya sintaxis es:
plot2d([x],y)
plot2d([x],y,<opta_args>)
En donde:
x: es un vector o matriz real, la cual si se omite, es asumida como un vector 1:n donde
n es el nmero de puntos dados por el parmetro y.
y: es una matriz o vector real.
<opt_args>: este representa una secuencia de estados key1=valor1, key2=valor, ...,
donde key1, key2, ... pueden ser uno de los siguientes argumentos.
27
Style: grupos de estilos de cada curva. Es asociado a valores que podran ser
un vector real con valores enteros (positivos o negativos).
Rect: nmero de saltos mnimos requeridos por la grfica. El valor asociado
podra ser un vector real con 4 enteros [xmin,ymin,xmax,ymax].
Logflag: altera la escala de los ejes (lineal o logartmica). Puede se un arreglo
con posibles valores: nn, nl y ll.
Frameflag: controla la computacin de los rangos coordinados actuales para
los mnimos valores requeridos. Puede ser un valor entero con rango de 0 a 8.
axesflag: especifica como los ejes deben ser dibujados. Es un entero cuyo
valor va en un rango de 0 a 5.
nax: grupos de etiquetas de ejes y definicin de tics. Es un vector real con 4
enteros [nx,Nx,ny,Ny].
leg: grupo de leyendas de curvas. Se asocia a un arreglo de caracteres.
2.3 SCICOS
SCICOS es la herramienta informtica para modelado y simulacin del software
cientfico SCILAB. SCICOS modela los sistemas fsicos mediante bloques interconectados.
El usuario puede crear sus propios bloques que son programables a travs de SCILAB, C o
FORTRAN, siendo til tambin para los usuarios de MATLAB, ya que pueden desarrollar
el cdigo en MATLAB y traducirlo a SCILAB, mediante una herramienta de traduccin
que incluye SCILAB.
28
SCICOS tiene la capacidad de modelar sistemas dinmicos, ya sean sistemas discretos
o continuos. Incluye adems un editor grfico para la construccin de modelos mediante
inter conexin de bloques. Estos bloques representan funciones fundamentales predefinidas
en SCILAB o definidas por el usuario.
Para cada seal en SCICOS se asocia un conjunto de ndices de tiempos de
activacin, llamados tiempos de activacin sobre los que la seal puede evolucionar. Fuera
de estos tiempos de activacin las seales de SCICOS permanecen contantes segn se
muestra en la siguiente figura.
Figura 2.8 Filtro paso bajo tipo 1 y tipo 2. Referencia (2).
El conjunto de tiempo de activacin es una unin de intervalos de tiempo y puntos
aislados llamados eventos (events). Las seales en SCICOS son generadas por bloques
(blocks) controlados por seales de activacin, que hacen que los bloques produzcan una
29
salida a partir de su entrada y de su estado interno. La seal de salida hereda del bloque que
le ha generado, el conjunto de tiempos de activacin (activation time set), pudindose usar
esta para controlar otros bloques.
Para mostrar la estructura de los bloques se muestra la siguiente imagen de dos
bloques de SCICOS.
Figura 2.9 Estructura de los bloques en SCICOS. Referencia (2).
En la parte superior de los bloques se muestra las entradas para las seales de
activacin (activation input ports) de los bloques. Cuando un bloque no posee entradas de
activacin se encuentra permanentemente activo, sin embargo recibe sus tiempos de
activacin a partir de sus seales de entrada (input signals).
En la parte inferior del bloque se presentan las salidas de activacin (activation output
ports), estas son consideradas como seales de activacin generadas por los bloques.
30
2.3.1 El editor de SCICOS
En SCICOS se llama super bloques a los subsistemas que forman un nico bloque
partiendo de un grupo de bloques simples.
Para abrir la ventana principal de SCICOS se debe teclear scicos() en SCILAB. Luego
de ello aparecer la ventana principal de SCICOS, esta ventana es como se muestra en la
siguiente imagen.
Figura 2.10 Ventana principal de SCICOS. Referencia (2).
2.3.2 Construccin de un modelo en SCICOS.
Para construir los modelos de sistemas en SCICOS se realizan los siguientes pasos:
31
Abrir las paletas de bloques: en el men Edit se encuentra el botn Palettes, que
permite abrir una o ms paletas de bloques. Luego de dar clic aparece una ventana de
dilogo, donde se elije la paleta deseada.
La siguiente figura muestra la ventana de dilogo.

Figura 2.11 Ventana de eleccin de paletas.
Entre las paletas se tienen las de:
Paletas de Entradas/Salidas.
Paleta Lineal
Paleta No Lineal.
Paleta de Eventos.
Paleta de Umbral (Threshold).
32
Paleta Otros.
Paleta de Bifurcacin.

Al realizar un clic en el botn copy del men Edit, es posible copiar bloques en la
ventana principal de SCICOS desde las paletas. Se puede adems hacer clic con el botn
izquierdo y arrastrar el bloque a la ventana principal. Tambin es posible cancelar la
seleccin con el botn derecho del ratn. Para borrar un bloque se hace clic en Delete del
men Edit y hago clic sobre el bloque a borrar.
Para conectar las entradas y salidas de los bloques, se selecciona primero el botn
Link del botn Edit. Luego se hace clic en la salida de un bloque y nuevamente en la
entrada a la que dejamos enviar la seal, quedando ambos conectados. Tambin se puede
partir o terminar en puntos intermedios en los enlaces. Para acabar el proceso de enlazado
solamente se debe de hacer clic con el botn derecho del ratn.
Cabe recalcar que se debe incluir un bloque scope o write to file, para poder
visualizar los datos de una simulacin.
Con nuestro modelo ya completo se puede realizar una simulacin usando el botn
Run del men Simulate. Esto provoca la compilacin del modelo y despus la simulacin.
La simulacin se puede detener haciendo clic sobre el botn Stop en la ventana de
SCICOS.
Finalmente un modelo compilado puede ser salvado como un fichero *.cos.
33
Podemos modificar los parmetros de los bloques abriendo los mens de dilogos, al
seleccionar el botn Open/set del men Object.
Los parmetros pueden ser definidos utilizando expresiones de SCILAB e incluso se
puede utilizar variables de SCILAB si ya han sido definidas. Estas expresiones son
memorizadas simblicamente y evaluadas posteriormente.
El editor SCICOS proporciona muchas otras funcionalidades como por ejemplo:
Salvar y cargar diagramas de modelos en varios formatos.
Ampliacin de zonas de modelos.
Cambio de aspecto de los bloques y colores.
Cambio de color de fondo de los diagramas de los modelos y de los bloques.
Adherir textos al diagrama.
La posibilidad de imprimir y exportar diagramas.
Y muchas otras funciones GUI estndar.
La ayuda de la ventana principal de SCICOS puede usarse seleccionando el botn de
ayuda y haciendo clic sobre el bloque o botn del cual deseo informacin.
Al implementar la programacin de nuevos bloques puedo obtener informacin de las
funciones a utilizar desde la ventana principal de SCILAB haciendo clic en el botn Help
Dialog del men Help. Aparece entonces una ventana en la que elijo SCICOS en la parte
inferior Chapters y selecciono en la zona superior la funcin de la que quiero ayuda y
pulso el botn Show.
34
Figura 2.12 Ventana de ayuda a travs de SCILAB. Referencia(2).
Si deseo ejecutar los demos de SCICOS hago clic en el botn Demos del men File
en la ventana principal de SCILAB, en el que aparece el cuadro de dilogo siguiente:
Figura 2.13 Cuadro de dilogo de seleccin de demos.
35
Luego selecciono SCICOS y hago clic en el botn OK, apareciendo otra ventana con
todos los demos disponibles para SCICOS, seleccionando el que se desea ejecutar y
haciendo clic en el botn OK.
Una importante caracterstica de SCICOS es la posibilidad de generar subsistemas en
donde se generan agrupaciones de bloques. Para esto se da la posibilidad de agrupaciones
de bloques definiendo subdiagramas llamados Super Bloques (Super Blocks), que se
comportan como cualquier otro bloque pero pueden contener un nmero ilimitado de
bloques, e incluso otros super bloques. Los super bloques tienen la siguiente apariencia:
Figura 2.14 Apariencia de un super bloque.
Al hacer doble clic sobre un super bloque podemos observar todos los bloques que
contiene.
2.3.3 Tipos de bloques en SCICOS
Existen tres tipos de bloques fundamentales en SCICOS: el bloque normal, el bloque
de cruce y el bloque sincronizado. Estos pueden tener dos tipos de entradas y dos tipos de
salidas, entradas normales, entradas de activacin, salidas normales y salidas de activacin.
Las entradas y salidas normales se conectan mediante enlaces normales, mientras que las
entradas y salidas de activacin se conectan mediante enlaces de activacin.
36
a) Bloque normal simple continuo.
Los bloques normales simples continuos pueden tener un estado continuo x y un
estado discreto z. Al considerar que tiene un estado continuo x y si su entrada normal es u,
entonces cuando el bloque est activado durante un intervalo de tiempo, su estado x
evoluciona de acuerdo con:
x= f (t , x , z , u , p , n
e
)
(2.3-1)
p es un vector de parmetros constantes, n
e
es la clave de activacin representada por
un entero designando el puerto a travs del cual es activado. En el caso en que las entradas
de activacin sean i1, i2, ..., in entonces.
n
e
=
n

( 2
i
j
1
)
j =1
(2.3-2)
Por otro lado si el bloque estuviera activado por un evento, los estados x y z cambian
instantneamente de acuerdo con las siguientes ecuaciones.
x(t
e
)=g
c
(t
e
, x(t
e
1 ) , z(t
e
1 ) , u( t
e
) , p , n
e
)
(2.3-3)
z(t
e
)=g
d
(t
e
, x(t
e
1 ) , z(t
e
1) , u(t
e
) , p , n
e
)
(2.3-4)
Donde t
e
representa el tiempo en el que se produce el evento y el estado discreto z
permanece constante entre dos eventos sucesivos, luego z(t
e
-) puede ser interpretado como
el valor previo de z. Durante el tiempo de activacin, la salida normal del bloque viene
definida por:
37
y(t )=h(t , x (t
1
) , z(t
1
) , u(t ) , p , n
e
) (2.3-5)
Que ser constante cuando el bloque no est activo.
Este tipo de bloques puede generar seales de activacin de tipo evento. Si esta seal
es activada por un evento en el instante t
e
, entonces el tiempo de cada salida tipo de evento
viene dado por:
t
evo
=k (t
e
, z (t
e
) ,u(t
e
) , p , n
e
)
(2.3-6)
Donde t
evo
es un vector de tiempo. La generacin de eventos puede ser preprogramada
asociando las variables de disparo de los bloques con la salida de eventos.
Figura 2.15 Bloque normal simple continuo. Refrencia (2).
38
b) Bloque normal simple discreto.
Un bloque normal continuo est constantemente actualizando sus salidas y su estado
continuo. Los bloques normales simples discretos actan solo cuando reciben un evento de
entrada y sus acciones son instantneas por lo que deben tener una entrada evento como
mnimo. Si se tiene una seal de entrada u y una seal de salida y, con la llegada de un
evento o eventos en un tiempo (t
e
), entonces su estado y sus salidas cambiarn de la
siguiente forma.
z := f
d
(t
e
: z(t
e
1 ): u(t
e
1 ): p: n
evprt
)
(2.3-7)
y:=h
d
(t
e
: z : u(t
e
): p)
(2.3-8)
Donde f
d
y h
d
son funciones especficas del bloque, p es un vector de parmetros
constante y n
evprt
designa el puerto (s) a travs del cual el evento ha llegado. Los bloques
discretos no pueden tener un estado continuo y sus salidas permanecen constantes entre dos
eventos; no igual sucede en los bloques continuos.
39
Figura 2.16 Bloque normal simple discreto. Referencia (2).
c) Bloque simple de cruce por cero.

Tienen entradas de seales normales, entradas y salidas de eventos pero no pueden
tener seales de salidas normales. Tiene la capacidad de generar un evento de salida
solamente si al menos una de sus entradas normales cruza el cero (cambia de signo). Si esto
ocurre se genera un evento y su tiempo de activacin depender del cruce por cero de las
seales de entrada y del signo de ellas justo luego del cruce.
40
Figura 2.17 Bloque simple de cruce por cero. Refrencia (2).
d) Bloque simple sincronizado
Generan seales de salida de activacin que estn sincronizadas con sus seales de
entradas de activacin. Solo poseen una entrada de activacin, que es dirigida a una de sus
salidas de activacin. La eleccin de una de estas salidas depende del valor de la seal de
entrada normal. Algunos ejemplos de estos tipos de bloques son los bloques if, else, then,
event y select.
41
Figura 2.18 Bloque simple sincronizado. Refrencia (2).
e) Herencia y dependencia temporal
Para evitar que se tengan que dibujar todas las seales de activacin de un diagrama
en SCICOS, se utiliza la caracterstica llamada herencia. Si un bloque no tiene una entrada
de activacin que regule la seal de entrada normal y est activo permanentemente, se le
puede declarar como dependiente del tiempo y no es necesaria la entrada de activacin. Es
importante decir que los bloques dependientes del tiempo no heredan.
2.3.4 Construccin de nuevos bloques.
Al construir un nuevo bloque este puede ser generado como un superbloque
(mediante la interconexin de otros bloques simples) compilndose luego. Tambin se
puede crear un nuevo bloque simple mediante las dos funciones siguientes:
42
Funcin interfaz (Interfacing funtion) que determina la interfaz con el usuario. Esta
funcin esta siempre escrita en cdigo SCILAB, pudindose utilizar funciones SCILAB o
que sean desarrolladas por el usuario.
Funcin computacional (Computational function) esta funcin permite especificar el
comportamiento dinmico del bloque. Posee una amplia flexibilidad al poder ser
programada en C, Fortran y en lenguaje SCILAB; interacta permanentemente dando
mejores resultados en lo que concierne al rendimiento de la simulacin.
La funcin interfaz determina tamao, color, geometra, nmero de puertos, etc. en
adicin con los estados inicial y los parmetros. Esta funcin tambin proporciona el
dilogo del usuario con el bloque. La funcionalidad y respuesta de esta funcin depende de
la variable de entrada de estatus (input flag) job.
Sintaxis
-->[x,y,typ]=block(job,arg1,arg2)
Parmetros:
job =='plot' : la funcin dibuja el bloque.
arg1 es la estructura de datos del bloque
arg2 no se usa.
x,y,typ no se usa.
Podemos usar la funcin standard_draw la cual dibuja un bloque rectangular, y los
puertos de entrada y de salida. Tambin determina el tamao, icono y color que dan el
aspecto al bloque.
43
Job=='getinputs':la funcin retorna la posicin y el tipo de puertos de entrada (normal
o activacin).
Arg1 es la estructura de datos del bloque
arg2 no se usa
x es el vector de las coordenadas x de los puertos de entrada.
Y es el vector de las coordenadas y de los puertos de entrada.
Typ es el vector del tipo de puertos de entrada (1 para regular y 2 para activacin)
En general podemos usar la funcin standard_input.
Job =='getoutput' : la funcin retorna la posicin y el tipo de puertos de salida (nomal
o activacin)
x es el vector de las coordenadas de x de los puertos de salida
y es el vector de las coordenadas de y de los puertos de salida
typ es el vector del tipo de puertos de salida (1 para regular y 2 para activacin)
En general podemos utilizar la funcin standard_output.
Job=='getorigin' : la funcin retorna las coordenadas del punto interior izquierdo del
rectngulo que contiene la silueta del bloque.
x es el vector de las coordenadas de x del punto inferior izquierdo del bloque
y es el vector de la coordenada y del punto inferior izquierdo del bloque.
En general podemos utilizar standard_origin.
Job=='set' : la funcin abre un dilogo para adquirir los parametros del bloque.
x es la nueva estructura de datos del bloque
y no se usa
44
typ no se usa
En general podemos usar la funcin standard_origin.
Job == 'define' : inicializacin de la estructura de datos del bloque (nombre de la
funcin computacional, tipo, nmero y tamao de las entradas y salidas, etc.)
arg1 no se usa
arg 2 no se usa
x es la estructura de datos del bloque
y no se usa
typ no se usa.
2.3.5 Definicin de la estructura de datos del bloque.
Los bloques en SCICOS estn definidos por una estructura de datos SCILAB como
sigue:
list ('block',graphics,model,ununsed,GUI_function)
GUI_function es una cadena de caracteres (string) que contiene el nombre de la
correspondiente funcin interfaz y graphics es la estructura de datos que contiene los datos
grficos:
graphics=list ([x
o
,y
o
],[l,h],orient,dlg,pin,pout,pcin,pcout,gr_i)
X
o
coordenada x del origen del bloque
Y
o
coordenada y del origen del bloque
l ancho del bloque
45
h altura del bloque
orient es un booleano
dlg es un vector de cadenas de caracteres que contienen los parmetros simblicos
del bloque.
Pin vector, pin(i) es el nmero de enlace conectado al puerto de entrada normal i-
sima y es 0 cuando no estn conectados.
Pout vector, pout(i) es el nmero de enlace conectado al puerto de salida normal i-
sima y es 0 cuando no estn conectados.
Pcin vector, pcin(i) es el nmero de enlace conectado al puerto i de entrada de
activacin i-sima y es 0 cuando no estn conectados.
Pcout vector, pcout(i) es el nmero de enlace al puerto de salida de activacin i-sima
y es 0 cuando no estn conectados.
gr_i vector de cadena de caracteres que contiene las instrucciones usadas para dibujar
el icono.
La estructura de datos que contiene la informacin de la simulacin es model.
Model=list(eqns,numinput,numoutput,numclk_input,numclk_output,state,dstate,rpar,i
par,typ,firing,deps,label,unused)
eqns lista que contiene dos elementos. El primero es una cadena que contiene el
nombre de la funcin computacional (FORTRAN, C o funcin SCILAB). El segundo
elemento es un entero que especifica el tipo de funcin computacional. El tipo de funcin
computacional especifica bsicamente la secuencia de llamada.
46
Numinput vector de tamao igual al nmero de puertos de entrada normales del
bloque. Cada entrada muestra el tamao del correspondiente puerto de entrada. Un entero
negativo indica que debe ser determinado por el compilador. Si damos el mismo entero
positivo en ms de un puerto de entrada o salida indica al compilador que esos puertos
tienen igual tamao.
Numoutput vector de igual tamao al nmero de puertos de salidas normales del
bloque. Si se tiene un entero negativo indica que debe ser determinado por el compilador.
Si muestra el mismo entero negativo en ms de un puerto de entrada o salida indica al
compilador que esos puertos tienen igual tamao.
numclk_input vector de tamao igual al nmero de puertos de entrada de activacin.
Todas las entradas deben ser iguales a 1. SCICOS no soporta enlaces de activacin
vectorizados.
numclk_output vector de tamao igual al nmero de puertos de entrada de activacin.
Todas las entradas deben ser iguales a 1. SCICOS no soporta enlaces de activacin
vectorizados.
State vector columna que contiene el estado continuo inicial
dstate vector columna de parmetros reales pasados a la correspondiente funcin
computacional.
Rpar vector columna de parmetros reales pasados a la correspondiente funcin
computacional.
Ipar vector columna de parmetros enteros pasados a la correspondiente funcin
computacional.
47
Typ cadena que indica el tipo de bloque simple : 'z' = bloque de cruce por cero, 'i' =
bloque sincronizado y 's' = bloque normal.
Firing vector columna de los tiempos de disparo inicial de tamao igual al nmero de
puertos de salida de activacin del bloque. Este vector incluye tiempos de disparo de
eventos pre programados (<0 si no hay disparo).
Deps [udep timedep]
udep booleano. True si el sistema tiene alimentacin directa, o sea que al menos una
de las salidas depende explicitamente de una de las entradas.
Timedep booleano. Verdad si el bloque es dependiente temporalmente.
Label cadena de caracteres, usada como identificador del bloque. Este campo puede
ser seleccionados en el botn label del men block.
2.3.6 Funcin computacional
Esta funcin evalu la salida dependiendo del tipo de bloque y la forma que sea
llamada por el simulador.
El simulador SCICOS llama a la funcin computacional para realizar diferentes tareas
(task), utilizando una variable status (flag) para especificar la tarea que se debe ejecutar,
como se muestra en la tabla.
48
Tabla 2.1 Status de la funcin computacional.
Status (flag) Tarea (task)
0
0
1
2
3
4
5
6
Estado derivativo computacional
estado derivativo computacional
outputs update
state update
output event timing
initialization
ending
re-initialization
Inicializacin: el simulador llama a la funcin computacional para conocer el estado
del arranque y la salida de inicializacin (las entradas no se encuentran disponibles en el
momento de arranque). Otras tareas como abrir un fichero, inicializacin de la ventana
grfica, etc..., pueden tambin ser ejecutadas en este punto.
Reinicializacin: el simulador puede llamar al bloque un determinado nmero de
veces para la inicializacin. Esta representa otra oportunidad para iniciar los estados y las
salidas. Pero esta vez, las salidas se encuentran disponibles.
49
Actualizacin de las salidas: El simulador llama para obtener los valores de las
salidas. De esta manera la funcin computacional debera evaluar el status (4) mostrado en
la tabla 2.1..
Actualizacin de los estados: Uno o ms eventos han llegado y el simulador llama a la
funcin computacional para actualizar los estados x y z de acuerdo con los status (2) y (3)
de la tabla 2.1.
Clculo del estado derivado: El simulador se encuentra en una fase continua; y se
necesita la derivada de x. Esto significa que la funcin computacional debe evaluar el
estado derivativo computacional..
Tiempo de salida de eventos: El simulador llama a la funcin computacional en el
tiempo de sus eventos de salida. Para realizar esto la funcin computacional deber evaluar
el status (5) de la tabla 2.1.
Terminacin: El simulador llama a la funcin computacional una vez ms al final (es
til para cerrar ficheros, liberar la memoria, etc..).
50
a) Tipos de funciones computacionales.
En SCICOS las funciones computacionales pueden ser de diferentes tipos y coexistir
en un mismo diagrama de un modelo. Los tipos de funciones existentes vienen
especificados en la siguiente tabla.
Tabla 2.2 Tipos de funcin.
Tipo de funcin SCILAB Fortran C Comments
0 si si si Fixed calling
sequence
1 no si si Varying calling
sequence
2 no no si Fixed calling
sequence
3 si no no Input/outputs are
SCILAB list
El tipo de funcin computacional utilizada es almacenada en el segundo campo de
eqns.
Funcin computacional tipo 0: el simulador construye un nico vector tambin. Este
tipo es soportado por versiones de SCILAB anteriores a la 2,4. La secuencia de llamada es
igual que la de la funcin computacional tipo 1 con una entrada normal y salida normal.
51
Funcin computacional tipo 1: la forma ms sencilla de explicar este tipo es mediante
un ejemplo. Los parmetros (I de entrada y O de salida) que utilizan las funciones tipo 1
son los que muestra la siguiente tabla.
Tabla 2.3 Parmetros de entrada/salida que utilizan funciones tipo 1.
I/O Args Descripcin
I flag 0,1,2,3,4,5 o 6
I Nevprt Cdigo de activacin
I t tiempo
o xdot Derivada de estados continuos
I/O x Estado continuo
I nx Tamao de x
I/O z Estado discreto
I nz Tamao de z
O tvec Tiempos de salida de eventos (para
flag 3)
I ntvec Nmero de puertos de activacin
I rpar parmetros
I nrpar Tamao de rpar
I ipar parmetros
I nipar Tamao de ipar
I ui Ith input (regular), i=1,2,...
I nui Tamao de entrada ith
O yj Salida jth (regular) j=1,2,.....
I nyj Tamao de salida jth
52
CAPTULO 3: Elaboracin de prcticas de procesamiento
digital de seales en SCILAB.
Las prcticas elaboradas fueron tomadas de las prcticas recopiladas del curso
Procesamiento Digital de Seales IE-0102 de la Universidad de Costa Rica. Estas prcticas
que fueron inicialmente elaboradas para ser ejecutadas con MATLAB fueron modificadas
en este capitulo para poder ejecutarlas con SCILAB.
3.1 Primera prctica.
En esta primera prctica se muestra como generar algunas seales y sus grficas en
forma discreta, en si se generan secuencias exponenciales complejas, real, imaginaria y
como generar seales de ruido. Adems se da el suavizamiento de una seal por un filtro
de promedio mvil.
A continuacin se muestra la prctica nmero 1:
Procesamiento Digital de Seales IE-0102
Prctica #1 con SCILAB.
SCILAB incluye un sinnmero de funciones que pueden usarse para la generacin
de seales. Algunas de estas funciones son:
exp, sin.cos, square, sawtooth
El programa que se puede utilizar para generar una secuencia exponencial compleja
es:
53
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 1.1
// Generacin de una secuencia exponencial compleja
// a = -1/12; b = %pi/6; K = 1;N = 41;
a = input('Introduzca exponente real = ');
b = input('Introduzca exponente imaginario = ');
c = a + b*%i;
K = input('Introduzca la constante de ganancia = ');
N = input('Introduzca longitud de secuencia = ');
n = 1:N;
x = K*exp(c*n);
f0=scf(0); //crea la figura 0
plot2d3('gnn',n,real(x));xgrid;
xlabel('Indice temporal n');ylabel('Amplitud');
title('Parte real');
disp('Teclee ENTER para la parte imaginaria');
pause
f1=scf(1);
scf(f1);
plot2d3('gnn',n,imag(x));xgrid;
xlabel('Indice temporal n');ylabel('Amplitud');
title('Parte imaginaria');
54
//////////////////////////////////////////////////////////////////////////////////////////////////////
Se procede ahora a generar una secuencia exponencial real en SCILAB:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 1.2
// Generacin de secuencia exponencial real
// a = 1.2; K = 0.2; N = 30;
// Pruebe tambin con
// a = 0.9; K = 20; N = 30
a = input('Introduzca exponente = ');
K = input('Introduzca la constante de ganancia = ');
N = input('Introduzca la longitud de la secuencia = ');
n = 0:N;
x = K*a.^n;
f0=scf(0);club;
plot2d3('gnn',n,x); xgrid;
xlabel('Indice temporal n');ylabel('Amplitud');
title('a=1.2');
disp('Teclee ENTER para continuar');
pause
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Un ejemplo simple de un sistema de tiempo discreto es el filtro de promedio mvil de
M puntos, definido por:
55
y|n=
1
M

k=0
M1
x| nk
Este sistema se usa a menudo para suavizar variaciones aleatorias en los datos.
Considrese por ejemplo una seal s[n] corrompida por ruido d[n] para n = 0 , resultando
en datos medidos dados por
x|n=s|n+d|n
Sera conveniente reducir el efecto del ruido d[n] para obtener un mejor estimado de
s[n] de x[n]. Para este fin, el filtro de promedio mvil da resultados razonablemente
buenos. Para ilustrar este enfoque, se usar SCILAB. Por simplicidad, suponga que la seal
original sin corromper est dada por
s|n=2|n(0.9)
n

El programa para generar s[n] y d[n] es dado a continuacin, donde el ruido d[n] se
calcula usando la funcin rand.
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 1.3
// Otro ejemplo de generacin de seales
// Generacin de ruido aleatorio
R = 50;
d = rand(R,1) - 0.5;
// Para generar la seal corrompida
m = [0:1:R-1]';
s = 2*m.*(0.9.^m);
f0=scf;clf;
56
subplot(2,1,1);
plot2d3('gnn',m,s);xgrid;
xlabel('Indice temporal n');ylabel('Amplitud');
title('Secuencia original no corrompida');
subplot(2,1,2);
plot2d3('gnn',m,d);xgrid;
xlabel('Indice temporal n');ylabel('Amplitud');
title('Ruido');
disp('Teclee ENTER para continuar');
pause
///////////////////////////////////////////////////////////////////////////////////////////////////////////
El siguiente programa se usa para generar la salida suavizada y[n] de la seal
original corrompida con ruido usando el sistema de promedio mvil. Durante su ejecucin,
el programa solicita los datos de entrada, que es el nmero deseado M de muestras de
entrada a ser promediadas. Para enfatizar el efecto del ensuavizamiento del ruido ms
claramente, las seales de tiempo discreto se trafican como curvas continuas usando la
funcin plot.
En SCILAB se gener el programa:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 1.4
// Suavizamiento de una seal por un filtro de promedio mvil
// M = 3;
57
R = 50;
d = rand(R,1) - 0.5;
m = [0:1:R-1]';
s = 2*m.*(0.9.^m);
x = s + d;
f0=scf(0);clf;
plot(m,d,'r-',m,s,'b--',m,x,'g:');xgrid;
xlabel('Indice temporal n');ylabel('Amplitud');
legend('r-','d[n]','b--','s[n]','g:','x[n]');
disp('Teclee ENTER para realizar el suaviza miento');
pause
M = input('Numero de muestras de entrada = ');
b = ones(M,1)/M;
// y = filter(b,1,x); Esta funcin sirve en la versin 5.1 de SCILAB.
//En el caso de poseer una versin anterior:
//Tome la carpeta cuyo nombre es DSP y cpiela en el siguiente directorio macros
//de SCILAB.
//luego ejecute el comando
//getf('SCI/macros/DSP/filter/filter.sci');
//Despus de esto puede usar la funcin filter
//Para ms informacin dimite help getf .
y = filter(b,1,x);
58
f1=scf(1);clf;
scf(1);
plot(m,s,'r-',m,y,'b--');grid;
legend('r-','s[n]','b--','y[n]');
xlabel('Indice temporal n');ylabel('Amplitud');
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3.1.1 Resultados para la primera prctica:
Con la finalidad de obtener una comparacin entre SCILAB y MATLAB se tienen los
siguientes resultados:
a) Resultados del programa 1.1.
Al ejecutar el programa original en MATLAB se obtuvieron las figuras 3.1 y 3.2.
Figura 3.1 Parte real de la secuencia exponencial compleja realizada en MATLAB.
59
Figura 3.2 Parte imaginaria de la secuencia exponencial compleja realizada en MATLAB.
Se generaron los siguientes resultados con SCILAB.
Figura 3.3: Parte real de la secuencia exponencial compleja realizada en SCILAB.
60
Figura 3.4 Parte imaginaria de la secuencia exponencial compleja realizada en SCILAB.
b) Resultados del programa 1.2
Luego de ejecutar el cdigo anterior se obtiene el siguiente resultado.
Figura 3.5 Generacin de secuencia exponencial real con a = 1.2, K = 0.2 y N = 30 en SCILAB.
Figura 3.6 Generacin de secuencia exponencial real con a = 0.9, K = 20 y N = 30 en SCILAB.
61
El resultado de generar esta secuencia en MATLAB para a = 1.2, K = 0.2 y N = 30 es
mostrado en la figura 3.7:
Figura 3.7 Generacin de secuencia exponencial real con a = 1.2, K = 0.2 y N = 30 en MATLAB.
Figura 3.8 Generacin de secuencia exponencial real con a = 0.9, K = 20 y N = 30 en MATLAB.
c) Resultados del programa 1.3
Tras digitar el cdigo en MATLAB se obtiene la prxima figura.
62
Figura 3.9 Seal original no corrompida y seal de ruido generadas con MATLAB.
Se muestra a continuacin el resultado al graficar en SCILAB:
Figura 3.10 Seal original no corrompida y seal de ruido generadas con SCILAB.
63
d) Resultados del programa 1.4
Para este caso se obtienen los resultados mostrados.
Figura 3.11 Seales de entrada y seal sin suavizar en SCILAB
Figura 3.12 Seal original y seal suavizada obtenida con SCILAB.
64
Luego de ejecutar el programa en MATLAB se deben visualizar las siguientes
figuras:
Figura 3.13 Seales de entrada y seal sin suavizar en MATLAB
Figura 3.14 Seal original y seal suavizada obtenida con MATLAB.
65
3.2 Segunda prctica.
En esta segunda practica se muestra la propiedad de convolucin entre dos
secuencias, as como el clculo de la respuesta al impulso, la autocorrelacin y una
aplicacin de esta.
A continuacin se muestra la segunda prctica:
Procesamiento Digital de Seales IE-0102
Prctica #2 con SCILAB.
Convolucin
Ejecute el siguiente programa para realizar la convolucin de dos secuencias que
usted mismo va a introducir a la computadora. No olvide que, ante cualquier duda acerca de
un mandato de SCILAB, puede escribir help mandato para hacer la debida consulta.
El programa en SCILAB para ilustrar la convolucin es el siguiente:
////////////////////////////////////////////////////////////////////////////////////
// Programa 2.1
// Ilustracin de la convolucin
a = input('Introduzca la primera secuencia = ');
b = input('Introduzca la segunda secuencia = ');
c = convol(a,b);
M = length(c) -1;
n = 0:1:M;
66
disp('Secuencia de salida = ');disp(c)
plot2d3('gnn',n,c);
xlabel('Indice temporal n');ylabel('Amplitud');
////////////////////////////////////////////////////////////////////////////////////
Durante la ejecucin, los datos de entrada solicitados son las dos secuencias a
convolucionar que son introducidas en forma vectorial dentro de parntesis cuadrados
como se muestra:
a = [-2 0 1 -1 3];
b = [1 2 0 -1];
El programa 2.1 calcula la convolucin y muestra la secuencia resultante:
Secuencia de salida =
-2 -4 1 3 1 5 1 -3
y la grfica. Para una comprobacin simple, realice la convolucin a mano.
Clculo de la respuesta al impulso
El programa que sigue calcula la respuesta al impulso de un sistema de tiempo
discreto LIT de dimensin finita. Los datos de entrada del programa son la longitud
deseada de la respuesta al impulso y los vectores de los coeficientes del filtro p y d que
deben ser introducidos dentro de parntesis cuadrados. El programa luego grafica la
secuencia de la respuesta al impulso. Para ilustrar esto, se determina las primeras 41
muestras de la respuesta al impulso del sistema causal LIT definido por la ecuacin en
diferencias:
67
y| n+0.7y| n10.45y| n20.6y| n3=0.8x| n0.44x| n1
+0.36x| n2+0.02x| n3
En SCILAB se presenta el siguiente programa.
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 2.2
// Ilustracin del clculo de la respuesta al impulso
N = input('Longitud deseada de la respuesta al impulso = ');
p = input('Introduzca el vector p = ');
d = input('Introduzca el vector d = ');
x = [1 zeros(1,N-1)];
y = filter(p,d,x);
//En el caso de poseer una versin anterior o no encontrar la funcin filter
//Tome la carpeta cuyo nombre es DSP y cpiela en el siguiente directorio
Scilab-5.1/modules/ de SCILAB.
//luego ejecute el comando
//getf('SCI/modules/DSP/filter/filter.sci');
//Despues de esto puede usar la funcin filter
//De no estar la carpeta modules creela y copie la carpeta
//Para ms informacin digite help getf .
k = 0:1:N-1;
plot2d3('gnn',k,y);
xlabel('Indice temporal n');ylabel('Amplitud');
68
/////////////////////////////////////////////////////////////////////////////////////////////////////////
Los datos de entrada son:
N = 41;
p = [0.8 -0.44 0.36 0.02];
d = [1 0.7 -0.45 -0.6];
La respuesta al impulso generada por el programa es grficada. La respuesta al
impulso de un sistema de tiempo discreto de dimensin finita tambin puede graficarse
usando el mandato impz generado para SCILAB. Para determinar la respuesta al escaln se
reemplaza en el programa anterior el enunciado x = [1 zeros(1,N-1)] con el enunciado x =
[ones(1,N)]. Grafique entonces las primeras 41 muestras de la respuesta al escaln.
Correlacin
Considrese las dos secuencias de longitud finita
x[n] = [13 -2 1 2 -1 4 4 2];
y[n] = [2-1 4 1 -2 3]
Para el caso de SCILAB tenemos:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 2.3
// Clculo de la secuencia de correlacin cruzada
//x = [1 3 -2 1 2 -1 4 4 2];
//y = [2 -1 4 1 -2 3];
x = input('Introduzca la secuencia de referencia = ');
69
y = input('Introduzca la segunda secuencia =');
// Calcule la secuencia de correlacin cruzada
n1 = length(y) -1;n2 = length(x)-1;
r = convol(x,mtlb_fliplr(y));
k = [(-n1):n2]';
plot2d3('gnn',k,r);
xlabel('Indice de atraso');ylabel('Amplitud');
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Cuando se corre el programa, ste solicita los datos de entrada consistentes de los
vectores x e y, que se introducen dentro de parntesis cuadrados. Se calcula la secuencia de
correlacin cruzada usando el mandato convol (SCILAB) con el vector y invertido en el
tiempo para luego gratificarla.
Use el programa anterior para calcular la secuencia de autocorrelacin de una
secuencia de longitud finita. Para ello, el vector x se introduce dos veces conforme el
programa solicita los datos de entrada. Para atraso cero (l = 0), r
xx
[0] es el valor mximo
como debe esperarse.
Como otra experiencia, calcule la correlacin cruzada de x[n] y y[n] = x[n-N] para N
= 4, esto con el fin de apreciar cmo se puede usar para encontrar el valor exacto del
retardo N observando el pico de la correlacin cruzada.
70
Adicionalmente, modifique el programa para generar una secuencia formada con la
adicin de ruido aleatorio a x[n] usando el mandato rand. Encuentre y grfique la
autocorrelacin de la secuencia corrompida con ruido. Debe encontrar que la
autocorrelacin exhibe un pico pronunciado en el valor de l = 0 (atraso cero).
Como observacin al margen, ntese que la autocorrelacin y la correlacin cruzada
pueden computarse usando el mandato xcorr. Sin embargo, los resultados obtenidos de esta
forma son la versin invertida en el tiempo de los resultados hallados usando el programa
2.3. Verifique esta asercin.
Aplicacin de la autocorrelacin
Se va a determinar el periodo de la secuencia sinusoidal x[n] = cos(0.25n), 095
corrompida por ruido aleatorio aditivo de amplitud distribuido uniformemente en el mbito
[-0.5, 0.5].
Debiera verse del grfico correspondiente no slo el pico en el atraso cero, sino
tambin los picos claramente distintos en atrasos que son mltiplos de 8 indicando el
periodo de la secuencia sinusoidal.
Grafique la autocorrelacin r
dd
[n] del componente de ruido. Vase que r
dd
[n] muestra
un pico fuerte en el atraso cero pero el resto de las amplitudes son considerablemente
71
pequeas en los otros valores del atraso debido a que las muestras del ruido no estn
correlacionadas entre s.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 2.4
// Clculo de la autocorrelacin de una secuencia sinusoidal corrompida
// por ruido
N = 96;
n = 1:N;
x = cos(%pi*0.25*n); // Se genera la secuencia sinusoidal
d = rand(1,N) - 0.5; // Se genera la secuencia de ruido
y = x + d; // Se genera la secuencia sinusoidal corrompida por ruido
r = convol(y,mtlb_fliplr(y)); // Calcula la autocorrelacin
k = -28:28;
plot2d3('gnn',k,r(68:124));
xlabel('Indice de atraso');ylabel('Amplitud');
3.2.1 Resultados de la segunda prctica.
a) Resultados del programas 2.1
Los resultados obtenidos son:
Para las secuencias
a = [-2 0 1 -1 3]
b = [1 2 0 -1]
Secuencia de salida =
72
2. - 4. 1. 3. 1. 5. 1. - 3.
Figura 3.15 Ilustracin de convolucin en SCILAB.
Luego de realizar esta parte de la prctica en MATLAB se obtine:
Figura 3.16 Ilustracin de convolucin en MATLAB.
b) Resultados del programa 2.2
Al ejecutar el programa se obtiene.
73
Figura 3.17 Ilustracin del clculo de la respuesta al impulso en SCILAB.
Realizando el anlisis en MATLAB se obtiene:
Figura 3.18 Ilustracin del clculo de la respuesta al impulso en MATLAB.
c) Resultados del programa 2.3.
Obtenemos con este programa la siguiente figura:
74
Figura 3.19 Clculo de la secuencia de correlacin cruzada en SCILAB.
Los resultados obtenidos con MATLAB:
Figura 3.20 Clculo de la secuencia de correlacin cruzada en MATLAB.
75
d) Resultados del programa 2.4
Se obtiene con SCILAB las siguientes figuras:
Figura 3.21 Clculo de la autocorrelacin de una secuencia senoidal corrompida por ruido usando
SCILAB.
Para determinar la autocorrelacin de rdd[n] se ejecuta el siguiente comando en
SCILAB.
rdd= convol(d,mtlb_fliplr(d)); plot2d3('gnn',k,rdd(68:124));
Figura 3.22 Clculo de la autocorrelacin de rdd usando SCILAB.
76
Las grficas obtenidas de ejecutar en MATLAB:
Figura 3.23 Clculo de la autocorrelacin de una secuencia senoidal corrompida por ruido usando
MATLAB.
Para determinar la autocorrelacin de r
dd
[n] se utiliza el siguiente comando en
MATLAB.
rdd= conv(d,fliplr(d));
Figura 3.24 Clculo de la autocorrelacin de rdd usando MATLAB.
77
3.3 Tercera prctica.
En esta prctica se tratan temas como la transformada discreta de Fourier, la
transformada rpida de Fourier de tiempo discreto y la DFT inversa.
A continuacin se muestra la tercera prctica.
Procesamiento Digital de Seales IE-0102
Prctica #3 con SCILAB.
Transformada de Fourier de Tiempo Discreto
El siguiente programa puede emplearse para determinar los valores de la DTFT de
una secuencia real descrita como una funcin racional de
e
j o
.
k = 256;
num = [0.008 -0.033 0.05 -0.033 0.008];
den = [1 2.37 2.7 1.6 0.41];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 3_1
//Clculo de la transformada de Fourier de tiempo discreto
// Lea la longitud deseada de la DFT
k = input('Numero de puntos de frecuencia = ');
// Lea los coeficientes del numerador y del denominador
num = input('Coeficientes del numerador = ');
den = input('Coeficientes del denominador = ');
78
// Calcule la respuesta en frecuencia
numh=poly(num,"z","coeff");
denh=poly(den,"z","coeff");
h=syslin('d',numh/denh);
[frq,bnds,split]=calfrq(h,0.001,%pi);
rf=repfreq(h,frq);
// Grafique la respuesta en frecuencia
subplot(2,2,1)
plot(frq/180,real(rf));xgrid;
title('Parte real');
xlabel('f/180');ylabel('Amplitud');
subplot(2,2,2)
plot(frq/180,-imag(rf));xgrid;
title('Parte imaginaria');
xlabel('f/180');ylabel('Amplitud');
subplot(2,2,3);
plot(frq/180,abs(rf));xgrid;
title('Espectro de magnitud');
xlabel('f/180');ylabel('Magnitud');
subplot(2,2,4);
plot(frq/180,-atand(imag(rf),real(rf))/(2*%pi));xgrid;
title('Espectro de fase');
79
xlabel('f/180');ylabel('Fase en grados');
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Los datos de entrada solicitados por el programa son el nmero de puntos de
frecuencia k donde la DTFT va a ser calculada y los vectores num y den que contienen los
coeficientes del numerador y del denominador de la DTFT, respectivamente,
proporcionados en orden ascendente de potencias de
e
j o
. Estos vectores deben ser
introducidos dentro de parntesis cuadrados. El programa calcula los valores de la DTFT en
los puntos de frecuencia prescritos y grafica las partes real e imaginaria, junto con los
espectros de fase y magnitud. Debe notarse que debido a las relaciones de simetra de la
DTFT de una secuencia real, esta es calculada nicamente en k igualmente espaciados
valores de o entre 0 y n .
Como ejemplo, grafique la siguiente DTFT:
X (e
j o
)=
0.0080.033e
j o
+0.05e
j2 o
0.033e
j3o
+0.008e
j4o
1+2.37e
j o
+2.7e
j2 o
+1.6e
j3 o
+0.41e
j4 o
Los datos de entrada usados para la DTFT deberan introducirse como se indica a
continuacin:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
k = 256;
num = [0.008 -0.033 0.05 -0.033 0.008];
den = [1 2.37 2.7 1.6 0.41];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
80
Cuando se grafica el espectro de fase, este muestra una discontinuidad de tamao
2n alrededor del punto o=0.72 . Esta discontinuidad puede removerse usando el
mandato unwrap. Presente tanto la fase con la discontinuidad como la fase sin ella en sus
grficos.
Transformada Discreta de Fourier
Se va a determinar la DFT U[k] de M puntos de la siguiente secuencia de N puntos:
u| n=

1, 0<n<N1
0, para otros valores den

El programa siguiente solicita los datos de entrada N y M. Para asegurar que la DFT
d valores correctos, M debe ser mayor que o igual a N. Despus que son introducidos tales
valores, calcula la DFT de M puntos y grafica la secuencia original de N puntos, junto con
la magnitud y fase de la secuencia de la DFT. Como ejemplo, use N = 8 y M = 16.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 3.2
// Ilustracin del clculo de la DFT
// N=8; M=16;
// Lea la longitud N de la secuencia y la longitud deseada M de la DFT
N = input('Introduzca la longitud de la secuencia = ');
M = input('Introduzca la longitud de la DFT = ');
// Genere la secuencia temporal de longitud N
u = [ones(1,N)];
// Calcule su DFT de M puntos
81
U = mtlb_fft(u,M);
// Grafique la secuencia temporal y su DFT
t = 0:1:N-1;
plot2d3('gnn',t,u);
title('Secuencia temporal original');
xlabel('Indice temporal n');ylabel('Amplitud');
pause
subplot(2,1,1);
k = 0:1:M-1;
plot2d3('gnn',k,abs(U));
title('Magnitud de las muestras de la DFT');
xlabel('Indice de frecuencia k');ylabel('Magnitud');
subplot(2,1,2);
plot2d3('gnn',k,atan(imag(U),real(U)) );
title('Fase de las muestras de la DFT');
xlabel('Indice de frecuencia k');ylabel('Fase');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Se ilustra ahora el clculo de la DFT inversa. La secuencia DFT de K puntos est
dada por:
V | k=

k / K , 0<k<K1
0, otros valores de n

82
Pngase K = 8 y N = 13 en el siguiente programa, que determina la secuencia
resultante del clculo de la DFT inversa v[n].
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 3.3
// Ilustracin del clculo de la DFT inversa
// K=8; N=13;
// Lea la longitud K de la DFT y la longitud deseada N de la DFT inversa
K = input('Introduzca la longitud de la DFT = ');
N = input('Introduzca la longitud de la DFT inversa = ');
// Genere la secuencia DFT de longitud K
// Se trata de una rampa discreta
k = 1:K;
U = (k-1)/K;
// Calcule su DFT inversa de N puntos
u = mtlb_ifft(U,N);
// Grafique la DFT y la DFT inversa
k = 1:K;
plot2d3('gnn',k-1,U);
xlabel('Indice k de frecuencia');ylabel('Amplitud');
title('Muestras originales DFT')
pause
83
subplot(2,1,1)
n = 0:1:N-1;
plot2d3('gnn',n,real(u));
title('Parte real de las muestras temporales');
xlabel('Indice temporal n');ylabel('Amplitud');
subplot(2,1,2)
plot2d3('gnn',n,imag(u));
title('Parte imaginaria de las muestras temporales');
xlabel('Indice temporal n');ylabel('Amplitud');
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
En este ltimo programa debe notarse que, si bien la secuencia de la DFT es real, su
DFT inversa es una secuencia temporal compleja.
Examnese ahora la siguiente secuencia:
x| n=cos
(
2nr n
N
)
, 0<n<N 1, 0<r<N1
Sea r = 3 y N = 16 para la secuencia de longitud finita anterior. Su DFT de 16 puntos
est entonces dada por:
X | k=

8, para k=3,
8, para k=13,
0, otros valores de k

84
Se determinar la DTFT de la secuencia x[n] de longitud 16 calculando una DFT de
512 puntos usando el siguiente programa.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 3.4
// Clculo numrico de la DTFT usando la DFT
// Genere la secuencia sinusoidal de longitud 16
k = 0:15;
x = cos(2*%pi*k*3/16);
// Calcule su DFT de 512 puntos
X = mtlb_fft(x);
XE = mtlb_fft(x,512);
// Grafique la respuesta en frecuencia
L = 0:511;
plot(L/512,abs(XE));
mtlb_hold
plot(k/16,abs(X),'o');
xlabel('Frecuencia angular normalizada');
ylabel('Magnitud');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
En la ltima figura resultante, los valores DFT X[k], mostrados por los crculos, son
precisamente las muestras de frecuencia de la DTFT en o=nk/ 8, 0<k<15 .
85
Convolucin lineal de dos secuencias de longitud finita
El programa siguiente determina la convolucin lineal de dos secuencias de longitud
finita usando la DFT y compara el resultado obtenido usando una convolucin lineal
directa. Las dos secuencias que se usarn como ejemplo son:
x| n=1 2 0 1 h| n=2 2 1 1
Las dos secuencias deben introducirse en forma de vector dentro de parntesis
cuadrados. El programa grafica el resultado de la convolucin lineal obtenida usando la
DFT y la diferencia entre este resultado y la secuencia obtenida usando la convolucin
directa lineal usando el mandato convol..
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 3.5
// Convolucin lineal por medio de la DFT
//x=[1 2 0 1]; h=[2 2 1 1];
// Lea las dos secuencias
x = input('Introduzca la primera secuencia = ');
h = input('Introduzca la segunda secuencia = ');
// Determine la longitud del resultado de la convolucin
L = length(x) + length(h) -1;
// Calcule las DFT's usando relleno de ceros
XE = mtlb_fft(x,L);
HE = mtlb_fft(h,L);
// Determine la DFT inversa del producto
86
y1 = mtlb_ifft(XE.*HE);
// Grafique la secuencia generada por la convolucin basada en la DFT y el error
// obtenido al comparar este resultado y el resultado de la convolucin lineal directa
k = 0:1:L-1;
subplot(2,1,1)
plot2d3('gnn',k,y1,5);
xlabel('Indice temporal n');ylabel('Amplitud');
title('Resultado de la convolucin lineal basada en la DFT');
y2 = convol(x,h);
error = y1 - y2;
subplot(2,1,2);
plot2d3('gnn',k,abs(error),3)
xlabel('Indice temporal n');ylabel('Amplitud');
title('Magnitud de la secuencia de error');
//////////////////////////////////////////////////////////////////////////////////////////////////////////
87
3.3.1 Resultados de la tercera prctica.
a) Resultados del programa 3.1
Al ejecutar esta secuencia en MATLAB se obtiene:
Figura 3.25 Calculo de la DFT en MATLAB.
Figura 3.26 Calculo de la DFT en SCILAB.
88
b) Resultados del programa 3.2
Para el programa 3.2 se obtiene en SCILAB:
Figura 3.27Secuencia temporal original en SCILAB.
Figura 3.28 Magnitud de las muestras de la DFT y fase de las muestras de la DFT en SCILAB.
89
Al ejecutar el programa en MATLAB se logro obtener las siguientes respuestas.
Figura 3.29 Secuencia temporal original en MATLAB.
Figura 3.30 Magnitud de las muestras de la DFT y fase de las muestras de la DFT en MATLAB.
90
c) Resultados del programa 3.3
Los resultados obtenidos al ejecutar el programa en SCILAB son:
Figura 3.31 Muestras originales DFT en SCILAB.
Figura 3.32 Parte real de las muestras temporales y parte real de las muestras temporales en SCILAB.
91
Para el caso de MATLAB se obtuvo.
Figura 3.33 Muestras originales DFT en MATLAB.
Figura 3.34 Parte real de las muestras temporales y parte real de las muestras temporales en
MATLAB.
92
d) Resultados del programa 3.4
Para SCILAB se obtiene el siguiente resultado.
Figura 3.35 Grafica de la respuesta en frecuencia en SCILAB.
Figura 3.36 Grafica de la respuesta en frecuencia en MATLAB
93
e) Resultados del programa 3.5
Para este programa se obtiene los siguientes resultados simulados:
Figura 3.37 Convolucin lineal por medio de la DFT en SCILAB.
Figura 3.38 Convolucin lineal por medio de la DFT en MATLAB.
94
Al comparar la magnitud de la secuencia de error, se nota una diferencia, esta se debe
a que los valores corresponden a datos en el orden de 10
-15
por lo que son valores
sumamente pequeos y tanto MATLAB como SCILAB aproximan estos usando algoritmos
distintos. Lo anterior origina la diferencia entre ambas secuencias.
3.4 Cuarta prctica.
Para esta prctica se trata el tema de la transformada z, el calculo de la expansin de
fracciones parciales y transformada z inversa.
A continuacin se muestra la cuarta prctica.
Procesamiento Digital de Seales IE-0102
Prctica #4 con SCILAB.
Transformada Z
Se solicita expresar la siguiente transformada Z en forma factorizada, graficar sus
polos y ceros y determinar sus regiones de convergencia:
G( z)=
2z
4
+16z
3
+44z
2
+56z+32
3z
4
+3z
3
15z
2
+18z12
Para llevar a cabo la factorizacin, se puede usar el siguiente programa en SCILAB:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Programa 4.1;
Determinacin de la forma factorizada de una transformada Z racional
num=[32 56 44 16 2]; den=[-12 18 -15 3 3];
//Para SCILAB 5.1 digite:
getf('SCI/modules/DSP/tfchk.sci');
getf('SCI/modules/DSP/tf2zp.sci');
95
[z,p,k] = mtlb_tf2zp(num,den);
m = abs(p);
disp('Los ceros estn en');disp(z)
disp('Los polos estn en');disp(p);
disp('Constante de ganancia');disp(k);
disp('Radios de los polos');disp(m);
//Para SCILAB 5.1 digite:
getf('SCI/modules/DSP/zp2tf.sci');
getf('SCI/modules/DSP/cplxpair.sci');
getf('SCI/modules/DSP/zp2sos.sci');
sos = mtlb_zp2sos(z,p,k);
disp('Secciones de segundo order');disp(real(sos));
h=poly(num,'z','c')/poly(den,'z','c');
plzr(h);
/////////////////////////////////////////////////////////////////////////////////////////////////////
Este ltimo resultado se interpreta como que la forma factorizada de la transformada
Z est dada por:
G( z)=
(0.0667+0.4z
1
+0.5333z
2
)(10.0+20.0z
1
+20.0z
2
)
(1.0+2.0z
1
4.0z
2
)(1.01.0z
1
+1.0z
2
)
=0.667
(1+6z
1
+8z
2
)(1+2z
1
+2z
2
)
(1+2z
1
4z
2
)(1z
1
+z
2
)

Las cuatro regiones de convergencia son dadas por:
96

1
z>3.2361

2
3.2361>z>1.2361

3
1.2361>z>1

4
1>z0
Ahora, se va a considerar la determinacin de la transformada Z racional desde las
posiciones de sus ceros y polos. Los ceros son: 0.21, 3.14, -0.3 + 0.5j, -0.3 0.5j; los polos
estn en: -0.45, 0.67, 0.81 + 0.72j, 0.81 0.72j; la constante de ganancia k es 2.2. El
programa SCILAB que se emplea para calcular la transformada Z racional es como sigue:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Programa 4.2
//Determinacin de la transformada Z racional desde sus polos y ceros
//format long
zr = input('Introduzca los ceros como vector fila = ');
pr = input('Introduzca los polos como vector fila = ');
// Se transpone los vectores fila de ceros y polos
// pr=[-0.45 0.67 0.81+0.72*%i 0.81-0.72*%i];
// zr=[0.21 3.14 -0.3+0.5*%i -0.3-0.5*%i];
z = zr'; p = pr';
k = input('Introduzca la constancia de ganancia = ');
//Para SCILAB 5.1 digite:
getf('SCI/modules/DSP/zp2tf.sci');
[num,den] = mtlb_zp2tf(z,p,k);
disp('Coeficientes del polinomio del numerador');disp(num);
97
disp('Coeficientes del polinomio del denominador');disp(den);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Los resultados deben coincidir con
G( z)=
2.2z
4
6.05z
3
2.22332z
2
1.63592z0.4932312
z
4
1.84z
3
+1.2294z
2
+0.23004z0.35411175
Expansin en fracciones parciales usando SCILAB
Usando SCILAB se puede determinar la expansin en fracciones parciales de una
transformada Z dada. As por ejemplo, considrese la transformada
G( z)=
18z
3
18z
3
+3z
2
4z1
El siguiente programa consigue lo esperado:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Programa 4.3
// De una transformada Z racional a la expansin en fracciones parciales
//
num = input('Introduzca los coeficientes del numerador = ');
den = input('Introduzca los coeficientes del denominador = ');
// num = [18 0 0 0]; den = [18 3 -4 -1];
getf('SCI/modules/DSP/residuez/polyval/polyval.sci');
getf('SCI/modules/DSP/residuez/deconv/deconv.sci');
98
getf('SCI/modules/DSP/residuez/polysci/polysci.sci');
getf('SCI/modules/DSP/residuez/mpoles/mpoles2.ssci');
getf('SCI/modules/DSP/residuez/meansci/meansci.sci');
getf('SCI/modules/DSP/residuez/residuez.sci');
[r,p,k] = residuez(num,den);
disp('Residuos'); disp(r')
disp('Polos');disp(p')
disp('Constantes');disp(k)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Hay que recordar que los coeficientes deben introducirse usando parntesis
cuadrados, como se indica a continuacin:
num = [18 0 0 0];
den = [18 3 -4 -1];
Los datos de salida son los residuos, las constantes (si las hay) y los polos de la
expansin de G(z). Para nuestro ejemplo,
Residuos: 0.36, 0.24, 0.4
Polos: 0.5, -0.3333, -0.3333
Constantes: ninguna en este caso
Ntese que la transformada Z de nuestro ejemplo tiene un polo doble en z = -1/3 =
-0.3333. Los resultados son interpretados de la siguiente manera:
G( z )=
0.36
10.5z
1
+
0.24
1+0.3333z
1
+
0.4
(1+0.3333z
1
)
2
99
Si se desea hacer el procedimiento inverso, en donde se comenzara con una
descripcin de G(z) como la dada arriba, entonces se podra usar el siguiente programa en
SCILAB:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Programa 4.4
//De la expansin en fracciones parciales a la transformada Z racional
r = input('Introduzca los residuos = ');
p = input('Introduzca los polos = ');
k = input('Introduzca las constantes = ');
// r= [0.4 0.24 0.36];p = [-0.3333 -0.3333 0.5];k = [0];
getf('SCI/modules/DSP/residuez/mpoles/mpoles.sci');
getf('SCI/modules/DSP/residuez/polysci/polysci.sci');
getf('SCI/modules/DSP/residuezinv/residuezinv2.sci');
[num,den] = residuezinv2(r,p,k)
disp('Coeficientes del polinomio del numerador');disp(num)
disp('Coeficientes del polinomio del denominador');disp(den)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Los datos que se solicitan en el programa anterior deben introducirse usando
parntesis cuadrados:
r = [0.4 0.24 0.36]
100
p = [-0.3333 -0.3333 0.5]
k = [0]
Vase que es importante el orden en que se introducen los valores, pues deben
corresponder a la representacin que se se hace de los polos dobles y simples. El programa
da como salida los coeficientes del numerador y del denominador, en potencias
descendientes de z. Los coeficientes son exactamente los mismos si se multiplica cada
coeficiente por 18.
Coeficientes del polinomio del numerador
1.0000 0.0533 -0.0267 0
Coeficientes del polinomio del denominador
1.0000 0.1666 -0.2222 -0.0555
Transformada inversa Z
La inversa de la transformada Z racional puede tambin calcularse usando MATLAB.
El mandato impz puede utilizarse para este propsito.
[h,t] = impz(num,den.L)
Los datos de entrada consisten de los vectores num y den que contienen los
coeficientes de los polinomios del numerador y del denominador dados en potencias
descendientes de z. La salida es el vector de la respuesta al impulso h y el vector t que hace
de ndice temporal. En el primer mandato, la longitud L de h es determinada
101
automticamente por el computador con t = 0:L-1, en tanto que en los dos mandatos
restantes el usuario la proporciona. En el ltimo mandato, el intervalo de tiempo es
escalado de modo que el intervalo de muestreo es igual al recproco de la funcin de
transferencia. El valor supuesto de la funcin de transferencia es 1.
Otra manera de llegar al resultado es mediante el uso del mandato filter:
y = filter(num,den,x)
donde y es el vector de salida que contiene los coeficientes de la representacin en
series de potencias de H(z) expresado en potencias negativas ascendientes de z. Los
coeficientes del numerador y denominador de H(z) expresados en potencias ascendientes
negativas de z son dos de los vectores de datos de entrada num y den. La longitud de x es la
misma que la de y, y todos sus elementos son cero excepto por el primero que es igual a 1.
Se presenta dos programas a continuacin para ilustrar el uso de los mandatos
anteriores.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Programa 4.5
// Expansin en series de potencias de una transformada Z racional
//
// Introduzca el nmero de coeficientes de transformada Z inversa a ser calculados
L = input('Introduzca la longitud del vector de salida = ');
// Lea los coeficientes del numerador y del denominador de la transformada Z
num = input('Introduzca los coeficientes del numerador = ');
den = input('Introduzca los coeficientes del denominador = ');
102
// Calcule el nmero deseado de coeficientes de la transformada inversa
//Solucin 1
x = [1 zeros(1,L-1)];
y = filter(num,den,x);
disp('Coeficientes de la expansion en series de potencias');
disp(y)
//Solucin 2
k = 0:1:L-1;
t=k';
getf('SCI/modules/DSP/impz/impz.sci');
[y,t]=impz(num,den,L)
disp('Coeficientes de la expansion en series de potencias');
disp(y)
///////////////////////////////////////////////////////////////////////////////////////////////////////
Los datos de entrada llamados por el programa son el nmero deseado de coeficientes
y los vectores de los coeficientes del numerador y del denominador de la transformada Z
racional, con estos ltimos introducidos dentro de parntesis cuadrados. Para nuestro
ejemplo,
L = 11;
num = [1 2];
den = [1 0.4 -0.12];
103
Los datos de salida son los coeficientes deseados de la transformada Z inversa que
deben aparecer como:
1.0000 1.6000 -0.5200 0.4000 -0.2224 0.1370 -0.0815 0.0490 -0.0294 0.0176 -
0.0106
Este resultado se puede chequear usando divisin sinttica.
A continuacin se ofrece un programa para determinar la transformada Z inversa pero
usando el mandato filter:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Programa 4.6
// Expansin en series de potencias de una transformada Z racional
//
// Introduzca el nmero de coefficientes de la transformada Z inversa a calcularse
N = input('Introduzca la longitud del vector de salida = '); // N=5;
// Introduzca los coeficientes del numerador y del denominador de la transformada Z
num = input('Introduzca los coeficientes del numerador = '); // num = [1 2];
den = input('Introduzca los coeficientes del denominador = ');// den = [10.4 -0.12];
// Calcule el nmero deseado de coeficientes de la transformada inversa
x = [1 zeros(1,N-1)];
y = filter(num,den,x);
disp('Coeficientes de la expansin en series de potencias');
disp(y)
104
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
El programa anterior pregunta por la longitud deseada del vector de salida y (ponga N
= 5) y se le introduce tambin los vectores que contienen los coeficientes del numerador y
del denominador dentro de parntesis cuadrados y en potencias descendientes positivas de
z. Despus de calcular el vector de salida, muestra sus elementos que son los coeficientes
de la expansin en series de potencias de la transformada Z racional. El programa supone
que la transformada Z es una fraccin propia con el polinomio del denominador con un
orden mayor que el del numerador.
Usando los valores para num y den del ejemplo inmediato anterior, la salida es la
siguiente: 0.0962 0.1934 0.0022 0.0000 0.0000
3.4,1 Resultados de la cuarta prctica
a) Resultados del programa 4.1
Los resultados al ejecutar esta parte de la prctica en MATLAB son:
Resultados:
Los ceros estan en:
-4.0000-2.0000 -1.0000 + 1.0000i -1.0000 - 1.0000i
Los polos estan en:
-3.2361 1.2361 0.5000 + 0.8660i 0.5000 - 0.8660i
Constante de ganancia
0.6667
Radios de los polos
105
3.2361 1.2361 1.0000 1.0000
Figura 3.38 Polos y ceros en el plano Z obtenidos en MATLAB.
Al ejecutar en SCILAB se obtiene:
Los ceros estan en
- 4. - 2. - 1. + i - 1. - i
Los polos estan en
- 3.236068 1.236068 0.5 + 0.8660254i 0.5 - 0.8660254i
Constante de ganancia
0.6666667
Radios de los polos
3.236068 1.236068 1. 1.
106
Figura 3.39 Polos y ceros en el plano Z obtenidos en SCILAB.
b) Resultados del programa 4.2
Resultados obtenidos en MATLAB y SCILAB son:
Resultados:
Coeficientes del polinomio del numerador
2.2000 -6.0500 -2.2233 -1.6354 0.4932
Coeficientes del polinomio del denominador
1.0000 -1.8400 1.2294 0.2300 -0.3541
c) Resultados del programa 4.3
Resultados obtenidos con Matllab.
Residuos
0.3600 0.2400 0.4000
Polos
0.5000 -0.3333 -0.3333
107
Constantes
0
Resultados elaborados con MATLAB.
d) Resultados del programa 4.4
Coeficientes del polinomio del numerador
1.0000 0.0533 -0.0267 0
Coeficientes del polinomio del denominador
1.0000 0.1666 -0.2222 -0.0555
e) Resultados del programa 4.5
y= 1. 1.6 - 0.52 0.4 - 0.2224 0.13696 - 0.081472 0.049024 - 0.0293862
0.0176374 - 0.0105813
f) Resultados del programa 4.6
Tanto con SCILAB como con MATLAB el resultado es:
0.0962 0.1934 0.0022 0.0000 0.0000
108
3.5 Quinta prctica
En esta prctica se trata el tema de muestreo y conversin digital analgica, el traslape
y la interpolacin y decimacin.
A continuacin se muestra la quinta prctica.
Procesamiento Digital de Seales IE-0102
Prctica #5 con SCILAB.
Parte A: Muestreo y Conversin Digital/Analgica
Se simular el muestreo de seales de tiempo continuo o analgicas para producir
seales de tiempo discreto. Puesto que SCILAB slo puede procesar seales de tiempo
discreto (vectores), no se puede utilizar realmente seales analgicas sin el uso de
dispositivos externos de conversin analgico/digitales (A/D). En su lugar, por
consiguiente, se simular el muestreo analgico mediante el muestreo de las secuencias de
tiempo discreto correspondientes, que se conoce como decimacin de las secuencias.
Recprocamente, se simular la conversin digital-analgica (D/A) mediante la
interpolacin de secuencias de tiempo discreto. La interpolacin y la decimacin son
operaciones bastante tiles, aparte de su uso en la simulacin de las conversiones A/D y
D/A.
Para generar un tren de impulsos de tiempo discreto para su empleo en muestreo, se
obtiene la respuesta al impulso del filtro peine H(z) = 1/(1 - z-4), como sigue:
a = [1 0 0 0 -1];
109
d = [1 zeros(1,127)];
train = filter(1,a,d);
n = 0:127;
//Grafquese el vector train contra el vector n.
plot(n,train);
Genrese tambin una seal coseno con 32 muestras por ciclo mediante
x = cos(2*%pi*n/32);
El espectro correspondiente sobre el intervalo de Nyquist normalizado (-1,1) se
obtiene entonces como.
s=1; nfft =128;b=x;a=1;
nb = length(b);
na = length(a);
a = [a zeros(1,nb-na)];
b = [b zeros(1,na-nb)];
n = length(a);
h = (mtlb_fft(b,s*nfft)./mtlb_fft(a,s*nfft)).';
h = h(1:nfft);
h = h(:);
hh = h;
deltaF = (2*%pi)/nfft;
w = linspace(0,2*%pi-deltaF,nfft);
w = w(:);
110
wp = mtlb_fftshift(w)/%pi -1;
plot(wp,hh);
Otra alternativa es usar la funcin generada para esta aplicacin:
n = 0:127;
x = cos(2*%pi*n/32);
getf('SCI/modules/DSP/freqz/freqz.sci');
[hh,w]=freqz(x,1,128,1);
wp = mtlb_fftshift(w)/%pi -1;
plot(wp,real(abs(hh)));
Por comparacin, tambin ejectese el comando plot(w,hh).
Ntese que los impulsos tienen forma triangular en estos grficos. (El espectro es real
porque una seal coseno es par). Simlese muestrear la seal coseno con ocho muestras por
ciclo multiplicndola (elemento por elemento) por el tren de impulsos, es decir,
n = 0:127;
a = [1 0 0 0 -1];
d = [1 zeros(1,127)];
train = filter(1,a,d);
x = cos(2*%pi*n/32);
y = x.*train;
M=8;
111
yy=intdec(y,M/32);
nn=[0:length(yy)-1];
plot2d3('gnn',nn,yy-3);
Para que pueda compara grafique
plot(n,y);
Grafquese la seal muestreada yy y su espectro asociado como se hizo anteriormente
para la seal hh. Ntese las imgenes espectrales alrededor de cada mltiplo de la nueva
razn de muestreo (normalizada, w
p
= 0.5). Dado que la seal coseno es perfectamente de
banda limitada y se satisface el teorema del muestreo, no se ha producido ningn
aliasing.
Para estudiar las propiedades espectrales de un convertidor D/A, simlese su
respuesta al impulso efectiva y su respuesta de magnitud mediante:
h = ones(1,4);
H = mtlb_fft(h,128);
plot(mtlb_fftshift(wp),mtlb_fftshift(abs(H)));mtlb_hold;
Aplicando este filtro D/A a la seal muestreada y, se obtiene en el dominio del
tiempo
yd = filter(h,1,y);
plot(n,yd);plot(n,x)
y en el dominio de la frecuencia
Yd = mtlb_fft(yd);
plot(wp,abs(Yd));mtlb_hold;
112
Explquese los componentes espectrales residuales alrededor de las frecuencias 0.5 y
1.
Para aplicar un postfiltro ideal con una frecuencia de corte de un octavo la frecuencia
de muestreo a la salida del convertidor D/A, ejectese los siguientes mandatos:
Yc = Yd;Yc(17:112) = zeros([0:95]);
plot(wp,abs(Yc));xgrid;
yc = mtlb_ifft(Yc);
plot(n,yc,n,x);mtlb_hold;
Ntese el ligero desplazamiento de fase y la atenuacin en la amplitud en la salida del
postfiltro yc contra la seal original x causada por el convertidor D/A.
Parte B: Traslape (Aliasing)
Para un primer ejemplo de una seal no bandalimitada y el aliasing resultante
despus del muestreo, se utilizar una seal de onda cuadrada. Para sintetizar ocho ciclos de
una onda cuadrada de tiempo discreto y para simular su espectro de magnitud DTFT, se
hace:
n = 0:127;
x = cos(2*%pi*n*8/128 + 0.01);
y = sign(x);
El pequeo desplazamiento de fase (0.01) asegura un signo correcto.
plot2d3('gnn',n,y);
b=y;a=1;s=2; nfft =64;
nb = length(b);
113
na = length(a);
a = [a zeros(1,nb-na)];
b = [b zeros(1,na-nb)];
n = length(a);
h = (mtlb_fft(b,s*nfft)./mtlb_fft(a,s*nfft)).';
h = h(1:nfft);
h = h(:);
hh = h;
deltaF = %pi/nfft;
w = linspace(0,%pi-deltaF,nfft);
w = w(:);
mag = abs(hh);
plot(w,mag);
Ntese que la onda cuadrada tiene slo armnicas impares, que decaen de la forma 1/
k (pero no tan exactamente, pues las armnicas superiores para k = 9, 11, 13, caen
encima de las correspondientes para k = 1, 3, 5, 7). Para producir casos donde el aliasing
de las armnicas superiores no se disfrace de esta manera, sintetice una onda cuadrada con
12 ciclos sobre 128 muestras, y otra con 11 ciclos, y grafquese sus espectros de magnitud
como anteriormente se hizo.
Genrese ahora una secuencia exponencial causal y su espectro de magnitud mediante
n=0:127;
114
x = exp(-n/5);
b=x;a=1;s=2; nfft =64;
nb = length(b);
na = length(a);
a = [a zeros(1,nb-na)];
b = [b zeros(1,na-nb)];
n = length(a);
h = (mtlb_fft(b,s*nfft)./mtlb_fft(a,s*nfft)).';
h = h(1:nfft);
h = h(:);
hh = h;
deltaF = %pi/nfft;
w = linspace(0,%pi-deltaF,nfft);
w = w(:);
magX = abs(hh);
plot(w,magX);
Muestre el exponencial a un cuarto de la razn de muestreo original usando el tren
de impulsos train de la parte A, es decir,
a = [1 0 0 0 -1];
d = [1 zeros(1,127)];
train = filter(1,a,d);
y = x.*train;
115
Para computar el espectro correspondiente y para compararlo con el del exponencial
original (despus de un escalamiento adecuado), se ejecuta los mandatos,
b=x;a=1;s=2; nfft =64;
nb = length(b);
na = length(a);
a = [a zeros(1,nb-na)];
b = [b zeros(1,na-nb)];
n = length(a);
h = (mtlb_fft(b,s*nfft)./mtlb_fft(a,s*nfft)).';
h = h(1:nfft);
h = h(:);
hh = h;
deltaF = %pi/nfft;
w = linspace(0,%pi-deltaF,nfft);
w = w(:);
magX = abs(hh);
by=y;ay=1;sy=2; nffty =64;
nby = length(by);
nay = length(ay);
ay = [ay zeros(1,nby-nay)];
by = [by zeros(1,nay-nby)];
ny = length(ay);
116
yy = (mtlb_fft(by,sy*nffty)./mtlb_fft(ay,sy*nffty)).';
yy = yy(1:nffty);
yy = yy(:);
Y = yy;
deltaF = %pi/nfft;
w = linspace(0,%pi-deltaF,nfft);
w = w(:);
magY = abs(Y);
magY = magY*magX(1)/magY(1);
plot(w,magX,w,magY);
Ntese el efecto del aliasing. Simlese ahora el efecto de la conversin D/A como
en la parte A, y comprese el espectro de salida asociado con los espectros precedentes para
x e y.
Parte C: Interpolacin y decimacin
Se puede interpolar o decimar secuencias usando los mandatos interp y decimate
(individualmente o en combinacin para cambiar la razn de muestreo por un factor
racional L/K), o el nico comando resample. Por ejemplo, considrese la siguiente
interpolacin de un senoide por L=4:
x = linspace(0,39,10)';
y = cos(2*%pi*x/5);
dk = splin(x,y);
xx = linspace(0,39,40)';
117
[yyk, yy1k, yy2k] = interp(xx, x, y, dk);
plot2d(xx, [yyk])
plot2d(x, y, -9)
Compare los valores interpolados yyk con los valores ideales xi. Dnde ocurre la
mayor desviacin? Un despliegue en el dominio de la frecuencia del error de interpolacin
es proporcionado por
Y = mtlb_fft(yyk);
plot2d(m,abs(Y),2);mtlb_hold;
Cmo deberan de ser estos valores de la FFT? (Recurdese que la FFT es un
algoritmo rpido para calcular la transformada de Fourier). Repita el experimento anterior
para
y = sin(2*%pi*x/5);
y tambin para las secuencias impulso
y = zeros(1,10);y(5) = 1;
y = zeros(1,10);y(10) = 1;
Ntese las respuestas al impulso y de frecuencia (variantes con el tiempo) del filtro
interpolador.
Ahora invirtase el experimento para chequear la decimacin, o sea,
m = 0:39; n = 0:9;
xi = cos(2*%pi*m/20);
xii = cos(2*%pi*m/20-5.43);
//el 5,43 es debido a un desfase originado por la funcin intdec de scilab.
118
yy=intdec(xii,1/4);
plot2d(4*n+3,yy,-3);plot(m,xi);
Ntese que con los desplazamientos de tiempo apropiados, como el dado, la
decimacin ejecutada sobre este senoide es casi perfecta. Empero, reptase el experimento
para otras frecuencias tales como
xi = cos(4*%pi*m/20);
xi = cos(2.5*%pi*m/20);
3.5.1 Resultados de la quinta prctica.
a) Resultados de la parte A.
Al ejecutar esta parte de la sexta prctica en MATLAB se obtine:
Figura 3.40 Tren de pulsos en MATLAB y SCILAB.
119
Figura 3.41 Espectro correspondiente sobre el intervalo de Nyquist normalizado (-1,1) en
MATLAB y SCILAB.
Figura 3.42 Seal coseno con ocho muestras por ciclo multiplicndola (elemento por elemento) por el
tren de impulsos.
120
Figura 3.43 Respuesta al impulso efectiva y su respuesta de magnitud en MATLAB y SCILAB.
Figura 3.44 Seal en el dominio del tiempo obtenida con MATLAB y SCILAB.
121
Figura 3.45 Seal en el dominio de la frecuencia obtenida con MATLAB y SCILAB.
Figura 3.46 Seales para aplicar un postfiltro en MATLAB y SCILAB.
122
Figura 3.47 Respuesta en el tiempo al aplicar FFT en MATLAB y SCILAB.
b) Resultados de la parte B
Ejecutando en MATLAB obtenemos:
Figura 3.48 Primer ejemplo de aliasing en MATLAB y SCILAB.
123
Figura 3.49 Respuesta de FFT MATLAB y SCILAB.
Figura 3.50 Secuencia exponencial causal en MATLAB y SCILAB.
124
Figura 3.51 Espectro de frecuencia y seal original en MATLAB y SCILAB.
c) Resultados de la parte C
Figura 3.52 Interpolacin de un senoide por L = 4
125
Figura 3.53 Despliegue en el dominio de la frecuencia del error en MATLAB y
SCILAB.
Figura 3.54 Chequeo de decimacin en MATLAB y SCILAB.
126
3.6 Sexta prctica
A continuacin se presenta la sexta prctica.
Procesamiento Digital de Seales IE-0102
Prctica #6 con SCILAB.
Tcnica de relleno con ceros y de enventanado.
Parte A: Tcnica de rellenado con ceros.
El relleno con ceros es la operacin de extender una secuencia de longitud N
1
a una
de longitud N
2
> N
1
mediante el agregado de (N
2
- N
1
) muestras cero a la secuencia inicial.
Esto se hace por dos razones: (1) para convertir la convolucin circular en convolucin
lineal (en el dominio del tiempo) o, (2) para interpolar entre las N
1
muestras de la DFT (en
el dominio de la frecuencia). Para demostrar el primero de estos efectos, sintetice un pulso
coseno de longitud 40 mediante los mandatos
n = [0:39];
x = cos(2*%pi*4*n/40);
Calcule ahora su DFT usando el algoritmo de la FFT escribiendo
X = mtlb_fft(x,64);
Al especificar una FFT de 64 puntos se hace que el pulso de 40 muestras sea
rellenado con ceros hasta una longitud de 64 puntos antes de calcular la DFT.
Convolucinese el pulso consigo mismo elevando al cuadrado cada elemento de su DFT
para luego sacar la transformada inversa de la siguiente manera:
Y = X.^2;
127
y =mtlb_ifft(Y);
n = [0:63];
f0=scf(0);clf;
plot(n,real(y),-3);mtlb_hold;
mtlb_axis([min(n) max(n) min(real(y)) max(real(y))]);
xlabel('Indice n');
ylabel('Funcion resultante');
title('Efectos de la convolucion circular');
El mandato real(y) se utiliza para tomar la parte real de la secuencia y, pues en
general, tal secuencia es compleja. En este caso, la parte compleja es infinitesimal, por lo
que puede despreciarse sin problema. El mandato mtlb_axis se utiliza para encuadrar bien
la curva dentro del marco de la figura. Ntese que la porcin inicial de la seal resultante
est distorsionada por los efectos de traslape y de enrollamiento de la convolucin circular.
Para evitar esto, se debe incrementar el relleno con ceros hasta por lo menos completar 80
muestras, despus de lo cual podemos calcular, elevar al cuadrado y sacar la transformada
inversa de la DFT para realizar la convolucin lineal. Hgase esto de la siguiente forma:
X1 = mtlb_fft(x,80);
Y1 = X1.^2;
y1 = mtlb_ifft(Y1);
n1 = [0:79];
f1=scf(1);clf;
scf(f1);
128
plot2d(n,real(y),1)
plot2d(n1,real(y1),2);mtlb_hold;
xlabel('Indice n');
ylabel('Convolucion circular y relleno con ceros');
title('Efectos del relleno con ceros');
Un resultado equivalente puede obtenerse usando el mandato y = convol(x,x) pero
la convolucin rpida usando el mandato FFT reduce sustancialmente el tiempo de clculo
requerido.
Para demostrar el efecto espectral del relleno con ceros, sintetice tres ciclos de una
seal coseno con base en 32 muestras, con y sin relleno con ceros a una longitud de T
puntos:
T = 256;
// T: tamao del vector rellenado con ceros
n = [0:31];
x = cos(2*%pi*3*n/(max(n)+1));
x1 = [x zeros(1,T-(max(n)+1))];
n1 = [0:(T-1)];
Calcule y grafique las correspondientes magnitudes de la DFT con y sin relleno con
ceros ejecutando los mandatos:
mag = abs(mtlb_fft(x));
mag1 = abs(mtlb_fft(x1));
129
n2 = (T/(max(n)+1))*n;
f2=scf(2);clf;
scf(f2);
plot2d(n1,mag1,3); plot2d(n2,mag,5);mtlb_hold;
alto = max([max(mag1) max(mag)]);
bajo = min([min(mag1) min(mag)]);
mtlb_axis([min(n1) max(n1) bajo alto]);
Repita el procedimiento seguido para la seal coseno inmediata anterior para la seal
y = cos(2*%pi*3.25*n/(max(n)+1));
y note la diferencia entre las DFTs de 32 puntos de la seal coseno original y esta
ltima. Haga comentarios en el sentido de justificar cualquier discrepancia.
y1 = [y zeros(1,T-(max(n)+1))];
magy = abs(mtlb_fft(y));
magy1 = abs(mtlb_fft(y1));
f3=scf(3);clf;
scf(3);
plot2d(n1,magy1,6);plot2d(n2,magy,-3);mtlb_hold;
alto = max([max(magy1) max(magy)]);
bajo = min([min(magy1) min(magy)]);
mtlb_axis([min(n1) max(n1) bajo alto]);
130
Parte B: Tcnica de enventanado
La ventana rectangular implcita en la transformada discreta de Fourier tiene lbulos
secundarios que estn a lo menos 13 decibelios por debajo del lbulo principal y que
decaen con una pendiente de 6 dB/octava. La ventana von Hann (Hanning), por otro lado,
tiene lbulos secundarios por debajo de 31 decibelios del lbulo principal y una pendiente
de cada de 18 dB/octava, mientras que la ventana Blackman tiene lbulos secundarios por
debajo de 57 decibelios, con una pendiente de cada similar a la ventana von Hann, de
donde las seales pequeas son ms fciles de detectar en la presencia de seales grandes
usando las ventanas Blackman o von Hann que con la ventana rectangular. Esto se consigue
al precio de una prdida de resolucin espectral para seales muy cercanas entre s al
emplearse ventanas distintas de la rectangular. Recurdese que la resolucin tiene que ver
con el ancho del lbulo principal de una ventana: al emplearse una ventana con un lbulo
principal angosto, se obtiene una mayor resolucin; de lo contrario, disminuye la
resolucin.
Por ejemplo, genrese una seal con dos senoides,
N = 127;
n = [0:N];
x = sin(2*%pi*4.5*n/(N+1)) + cos(2*%pi*6.5*n/(N+1));
f1=scf(1);clf;
scf(1);
plot(n,x);mtlb_hold;
mtlb_axis([min(n) max(n) min(x) max(x)]);
131
xlabel('Indice n');
ylabel('Funcion');
title('Dos senoides juntos');
Aplquese las ventanas von Hann y Blackman a la secuencia (realizando una
multiplicacin elemento por elemento) mediante los mandatos siguientes y grafquese los
resultados:
w=window('hn',N+1)
w1=w';
xh = x.*w1';
w2=window('kr',N+1,8.6);
w3=w2';
xb = x.*w2;
f2=scf(2);clf;
plot2d(n,xh,);
plot2d(n,xb,3);
mtlb_axis([min(n) max(n) min(xh) max(xh)]);
xlabel('Indice n (Magenta: von Hann, azul: Blackman)');
ylabel('Funcion enventanada');
title('Efecto de ventanas von Hann y Blackman');
132
Las ventanas se utilizan con la intencin de eliminar el efecto de la longitud finita de
las secuencias sobre el espectro. Tal efecto se manifiesta con la dispersin espectral
(leakage en ingls).
Calclese y grafquese ahora el espectro de magnitud correspondiente en decibelios
para la ventana von Hann y para la Blackman usando los mandatos:
Xh = mtlb_fft(xh);
dbh = 20*log10(abs(Xh));
dbh = dbh - max(dbh);
f3=scf(3);clf;
scf(3);
plot2d(n,dbh,3);mtlb_hold;
mtlb_axis([min(n) max(n) min(dbh) max(dbh)]);
xlabel('Indice n');
ylabel('Espectro');
title('Espectro con ventana von Hann');
Xb = mtlb_fft(xb);
dbb = 20*log10(abs(Xb));
dbb = dbb - max(dbb);
f4=scf(4);clf;
scf(4);
plot2d(n,dbb,2);mtlb_hold;
133
mtlb_axis([min(n) max(n) min(dbb) max(dbb)]);
xlabel('Indice n');
ylabel('Espectro');
title('Espectro con ventana Blackman');
En ambos espectros debiera aparecer los dos componentes senoidales. Si no son
distinguibles, explique la razn. Procdase ahora a rellenar las secuencias xh y xb con
ceros, recalclese ambos espectros y verifquese si se distinguen los dos componentes
senoidales.
L = 4*(N+1);
// L: hasta donde se completa con ceros
xh = [xh zeros(1,L-(N+1))];
xb = [xb zeros(1,L-(N+1))];
n = [0:4*(N+1)-1];
Xh = mtlb_fft(xh);
dbh = 20*log10(abs(Xh));
dbh = dbh - max(dbh);
f5=scf(5);clf;
scf(5);
plot2d(n,dbh,3);mtlb_hold;
mtlb_axis([min(n) max(n) min(dbh) max(dbh)]);
xlabel('Indice n');
ylabel('Espectro de secuencia rellenada con ceros');
134
title('Espectro con ventana von Hann');
Xb = mtlb_fft(xb);
dbb = 20*log10(abs(Xb));
dbb = dbb - max(dbb);
f6=scf(6);clf;
scf(6);
plot2d(n,dbb,6);mtlb_hold;
mtlb_axis([min(n) max(n) min(dbb) max(dbb)]);
xlabel('Indice n');
ylabel('Espectro de secuencia rellenada con ceros');
title('Espectro con ventana Blackman');
Para examinar el mbito dinmico de las dos ventanas anteriores para este ejemplo, es
decir, su capacidad para distinguir componentes espectrales dbiles y cercanos entre s,
genrese una seal multisenoidal de la forma siguiente:
N = 127;
n = [0:N];
arg = 2*%pi*n/(N+1);
x = sin(10*arg) + 0.001*(cos(15*arg) + sin(20*arg) + cos(25*arg));
f7=scf(7);clf;
scf(7);
plot2d(n,x,4);mtlb_hold;
135
mtlb_axis([min(n) max(n) min(x) max(x)]);
xlabel('Indice n');
ylabel('Funcion multisenoidal');
title('Funcion con cuatro senoides');
El indicador k dentro del mandato plot indica que se debe usar el color negro. Si su
versin de SCILAB no lo tiene, utilice otro indicador de color. Utilcese ahora ventanas
von Hann y Blackman y aplquense sobre la secuencia:
w=window('hn',N+1);
w1=w';
xh = x.*w1';
w2=window('kr',N+1,8.6);
w3=w2';
xb = x.*w2;
Ahora, rellnense las dos secuencias con ceros, calclense y grafquense los espectros
de magnitud correspondientes en decibelios. Verifquese cules de los cuatro senoides
pueden distinguirse en los espectros y cul de las dos ventanas para este ejemplo da
mejores resultados.
L = 4*(N+1);
xh = [xh zeros(1,L-(N+1))];
xb = [xb zeros(1,L-(N+1))];
n = [0:4*(N+1)-1];
Xh = mtlb_fft(xh);
136
dbh = 20*log10(abs(Xh));
dbh = dbh - max(dbh);
f8=scf(8);clf;
scf(8)
plot2d(n,dbh,3);mtlb_hold;
mtlb_axis([min(n) max(n) min(dbh) max(dbh)]);
xlabel('Indice n');
ylabel('Espectro de secuencia rellenada con ceros');
title('Espectro de secuencia enventanada con ventana von Hann');
Xb = mtlb_fft(xb);
dbb = 20*log10(abs(Xb));
dbb = dbb - max(dbb);
f9=scf(9);clf;
scf(9);
plot2d(n,dbb,6);mtlb_hold;
mtlb_axis([min(n) max(n) min(dbb) max(dbb)]);
xlabel('Indice n');
ylabel('Espectro de secuencia rellenada con ceros');
title('Espectro de secuencia enventanada con ventana Blackman');
Es interesante a esta altura del anlisis apreciar el efecto amortiguador que tienen las
ventanas sobre el fenmeno de la dispersin. Para visualizar tal efecto, ejectense los
siguientes mandatos y realcese un comentario sobre los resultados. Fundamentalmente, los
137
mandatos que a continuacin se proponen realizan una comparacin entre la ventana
rectangular y las dos ventanas estudiadas en esta prctica.
x = [x zeros(1,L-(N+1))];
n = [0:4*(N+1)-1];
X = mtlb_fft(x);
dbr = 20*log10(abs(X));
dbr = dbr - max(dbr);
f10=scf(10);clf;
scf(10);
plot2d(n,dbr,1);
plot2d(n,dbh,3);
mtlb_axis([min(n) max(n) min(dbh) max(dbh)]);
xlabel('Indice n (secuencias rellenadas con ceros)');
ylabel('Comparacion de espectros');
title('Efectos de ventanas rectangular y von Hann');
f11=scf(11);clf;
scf(11);
plot2d(n,dbr,5);
plot2d(n,dbb,9);mtlb_hold;
mtlb_axis([min(n) max(n) min(dbb) max(dbb)]);
xlabel('Indice n (secuencias rellenadas con ceros)');
ylabel('Comparacion de espectros');
138
title('Efectos de ventanas rectangular y Blackman');
Nota: Es siempre posible mejorar esta prctica, especialmente en lo que concierne a
utilizar una mejor programacin que la propuesta para conseguir los mismos resultados.
Como estudiante, sintase libre para usar su creatividad.
3.6.1 Resultados de la sexta prctica.
a) Resultados de la parte A
La siguiente figura muestra a la izquierda la simulacin en SCILAB y a la derecha la
simulacin en MATLAB.
Figura 3.55 Efectos de la convolucin circular.
Figura 3.56 Convolucion circular y rellenos con ceros.
139
Figura 3.57 Magnitudes de la DFT con y sin relleno.
Figura 3.58 Resultados de las ventanas von Hann y Blackman en seal generada con dos senoides.
140
b) Resultados de la parte B
Figura 3.60 Espectro de magnitud correspondiente en decibelios para la ventana von Hann y para la
Blackman.
141
Figura 3.62 Efectos de la ventana rectangular y Von Hann y rectangular con ventana de
Blackman.
3.7 Stima prctica
En esta prctica se da la modificacin de un archivo de audio tipo wav aplicando
filtros digitales, lo que permite generar efectos de reverberacin, eco, etc.
A continuacin se muestra la sptima prctica en SCILAB.
Procesamiento Digital de Seales IE-0102
Prctica #7 con SCILAB.
Procesamiento de seales de audio.
Entre las funciones de SCILAB estn las funciones loadwave y wavread que
permiten cargar un archivo de audio .wav.
142
En la carpeta DSP/wavfile se encuentra un archivo llamado DSP.wav, cargue este
archivo de las siguiente forma:
--> x=wavread(path); //El path es la direccin del directorio raz donde esta el archivo
// para estudiantes que utilizan SCILAB-5.1 y copiaron la carpeta DSP en la carpeta
modules
// dentro del directorio de SCILAB en archivos de programas pueden utilizar
--> x=wavread('SCI/modules/DSP/wavfile/DSP.wav');
//donde el path sera path = 'SCI/modules/DSP/wavfile/DSP.wav
Con esto se abre el archivo DSP.wav en el directorio C:\Archivos de programa\scilab-
5.1.1\modules\DSP\wavfile\DSP.wav
Tambin puede utilizar:
--> x=loadwave('path') // Las comillas indican que la entrada es un string
Ahora podemos escuchar el archivo cargado tecleando.
--> [a]=playsnd(x);
Eco y reverberacin
Frecuentemente se utilizan filtros digitales para el procesamiento de seales de audio,
esto con el objetivo de crear efectos especiales. Dos de estos efectos son el eco y la
reverberacin.
Un filtro de eco puede presentar el siguiente diagrama.
143
Figura 3.63 Filtro de eco simple.
Para este diagrama la ecuacin de diferencias ser y| n=x| n+o x| nD
Para generar un efecto de eco en nuestra seal de audio digite lo siguiente:
//Reverberador multieco
//Generando efecto de multieco
d=loadwave('SCI/modules/DSP/wavfile/DSP.wav');
a=length(d)/2;
a=round(a)-10;
for i=1:a-1;
b=d(1,i);
y(i)=b;
end
f=length(y)/2;
y1=y(1:f); y2=y(f+1:length(y));
num=[0,zeros(1,2000),1];
den=[1,zeros(1,2000),-0.8];
stacksize('max');
x1=filter(num,den,y1); x2=filter(num,den,y2); //Durara varios minutos
r=length(x1); // igual al ancho de x2
144
x=x1;
for i=r+1:r*2-1
x(i)=x2(i-r);
end
savewave('SCI/modules/DSP/wavfile/Multieco.wav',x);
Ahora podemos escuchar nuestro efecto de audio que fue generado y guardado en la
carpeta indicada por el path en la funcin savewave. La respuesta impulsional tpica de
este tipo de filtros se muestra a continuacin.
//Respuesta impulsional tpica
I =[1,zeros(1,60)];
numi=[0,zeros(1,10),1];
deni=[1,zeros(1,10),-0.8];
d2= filter(numi,deni,I);
plot2d3('gnn',d2); plot2d([1:length(d2)],d2,-9);
xlabel('ndice de muestreo');
ylabel('Amplitud');
title(['Respuesta impulsional tpica']);
La respuesta en magnitud se obtiene de la siguiente forma:
//Respuesta de magnitud
getf('SCI/modules/DSP/freqz/freqz.sci')
[h1,w] = freqz(numi,deni,512);
plot(w/%pi,20*log10(abs(h1)));grid;
145
xlabel('Frecuencia normalizada');
ylabel('Magnitud');
title(['Respuesta de magnitud']);
Reverberador de sonido ambiente (reverberador de Schroeder)
Para este caso se tiene una combinacin de 4 filtros IIR y dos filtros pasatodo como
se indica en el siguiente diagrama.
146
El efecto obtenido es similar al lo que ocurre en un recinto cerrado como es una sala
de conciertos.
Genere el siguiente cdigo de SCILAB para obtener este efecto.
//Reverberador de sonido natural
stacksize('max');
a1=0.6; a2=0.4; a3=0.2; a4=0.1; a5=0.7; a6=0.6; a7=0.8;
R1=700; R2=900; R3=600; R4=400; R5=450; R6=390;
[d]=loadwave('SCI/modules/DSP/wavfile/DSP.wav');
a=length(d)/2;
for i=1:a-1
b=d(1,i);
y(i)=b;
end
f=length(y)/2;
f=round(f)
y1=y(1:f); y2=y(f+1:length(y));
num1=[0,zeros(1,R1-1),1];
den1=[1,zeros(1,R1-1),-a1];
d1=filter(num1,den1,y1); d11=filter(num1,den1,y2);
r=length(d1);
D1=d1;
for i=r+1:r*2-1
147
D1(i)=d11(i-r);
end
num2=[0,zeros(1,R2-1),1];
den2=[1,zeros(1,R2-1),-a2];
d2=filter(num2,den2,y1); d22=filter(num2,den2,y2);
r=length(d2);
D2=d2;
for i=r+1:r*2-1
D2(i)=d22(i-r);
end
num3=[0,zeros(1,R3-1),1];
den3=[1,zeros(1,R3-1),-a3];
d3=filter(num3,den3,y1);d33=filter(num3,den3,y2);
r=length(d3);
D3=d3;
for i=r+1:r*2-1
D3(i)=d33(i-r);
end
num4=[0,zeros(1,R4-1),1];
den4=[1,zeros(1,R4-1),-a4];
d4=filter(num4,den4,y1); d44=filter(num4,den4,y2);
r=length(d4);
148
D4=d4;
for i=r+1:r*2-1
D4(i)=d44(i-r);
end
dIIR=D1+D2+D3+D4;
num5=[a5,zeros(1,R5-1),1];
den5=[1,zeros(1,R5-1),a5];
K=length(dIIR)/2;
H=round(K)-1;
dIIR1= dIIR(1:H); dIIR2=dIIR(H+1:length(dIIR));
dALL1=filter(num5,den5,dIIR1); dALL11=filter(num5,den5,dIIR2);
num5=[a6,zeros(1,R6-1),1];
den5=[1,zeros(1,R6-1),a6];
dALL2=filter(num5,den5,dALL1); dALL22=filter(num5,den5,dALL11);
r=length(dALL2);
DALL2=dALL2;
for i=r+1:r*2-1
DALL2(i)=dALL22(i-r);
end
y=y(1:length(DALL2));
dTOTAL=y+a7*DALL2;
savewave('SCI/modules/DSP/wavfile/Sonido_ambiente',dTOTAL);
149
Reverberador pasatodo.
Para desarrollar un filtro ms realista tenemos el reverberador con una estructura de
filtro pasad todo.
Figura 3.65 Reverberador pasatodo
Su funcin de transferencia est dada por:
H ( z )=
o+z
R
1+oZ
R
Para poder generar este efecto realice los siguientes pasos:
d=loadwave('SCI/modules/DSP/wavfile/DSP.wav');
stacksize('max');
a=length(d)/2;
for i=1:a-1
b=d(1,i);
y(i)=b;
end
f=length(y)/2;
f=round(f);
150
y1=y(1:f); y2=y(f+1:length(y));
num=[0.8,zeros(1,2900),1];
den=[1,zeros(1,2900),0.8];
d1=filter(num,den,y1); d2=filter(num,den,y2);
r=length(d1);
Salida=d1;
for i=r+1:r*2-1
Salida(i)=d2(i-r);
end
savewave('SCI/modules/DSP/wavfile/ALL_PASS.wav',Salida)
Efecto de retraso
Este es un efecto simple que podemos implementar de la siguiente forma:



Figura 3.66 Filtro de Retardo Referencia (8)
Para ejecutar este efecto digite:
x=loadwave('SCI/modules/DSP/wavfile/DSP.wav');
stacksize('max');
151
xlen=length(x)/2; //calculando el nmero de muestras del archivo
len=round(xlen-1)
for i=1:len-1
b=x(1,i);
yy(i)=b;
end
a=0.5;
R=5000; //Calculando nmero de muestras en el retardo
y=zeros(size(yy));
// filtrando la seal
for i=1:1:R+1
y(i) = yy(i);
end
for i=R+1:1:xlen-2
y(i)= yy(i)+ a*yy(i-R);
end;
savewave('SCI/modules/DSP/wavfile/Delay.wav',y);
analyze(y);
Ecualizador.
Finalmente vamos a generar varios efectos tipo ecualizador, utilizando filtros paso
bajo, paso alto y pasa banda.
152
Figura 3.67 Salidas del ecualizador. Referencia (8)
//Ecualizando
stacksize('max');
[x]=loadwave('SCI/modules/DSP/wavfile/DSP.wav');
a=length(x)/2;
for i=1:a-1
b=x(1,i);
y(i)=b;
end
Fn = .031;
N = 62;
//Esta son las ganancias en las tres bandas.
gLP = 0.4; gBP = 1.5; gHP = 1.5;
LP=wfir('lp',N,[Fn 0],'re',-1);
//type='lp','hp','bp','sb' forder=orden del filtro N
//cfreq frecuencias de corte 0<cfreq(1),cfreq(2)<0.5 para paso alto o bajo solo se usa
cfreq(1)
//fpar ventana kaiser (fpar(1)>0 fpar(2)=0)
153
//wtype tipo de ventana ('re','tr','hm','hn','kr','ch')
Fn1 = [.032 .079];
BP = wfir('bp',N,Fn1,'re',-1);
Fn2 = .079;
HP = wfir('hp',N,[Fn2 0],'re',-1);
y1 = convol(LP,y);
y2 = convol(BP,y);
y3 = convol(HP,y);
yA= gHP * y3;
savewave('SCI/modules/DSP/wavfile/Equalizer3.wav',yA);
yB= gLP * y1;
savewave('SCI/modules/DSP/wavfile/Equalizer1.wav',yB);
yC= gBP * y2;
savewave('SCI/modules/DSP/wavfile/Equalizer2.wav',yC);
yD = yA + yB + yC;
savewave('SCI/modules/DSP/wavfile/Equalizer4.wav',yD);
3.7.1 Cdigo MATLAB de la prctica 7.
Procesamiento Digital de Seales IE-0102
Prctica #7 con MATLAB.
Procesamiento de seales de audio.
154
Entre las funciones de MATLAB estn las funciones loadwave y wavread que
permiten cargar un archivo de audio .wav.
Primero copie un archivo wav en la carpeta work de MATLAB (en nuestro caso el
archivo DSP.wav). Luego teclee el siguiente comando.
[x,fs]=wavread('DSP.wav');
Con esto se abre el archivo DSP.wav en el directorio
C:\MATLAB701\work\DSP.wav
Ahora podemos escuchar el archivo cargado tecleando.
wavplay(x,fs) ;
Eco y reverberacin
Frecuentemente se utilizan filtros digitales para el procesamiento de seales de audio,
esto con el objetivo de crear efectos especiales. Dos de estos efectos son el eco y la
reverberacin.
Para generar un efecto de eco en nuestra seal de audio teclee lo siguiente:
[d,r,nbits]=wavread('DSP.wav');
num=[0,zeros(1,2900),1];
den=[1,zeros(1,2900),-0.8];
d1=filter(num,den,d);
wavwrite(d1,r,nbits,'Multieco_MATLAB.wav');
wavwrite(d,r,nbits,'Original_MATLAB.wav');
Ahora podemos escuchar nuestro efecto de audio que fue generado y guardado en la
carpeta work.
155
Podemos ver la respuesta impulsional tpica de este filtro si tecleamos:
%Respuesta impulsional tpica.
I =[1,zeros(1,60)];
numi=[0,zeros(1,10),1];
deni=[1,zeros(1,10),-0.8];
d2= filter(numi,deni,I);
figure(1);
stem(d2);grid;
xlabel('ndice de muestreo');
ylabel('Amplitud');
title(['Respuesta impulsional tpica']);
La respuesta en magnitud se obtiene de la siguiente forma:
%Respuesta de magnitud
figure(2);
[h1,w] = freqz(numi,deni,512);
plot(w/pi,20*log10(abs(h1)));grid;
xlabel('Frecuencia normalizada');
ylabel('Magnitud');
title(['Respuesta de magnitud']);
Reverberador de sonido ambiente (reverberador de Schroeder)
156
El efecto obtenido es similar al lo que ocurre en un recinto cerrado como es una sala
de conciertos.
Genere el siguiente cdigo de MATLAB para obtener este efecto.
a1=0.6;a2=0.4;a3=0.2;a4=0.1;a5=0.7;a6=0.6; a7=0.8;R1=700;
R2=900;R3=600;R4=400;R5=450;R6=390;
[d,r]=wavread('DSP.wav');
num1=[0,zeros(1,R1-1),1];
den1=[1,zeros(1,R1-1),-a1];
d1=filter(num1,den1,d);
num2=[0,zeros(1,R2-1),1];
den2=[1,zeros(1,R2-1),-a2];
d2=filter(num2,den2,d);
num3=[0,zeros(1,R3-1),1];
den3=[1,zeros(1,R3-1),-a3];
d3=filter(num3,den3,d);
num4=[0,zeros(1,R4-1),1];
den4=[1,zeros(1,R4-1),-a4];
d4=filter(num4,den4,d);
dIIR=d1+d2+d3+d4;
num5=[a5,zeros(1,R5-1),1];
den5=[1,zeros(1,R5-1),a5];
dALL1=filter(num5,den5,dIIR);
157
num5=[a6,zeros(1,R6-1),1];
den5=[1,zeros(1,R6-1),a6];
dALL2=filter(num5,den5,dALL1);
dTOTAL=d+a7*dALL2;
soundsc(dTOTAL,r);
wavwrite(dTOTAL,'Sonido_ambiente_MATLAB.wav');
Reverberador pasa todo.
Para desarrollar un filtro ms realista tenemos el reverberador con una estructura de
filtro pasad todo.
Su funcin de transferencia esta dada por:
H ( z )=
o+z
R
1+oZ
R
Para poder generar este efecto realice los siguientes pasos:
%Reverberador paso todo
[d,r]=wavread('DSP.wav');
num=[0.8,zeros(1,2900),1];
den=[1,zeros(1,2900),0.8];
d1=filter(num,den,d);
wavwrite(d1,r,'All_pass_MATLAB.wav');
158
Efecto de retraso
Para ejecutar este efecto teclee:
[x,fs,nbits]=wavread('DSP.wav');
xlen=length(x); %Calculando el numero de muestras
a=0.5;
R=5000; %Calculando el nmero de muestras en el retardo.
y=zeros(size(x));
%Filtrando la seal
for i=1:1:R+1
y(i) = x(i);
end
for i=R+1:1:xlen
y(i)= x(i)+ a*x(i-R);
end;
wavwrite(y,fs,nbits,'Delay.wav')
Podemos ver una grfica de frecuencia de la seal si aplicamos:
Ecualizador.
Finalmente vamos a generar varios efectos tipo ecualizador, utilizando filtros paso
bajo, paso alto y pasa banda.
%Ecualizando
[x,fs]=wavread('DSP.wav');
159
Wn = .20;
N = 62;
%Estas son las ganancias de las tres bandas
gLP = 0.4; gBP = 1.5; gHP = 1.5; LP = fir1(N,Wn);
Wn1 = [.20, .50];
BP = fir1(N,Wn1);
Wn2 = .50;
HP = fir1(N,Wn2,'high');
y1 = conv(LP,x);
y2 = conv(BP,x);
y3 = conv(HP,x);
yA= gHP * y3;
wavwrite(yA,fs,'Ecualizador3_MATLAB');
yB= gLP * y1;
wavwrite(yB,fs,'Ecualizador1_MATLAB');
yC= gBP * y2;
wavwrite(yC,fs,'Ecualizador2_MATLAB');
yD = yA + yB + yC;
wavwrite(yD,fs,'Ecualizador4_MATLAB');
3.7.2 Resultados de la sptima prctica
160
Figura 3.68 Respuesta impulsional para un reverberador multieco SCILAB y MATLAB.
Figura 3.69 Respuesta de magnitud de un reverberador multieco en SCILAB y MATLAB.
161
Figura 3.70 Grfica de un filtro de retardo frecuencia obtenida con matlab
CAPTULO 4: Elaboracin de prcticas de procesamiento
digital de seales en SCICOS.
Las siguientes prcticas fueron realizadas en la versin 4.2 de SCICOS. Entre estas
se encuentran una prctica sobre bancos de filtros digitales, una segunda prctica que trata
sobre filtros digitales paso banda, paso bajo y tipo Notch y la ltima prctica lleva a cabo
una comparacin entre los filtros digitales IIR y FIR.
4.1 Primera prctica.
Procesamiento Digital de Seales IE-0102
Prctica #1 con SCICOS
Filtros digitales.
162
Un filtro digital requiere un procesador digital para realizar clculos numricos en los
valores muestreados de la seal. El procesador puede ser un ordenador corriente, como un
PC, o un chip DSP (Digital Signal Processor) especializado.
La parte analgica de la seal debe ser previamente muestreada y digitalizada por un
convertidor AD (analgico-digital). Los nmeros binarios resultantes de la conversin
anterior, que representan valores sucesivos muestreados de la seal de entrada, son
transferidos al procesador, que realiza unos clculos numricos sobre ellos. Estos clculos
suelen ser multiplicaciones de los valores de entrada por unas constantes y suma de las
anteriores multiplicaciones. Si es necesario, los resultados de los clculos, que representan
los valores de una seal filtrada, son sacados a travs de un convertidor DA (digital-
analgico) para convertir la seal a su forma analgica.
La seal de salida es la convolucin de la seal de entrada con el filtro.
En la frecuencia el producto de los espectros de entrada y el filtro nos da el espectro
de salida.
Parte a: Resonador digital
Es un filtro pasa banda especial, con un par de polos complejos conjugados ubicados
en la vecindad del crculo unitario, como se muestra en la figura:
163
Figura 4.1 a) Diagrama de polos y ceros y b) respuesta en frecuencia de un resonador. Referencia (9).
La posicin angular de los polos determina la frecuencia de resonancia del filtro. El
nombre resonador se debe a que el filtro posee una gran ganancia para seales senoidales
de frecuencia cercanas a la de los polos. Poseen aplicaciones de sntesis de voz y filtrado
pasabanda sencillo.
Los polos complejos conjugados pueden ser ubicados en:
p
1,2
=r e
!j o
o
,0r1
Se pueden colocar dos ceros, los ceros pueden ser ubicados en z = 1 y z = -1, esto
eliminara completamente la respuesta del filtro a las frecuencias = 0 y = . Si se
eligen colocar los ceros en el origen tendramos:
H ( z)=
b
o
(1r e
j o
o
z
1
)(1r e
j o
o
z
1
)
=
b
o
1( 2rcoso
o
) z
1
+r
2
z
2
La respuesta en frecuencia alcanza su mximo en:
o
r
=cos
1
(
1+r
2
2r
cos w
o
)
Si r es aproximado a 1
o
r
=o
o
y como H(e
j o
) alcanza su mximo cerca de
o
se elige el factor de ganancia b
o
de forma que H(e
j o
o
)=1 para este caso:
b
o
=(1r)
.
12rcos2o
o
+r
2
Ejemplo: Tomamos una frecuencia de
o
= /4 rad.
Para esto tenemos:
164
H ( z)=
b
o
(1z
2
)
1(2rcoso
o
) z
1
+r
2
z
2

Podemos utilizar:
b
o
=
1r
2sen o
o

.
12rcos2o
o
+r
2
Con r=0.98, tenemos b
o
=0.0198, por lo tanto:
H( z )=
0.198(1z
2
)
11.386z
1
+0.96z
2
=
0.1980.198z
2
11.386z
1
+0.96z
2
Ahora vamos a implementar este filtro en SCICOS. Para ello genere el siguiente
diagrama de bloques en SCICOS.
Figura 4. 2 Diagrama de sistema para realizar filtrado con un filtro resonante digital.
165
Para las ondas senoidales llene los bloques con la siguiente tabla:
Generador senosoidal Magnitud Fase
1 0.79 10000
2 1 100
3 0.25 600
4 1,5 0.15
5 1 0.785 (frecuencia o)
Para los bloques CLK1 y CLK2 el periodo es 1 y el tiempo inicial es 0.1.
Para el bloque de reloj discreto el tiempo de muestreo es 1 y el offset 0.
El bloque de transformada de transferencia discreta se va a implementar como la
funcin de transferencia del filtro en si. Digite:
Denominador = z.^2-1.386*z+0.96
Numerador = 0.0198-0.0198*z.^2
Esto es equivalente a H(z) del filtro.
Finalmente para el bloque MScope modifique:
166
El vector Ymin = -2 3, el vector Ymax = 2 3, Refrescamiento de periodo = 50 50 y las
seales sern la entrada (suma de seales senoidales) y la salida del filtro (seal de 0.785
rad/s).
Finalmente proceda a simular y a obtener las seales de entrada y salida del sistema
digital.
Observe adems las seales de entrada y la seal muestreada y comprelas.
Parte B: El filtro Notch
El comportamiento del filtro Notch ideal se muestra en la siguiente figura:
Figura 4.3 (a) Comportamiento del filtro Notch ideal y (b) comportamiento real del filtro Notch.
Referencia (9).
167
La figura muestra el comportamiento de un filtro Notch con ceros en
o
y
1
. Son
tiles en aplicaciones donde se deben eliminar frecuencias especificas. Un ejemplo de ello
son los componentes de 50 ciclos (induccin de la frecuencia de lnea) que contaminan las
seales de muy baja amplitud.
La funcin de sistema para el filtro Notch es:
H ( z)=b
o
(1e.
j o
o
z
1
)(1e
j o
o
z
1
)
H( z)=b
o
(12coso
o
z
1
+z
2
)
Este filtro Notch tipo FIR tiene el inconveniente de tener un ancho de banda
relativamente grande, por lo que elimina la frecuencia de inters pero atenu (gravemente)
otras componentes de frecuencias vecinas. Adems la ganancia para = 0 (z = 1) es
distinta de la ganancia = (z = -1).
H(e
j o
)
o=0
=2b
o
(1cos o
o
)
H(e
j o
)
o=n
=2b
o
(1+coso
o
)
La diferencia entre ambas puede ser muy grande si la frecuencia que se desea eliminar
est cerca de = 0 o de = . A pesar de ello el coeficiente b
o
se calcula para que la
ganancia sea unitaria.
H( z)
z=1
=H ( e
j o
)
o=0
=1
De donde resulta que b
o
=[2(1-cos
o
)]
La funcin de sistema de un filtro Notch diseado para cancelar la frecuencia
o
=
/4, con ganancia unitario en = 0 es:
H ( z)=
1
( 2.2)
(1
.
( 2) z
1
+z
2
)
168
La respuesta de este filtro se puede observar en la siguiente figura:
Figura 4.4 Respuesta en frecuencia del filtro. Referencia (9).
Para ver el comportamiento del filtro genere este filtro en SCICOS para filtrar una seal de
entrada en
o
= /4.Para ello utilice el siguiente diagrama en SCICOS.
Figura 4.5 Sistema de prueba de filtro Notch.
169
Utilice un generador sinusoidal con magnitud = 1 y frecuencia = 0.785 (esta va a ser
la seal a eliminar). Los relojes CLK1 y CLK2 tendrn periodo = 1 y tiempo inicial 0.1. El
reloj discreto DCLK debe tener un tiempo de muestreo de 1 y un offset de 0.
Como se muestra en la figura el filtro Notch se gener por medio de tres bloques de
retardo y dos ganancias a y b, donde:
a=
1
2.( 2)
b=
.
(2)
Si observa el diagrama se agrega nuevamente la implementacin del filtro paso banda
anterior, esto es con la intencin de notar la reduccin de la seal a filtrar.
Para este diagrama obtenga la seal de salida del filtro Notch y la seal de salida del
filtro paso banda (si utilizamos el mismo diseo anterior deberamos ver la seal a
o
= 4/
reducida a aproximadamente cero). Obtenga la seal de entrada, compare y comente.
Para obtener la respuesta en frecuencia del filtro dgite en SCILAB.
-->[y1,y2]=frmag([1.707 -2.41 1.707],[1 0 0],256);
-->plot(y2,y1);
Parte C: Filtro paso bajo
El anlisis simblico es una moderna tcnica, para poder estudiar el comportamiento
de muchos sistemas y circuitos. Un ejemplo de ello es en el diseo de circuitos digitales. El
siguiente diagrama muestra un filtro digital de orden 3:
170
Figura 4.6 Filtro digital de orden 3.
Para este filtro su funcin de trasferencia est dada por:
H( z )=
( z+1)b()(az
2
+zaz+a)
( z
3
+za)
Tomando a = 0.5 y b = 0.25, tenemos:
H ( z)=
0.125+0.25z+0.25z
2
+0.125z
3
( z
3
+z0.5)
Si deseamos ver la respuesta en frecuencia del filtro podemos digitar en SCILAB:
--> b = 1/4; a = 1/2;
-->z=poly(0,'z');
-->h=((z+1)*b*(a*z.^2+z-a*z+a))/(z.^3+z*a)
-->[x,f]=frmag(h,256);
-->plot(f,x)
Al generar el grfico obtenemos:
171
Figura 4.7 Respuesta en frecuencia de un filtro paso bajo.
Ahora vamos a utilizar este filtro para atenuar seales de la siguiente forma:
Figura 4.8 Aplicacin para filtro paso bajo.
172
Tenemos para este caso tres generadores sinusoidales con los siguientes valores:
Seal Frecuencia Magnitud
1 100 2
2 0.1 1
3 80 1
Los valores de a y b para el filtro son 0.5 y 0.25 respectivamente, adems cargue un
bloque de funcin de transferencia discreta y genere la funcin del filtro con la finalidad de
compara la seal de salida por ambos mtodos. El tiempo de muestreo del reloj discreto es
de 0.1. Obtenga las seales de salida en ambos casos y comprelas.
4.1.1 Solucin a la primera prctica en SCICOS.
Figura 4.9 Seal de salida Grfico 1 y seal de entrada Grfico 2.
173
Figura 4.10 Seal de entrada Grafico 1 y seal muestreada Grfico 2. Filtro paso
banda resonante digital.

Figura 4.11 Seal de entrada muestreada y sin muestrear.
174
Figura 4.12 Seal filtrada por ambos filtros (Grfico 1) y seal filtrada por el filtro Notch (Grfico 2).
Figura 4.13 Seal de entrada y salida filtro paso bajo en diagrama de bloques.
175
Figura 4.14 Seal de entrada y salida de filtro paso bajo con el bloque de funcin de
transferencia.
4.2 Segunda prctica.
Procesamiento Digital de Seales IE-0102
Prctica #2 con SCICOS
Bancos de Filtros
Los bancos de filtros poseen varias aplicaciones en distintas reas tales como
codificacin de voz, procesamiento adaptivo de seales, compresin de imgenes,
transmisin de varias seales a travs de una seal, etc.
176
El principal uso de los bancos de filtros, es la habilidad de tener un sistema que
separe la seal en consideracin en el dominio de la frecuencia, en dos o ms seales, o la
de componer dos o ms seales diferentes en una sola seal.
Los bancos de filtros se dividen en dos tipos, los bancos de filtros de anlisis y los
bancos de filtros de sntesis.

Figura 4.15 Ejemplo de un banco de filtros sencillo. Referencia (10).
La salida de este sistema se muestra como:
Y ( z)=z.
1
X ( z) en otras palabras y(n)=x(n1)
Parte A: Simulacin de un banco de filtros simple
La seal de entrada sera una seal senoidal de amplitud unitaria, de frecuencia 0.675
(rad/s) o 0.107 Hz y un tiempo de muestreo de 0.2 segundos.
Cargue SCICOS.
--> scicos; //o puede abrirlo desde el menu de SCILAB.
Genere el siguiente diagrama en SCICOS.
177
Figura 4.16 Diagrama de un banco de filtro simple.
Para generar seales senoidales use el bloque Sinusoid generator que se encuentra
dando clic en el Menu de SCICOS Palette- Source esto abre una pantalla donde se escoge el
bloque y se agrega a la zona del diagrama.
Dando clic derecho del mouse en el bloque y eligiendo open set aparece un cuadro
de dilogo donde se pueden variar los parmetros del bloque. Para este caso escogemos:
magnitud =1, frecuencia = 0.675 fase =0.
Los bloques de reloj de activacin estn en Palette-Source.
178
Siga la siguiente tabla:
Reloj Periodo Tiempo inical
1 1 0
2 0.01 0
3 0.1
4 0.1
Para el reloj 3 (Sample time clock) el tiempo de muestreo es 0.2 y el offset es 0.
El bloque de funcin SCILAB Scifun (se usan 2 para la decimacin): este permite
cargar una funcin de SCILAB o una funcin generada por nosotros. Se encuentra en
Palette-Others. Para este caso se requiere se estudie el bloque dando clic derecho y luego
Help.
Para las entradas teclee:
[1,1;1,1] (genera dos puertos de entrada)
Se da clic en OK y se despliega un nuevo cuadro de dilogo, donde se define la
funcin que computa la salida.
En el espacio vamos a digitar:
--> if u1 < 2
y1=u2
else
y1=0
end
179
De momento los dems cuadros que aparezcan no van a variar, solo de clic en OK
hasta que ya no aparezcan ms cuadros.
Para los contadores estos irn de 1 a 4.
El valor para el bloque de ganancia es 0.5 (El banco de filtros genera una ganancia de
2 que debemos atenuar).
El bloque Sample and hold (S/H):como lo indica su nombre este bloque muestrea y
espera al prximo evento, para volver a muestrear. Este se encuentra en la paleta Lineal.
Este bloque no va a variar sus propiedades.
El bloque reatrdo (1/z): Se encuentra en la paleta Lineal, es equivalente a la
funcin:
Y ( z)=
1
z

Finalmente, para poder ver los resultados cargamos el bloque Mscope el cual
debemos llenar de la siguiente forma.
Nmeros de puertos de entrada 1 1
Colores o marcas No se varia
Numeros de ventanas de salida No varia
Posicin de ventana de salida No varia
Tamao de ventana de salida No varia
Vector Ymin -1 -1
Vector Ymax 1 1
Refrescar periodo 140 140
Accept herited events 0/1 0
Nombre del osciloscopio Entrada y salida
180
Para simular el ejercicio en el Menu de SCICOS en Simulate debe darse un clic
en Run.
Tome las capturas de las seales y explique lo que sucede.
Parte B: Filtro de anlisis-sntesis
Un Banco de filtros de anlisis consiste en un conjunto de filtros, acomodados en
paralelo. Las caractersticas de la respuesta en frecuencia de estos bancos de filtros es que
divide la seal en sub-bandas.
Por otra parte el banco de filtros de sntesis consiste en un grupo de filtros cuyas
salidas son sumadas para formar la seal sintetizada.
El siguiente es un banco de filtros de anlisis-sntesis donde:
H
o
( z)=
1+z.
1
2
y H
1
( z)=
1z.
1
2
Figura 4.17 Banco de filtros anlisis-sntesis. Referencia (10)
Si tomamos:
G
o
( z)=
(1+z.
1
)
2
yG
1
( z)=
(1z.
1
)
2
Esto implica que:
Y ( z)=X ( z) z.
1
181
En otras palabras, y(n)=x(n1) indicando que la figura es un banco de filtros de
reconstruccin perfecta.
Vamos entonces a simular un filtro de reconstruccin perfecta en SCICOS.
Para ello elabore el siguiente diagrama en SCICOS.
Figura 4.18 Aplicacin de un filtro de reconstruccin prfecta.
Para este caso se mantienen los valores anteriores de los bloques Generador senoidal,
Mscope, relojes 1,2 y 3 y de S/H. Se agrega en 4 ocasiones un nuevo bloque que es el
bloque de funcin de transferencia discreta. Al abrir este se solicita el denominador y el
numerador los cuales se pueden escribir como si fueran los correspondientes polinomios en
Z y con lenguaje SCILAB. Luego de conectar los bloque simlese y comntese sus
resultados.
182
Parte C: Simulacin de un banco QMF. (Quadrature Mirror Filter).
La seal de entrada primeramente es filtrada a travs de dos filtros H
o
(z) y H
1
(z),
siendo estos filtros paso bajos y paso altos. Cada seal en subbanda es limitada en banda
aproximadamente en un ancho total de . Las zonas en subbandas son decimadas en un
factor de dos para obtener V
k
(n). Cada seal decimada es codifica de forma que las
propiedades especiales de la subbanda son explotadas. Las seales producidas
decodificadas para generar V
o
(n) y V
1
(n) se hacen pasar a travs de los filtros F
0
(z) y F
1
(z)
para producir la seal de salida. Ho(z) y H
1
(z) son llamados el filtro anlisis. F
0
(z) y F
1
(z)
conforman el banco de sntesis.
Figura 4.19 Diagrama de banco QMF. Referencia (10)
183
Procedemos a continuacin a generar una simulacin de un banco QMF en SCICOS.
Figura 4.20 Diagrama en SCICOS de simulacin de un banco de filtros QMF.
Para generar el diagrama use:
Reloj Periodo
1 0.001
2 0.01
3 0.0001
4 0.1
Para el reloj discreto el tiempo de muestreo es 0.001. La seal senoidal debe ser de
magnitud 1 y de frecuencia 0.5, el contador de SCI1 cuenta de 0.001 hasta 6 e igual para el
contador de SCI2.
En este caso para los bloques SCI (ambos), d clic derecho y digite:
184
En los puertos de entrada [1,1;1,1] (genera dos puertos de entrada), luego debemos
dar clic en OK , en el siguiente cuadro de texto digitamos:
if u1 < 2
y1=u2
else
y1=0
end
y damos OK hasta salir.
Para los filtros:
H
o
( z)=
0.5z+0.5
z
H
1
( z)=
0.5z0.5
z
F
o
( z )=
z+1
z
F
1
( z)=
z1
z
Para la seal de salida de F
1
use un rango en Y de (-0.002, 0.002) para poder observar
la seal. Mida adems la seal de salida de los filtros y la salida general. Compare y
comente los resultados.
4.2.1 Resultados de la segunda prctica.
Tras simular el diagrama en SCILAB obtenemos los siguientes grficos.
185
Figura 4.21 Entrada y salida del diagrama de bloques de un banco de filtros simple.
Figura salida de diagrama 1 primera prctica con SCICOS.
Para Simulink es posible simular el siguiente diagrama.
Figura 4.22 Diagrama en Simulink del primer ejemplo para la prctica 1 de SCICOS.
186
Tras dar los mismos valores y simular el diagrama obtenemos:
Figura 4.23 Resultados de primer diagrama hechos con MATLAB.
Como se muestra la salida es igual a la entrada ms un pequeo retraso lo cual es lo
esperado basado en la teora. Para el caso de SCICOS al no encontrar bloques de upsample
y downsample que posee MATLAB, generamos un algoritmo poco elegante pero que
muestra el comportamiento del sistema.
Para la parte B tenemos los siguientes resultados.
Figura 4.24 Salida y entrada del banco de filtros anlisis-sntesis en MATLAB
187
Estas imgenes fueron obtenidas con los mismos valores usados en SCICOS y
utilizando el siguiente diagrama en MATLAB.
Figura 4.25 Diagrama para filtro anlisis-sntesis en MATLAB.
Figura 4.26 Entrada y salida de banco de filtro anlisis-sntesis en SCILAB.
188
Figura 4.27 El grfico superior muestra la salida del filtro F0, la figura inferior muestra la salida del
filtro F1.
Figura 4.28 El grfico superior muestra la salida del sistema, el grfico inferior es la entrada.
189
Para este caso se observa que aun permanece ruido en la seal, esto debido a que la
aproximacin realizada para la decimacin no es muy buena, mas permite ver el efecto del
sistema a grandes rasgos.
4.3 Tercera prctica en SCICOS.
Procesamiento Digital de Seales IE-0102
Prctica #3 con SCICOS
Filtros FIR e IIR.
Normalmente un filtro IIR requiere de menos coeficientes que un filtro FIR pero
tambin requiere las mismas especificaciones. Los filtros IIR se emplean cuando se
requieren transiciones abruptas y alto rendimiento. El precio a pagar es que el filtro IIR se
convierte en inestable o se degradan las caractersticas en frecuencia si no se toman algunas
precauciones. Los sistemas IIR no van a presentar una caracterstica de fase exactamente
lineal si queremos que sean causales. La solucin ms habitual se basa en aproximar el
mdulo de la funcin de transferencia sin preocuparnos de la fase, ya que esta se ajusta en
una etapa posterior de pasa todo.
El siguiente es un ejemplo de un filtro digital IIR que se puede generar en SCILAB.
Este es un filtro elptico pasobanda de orden 6:
hz=iir(3,'bp','ellip',[.25 .35],[.08 .03]);
[hzm,fr]=frmag(hz,256);
plot2d(fr',hzm')
190
xtitle('Filtro paso banda discreto IIR 0.20<fr<0.40 ',' ',' ');
q=poly(0,'q'); //expresa el resultado en trminos de q = z
-1

hzd=horner(hz,1/q)
Podemos generar adems un filtro pasabanda FIR de la siguiente forma:
hn=eqfir(30,[0 .2;.25 .35;.4 .5],[0 1 0],[1 1 1]);
[hm,fr]=frmag(hn,256);
plot(fr,hm)
Tenemos la siguiente respuesta en frecuencia obtenida.
Figura 4.29 Respuesta en frecuencia de filtro FIR de orden 30 y de un IIR de orden 6.
Ahora tmese tres seales en SCICOS; una a f1 = 500, otra a f2=2500 y una ltima a
f3 = 5000 y aplique ambos filtros de la siguiente forma.
191
Figura 4.30 Implementacin de un filtro IIR paso banda.
Los coeficientes del numerador son: -0.1324, -0.0627, 0.213, 8.82x10
-17
, -0.213,
0.06127 y 0.1324.
Los coeficientes del denominador son: 0.2432, 0.59, 1.28, 1.42, 1.63, 1.46 y 1.
Para el caso del filtro FIR tenemos el siguiente diagrama:
192
Figura 4.31 Filtro FIR.
Para este caso se tienen los siguientes coeficientes
- 0.0581614, 0.2157638, 0.0180146, - 0.2606135, 0.1769141, 0.1769141,
- 0.2606135, 0.0180146 , 0.2157638 , - 0.0581614.
La transformacin bilineal:
Es un mapeo matemtico de variables, en filtrado digital esto es un mapeo estndar de
s o del plano anlogo dentro de z o el plano digital. Esta transforma filtros analgicos y los
disea usando tcnicas clsicas de filtrado en sus equivalentes discretos.
193
SCILAB utiliza la funcin bilin para llevar a cabo la transformacin bilineal. Su
sintaxis es:
[sl1]=bilin(sl,v); //donde sl1 y sl son sistemas lineales y v es un vector con 4 entradas
(v=[a,b,c,d])
El siguiente ejemplo genera la transformacin bilineal de un espacio lineal.
s=poly(0,'s');z=poly(0,'z');
w=ssrand(1,1,3);
wtf=ss2tf(w);v=[2,3,-1,4];a=v(1);b=v(2);c=v(3);d=v(4);
[horner(wtf,(a*z+b)/(c*z+d)),ss2tf(bilin(w,[a,b,c,d]))]
clean(ss2tf(bilin(bilin(w,[a,b,c,d]),[d,-b,-c,a]))-wtf)
Tambin se utiliza la funcin cls2dls con la siguiente sintaxis.
[sl1]=cls2dls(sl,T[,fp]) // T es el periodo de muestreo. Un ejemplo de este comando
es:
s=poly(0,'s');z=poly(0,'z');
sl=syslin('c',(s+1)/(s^2-5*s+2)); //Sistema de tiempo continuo como funcin de
//transferencia
slss=tf2ss(sl); //Ahora en forma de espacio de estados
sl1=cls2dls(slss,0.2); //sl1= salida de cls2dls
sl1t=ss2tf(sl1) // Convierte en funcin de transferencia
sl2=horner(sl,(2/0.2)*(z-1)/(z+1)) //Compare sl1 y sl2
[x,f]=frmag(sl1t,256);
plot(f,x)
194
La transformacin bilineal evita inconvenientes como el solapamiento que ocurre a
veces en otros mtodos como el de transformacin invariante al impulso. Adems esta
permite mantener la estabilidad del sistema
Vamos a comparar un filtro digital con uno analgico.
Desarrolle el siguiente diagrama en SCICOS.
Para el filtro discreto num [-0.0811, 0.01869, 0.1028], den [0.906, -1.8317, 1]
Para el sistema continuo H=(s+1)/(s^2+0.5*s+2)
Figura 4 .32 Sistema de filtrado analgico y digital.
El reloj discreto tiene un tiempo de muestreo de 0.0015, las seales son de
magnitudes 3, 1, 1 y frecuencias respectivas de 1000, 500 y 0.4.
Para el diagrama simule el sistema y compare el filtro digital con el analgico.
Ahora vamos a generar filtros FIR e IIR usando SCILAB.
//Filtro rechaza banda FIR
195
hn=eqfir(5,[0 .2;.25 .35;.4 .5],[0 1 0],[1 1 1]);
//Filtro paso alto FIR
hn=eqfir(5,[0 .2;.10 .12;.4 .5],[0 0 1],[1 1 1]);
//Filtro paso alto IIR
hz=iir(3,'hp','butt',[.15 .25],[.08 .03]);
Obtenga las respuestas de frecuencia de estos filtros, comente las diferencias entre
estos. Y establezca diferencias entre los filtros FIR e IIR.
4.3.1 Resultados de la tercera prctica en SCICOS.
Figura 4.33 Salida de seal filtrada con filtro IIR.
196
Figura 4 .34 Seal de entrada y de salida para filtro FIR
Figura 4.35 Filtro analgico y filtro digital IIR.
197
CAPTULO 5: Conclusiones y recomendaciones.
SCILAB es una herramienta muy til en el aprendizaje, ya que permite interactuar con
un nmero considerable de funciones matemticas y lgicas, que permiten generar
aplicaciones y as fomentar nuestra inventiva. De igual forma SCICOS como herramienta
de SCILAB es capaz de interactuar con este directamente y as generar un entorno grfico
amigable con el usuario.
A pesar de ser un software muy til tanto SCILAB como SCICOS an son muy
simples si los comparamos con MATLAB y SIMULINK. Por ejemplo, al acceder al
nmero de bloques de SIMULINk podemos ver que este es considerablemente mayor al de
SCICOS. Es debido a esto que muchas aplicaciones de SIMULINK aun estn disponibles
en SCICOS. De igual forma sucede entre MATLAB y SCILAB. Otro aspecto en donde
esto se muestra es en el espacio de memoria asignado a las variables. Mientras MATLAB
puede procesar un archivo de audio pequeo en 5 segundos, SCILAB en ocasiones tardaba
hasta 1 hora y el archivo no poda sobrepasar dicho lmite de memoria.
Pese a lo anterior SCILAB te permite generar tu propia biblioteca de funciones, claro
esta, debes saber lo bsico sobre programacin y tener a mano el manual de ayuda de
SCILAB y SCICOS.
Las funciones de MATLAB en si difieren bastante a las de SCILAB, en algunas
ocasiones, estas cumplen una labor similar y hasta tienen el mismo nombre en ambos
softwares, ms la mayora de las funciones difieren en uso y aplicacin. Un ejemplo de ello
es la funcin freqz de MATLAB, ya que esta funcin puede hacer o tomar distintas
198
decisiones dependiendo de sus entradas asignadas. En otras palabras una funcin de
MATLAB puede hacer la misma funcin que dos o ms funciones de SCILAB.
Se recomienda a aquellas personas que desean explorar las funcionalidades de
SCILAB y SCICOS el uso de las herramientas informticas que se encuentran en la pgina
oficial de SCILAB, en especial recomiendo para los amantes de las telecomunicaciones el
de libreras de telecomunicaciones y bloques para SCICOS.
199
BIBLIOGRAFA
Pginas web:
1. SCILAB GROUP. Signal Processigng With SCILAB,
http://pauillac.inria.fr/cdrom/ftp/scilab/documentation/pdf/signal.pdf.
2. Delicado B. Introduccin al modelado y simulacin de sistemas con la Toolbox
SCICOS de SCILAB, http://pauillac.inria.fr/cdrom/ftp/scilab/contrib/delicado/
3. Delicado B. Manual de introduccin al tratamiento de seales con SCILAB
para usuarios de MATLAB.
http://pauillac.inria.fr/cdrom/ftp/scilab/contrib/delicado/scilab.pdf
4. SCILAB GROUP. Introduction to SCILAB.
http://pauillac.inria.fr/cdrom/ftp/scilab/documentation/pdf/intro.pdf-0
5. Mora Hector. Introduccin a SCILAB.
http://www.scilab.org/publications/SCISPANISH/Intro_Spanish.pdf
6. Also Ch. Comparing SCILAN and MATLAB. http://www.num.uni-
sb.de/iam/studium/vorlesungen/ss2007/prama/praktische_aufgaben/matlab/Comparing
%20MATLAB%20and%20SCILAB.pdf
7. Gilberto E. Programming with SCILAB
http://www.infoclearinghouse.com/files/scilab/scilab02.pdf
8. Demostraciones con MATLAB.
http://www.lpi.tel.uva.es/~nacho/docencia/ing_ond_1/trabajos_02_03/Acustica_arq
uitectonica/practica/MATLAB.HTML
200
9. Diseo de filtros sencillos.
http://www.ingelec.uns.edu.ar/pds2803/Materiales/Cap10/10-Cap10.pdf
10. Bancos de filtros digitales.
http://catarina.udlap.mx/u_dl_a/tales/documentos/lem/madrid_q_a/capitulo_5.html#
201

You might also like