IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Transcript of IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI)
GRADO EN INGENIERIacuteA TELEMAacuteTICA
IMPLEMENTACIOacuteN DE UN PROCESADOR
DIGITAL DE SENtildeAL CON BITSCOPE
Autor Javier de la Paz Garcillaacuten
Directores Javier Matanza Domingo Gregorio Loacutepez Loacutepez
Madrid
Julio 2017
Declaro bajo mi responsabilidad que el Proyecto presentado con el tiacutetulo
Implementacioacuten de un Procesador Digital con BitScope
en la ETS de Ingenieriacutea - ICAI de la Universidad Pontificia Comillas en el
curso acadeacutemico (201617) es de mi autoriacutea original e ineacutedito y
no ha sido presentado con anterioridad a otros efectos
El Proyecto no es plagio de otro ni total ni parcialmente y la informacioacuten que ha sido
tomada de otros documentos estaacute debidamente referenciada
Fdo Javier de la Paz Garcillaacuten Fecha 10 07 2017
Autorizada la entrega del proyecto
LOS DIRECTORES DEL PROYECTO
Fdo Javier Matanza Domingo Fecha 10 07 2017
Fdo Gregorio Loacutepez Loacutepez Fecha 10 07 2017
Vordm Bordm del Coordinador de Proyectos
Fdo David Contreras Baacutercena Fecha helliphellip helliphellip helliphellip
AUTORIZACIOacuteN PARA LA DIGITALIZACIOacuteN DEPOacuteSITO Y DIVULGACIOacuteN EN RED DE
PROYECTOS FIN DE GRADO FIN DE MAacuteSTER TESINAS O MEMORIAS DE BACHILLERATO
1ordm Declaracioacuten de la autoriacutea y acreditacioacuten de la misma
El autor D Javier de la Paz Garcillaacuten DECLARA ser el titular de los derechos de propiedad intelectual
de la obra Implementacioacuten de un Procesador Digital de Sentildeal con el osciloscopio y analizador BitScope
que eacutesta es una obra original y que ostenta la condicioacuten de autor en el sentido que otorga la Ley de
Propiedad Intelectual
2ordm Objeto y fines de la cesioacuten
Con el fin de dar la maacutexima difusioacuten a la obra citada a traveacutes del Repositorio institucional de la
Universidad el autor CEDE a la Universidad Pontificia Comillas de forma gratuita y no exclusiva
por el maacuteximo plazo legal y con aacutembito universal los derechos de digitalizacioacuten de archivo de
reproduccioacuten de distribucioacuten y de comunicacioacuten puacuteblica incluido el derecho de puesta a disposicioacuten
electroacutenica tal y como se describen en la Ley de Propiedad Intelectual El derecho de transformacioacuten
se cede a los uacutenicos efectos de lo dispuesto en la letra a) del apartado siguiente
3ordm Condiciones de la cesioacuten y acceso
Sin perjuicio de la titularidad de la obra que sigue correspondiendo a su autor la cesioacuten de
derechos contemplada en esta licencia habilita para
a) Transformarla con el fin de adaptarla a cualquier tecnologiacutea que permita incorporarla a internet y
hacerla accesible incorporar metadatos para realizar el registro de la obra e incorporar ldquomarcas
de aguardquo o cualquier otro sistema de seguridad o de proteccioacuten
b) Reproducirla en un soporte digital para su incorporacioacuten a una base de datos electroacutenica
incluyendo el derecho de reproducir y almacenar la obra en servidores a los efectos de garantizar
su seguridad conservacioacuten y preservar el formato
c) Comunicarla por defecto a traveacutes de un archivo institucional abierto accesible de modo libre y
gratuito a traveacutes de internet
d) Cualquier otra forma de acceso (restringido embargado cerrado) deberaacute solicitarse expresamente
y obedecer a causas justificadas
e) Asignar por defecto a estos trabajos una licencia Creative Commons
f) Asignar por defecto a estos trabajos un HANDLE (URL persistente)
4ordm Derechos del autor
El autor en tanto que titular de una obra tiene derecho a
a) Que la Universidad identifique claramente su nombre como autor de la misma
b) Comunicar y dar publicidad a la obra en la versioacuten que ceda y en otras posteriores a traveacutes de
cualquier medio
c) Solicitar la retirada de la obra del repositorio por causa justificada
d) Recibir notificacioacuten fehaciente de cualquier reclamacioacuten que puedan formular terceras personas
en relacioacuten con la obra y en particular de reclamaciones relativas a los derechos de propiedad
intelectual sobre ella
5ordm Deberes del autor
bull El autor se compromete a
a) Garantizar que el compromiso que adquiere mediante el presente escrito no infringe ninguacuten
derecho de terceros ya sean de propiedad industrial intelectual o cualquier otro
b) Garantizar que el contenido de las obras no atenta contra los derechos al honor a la
intimidad y a la imagen de terceros
c) Asumir toda reclamacioacuten o responsabilidad incluyendo las indemnizaciones por dantildeos que
pudieran ejercitarse contra la Universidad por terceros que vieran infringidos sus derechos e
intereses a causa de la cesioacuten
d) Asumir la responsabilidad en el caso de que las instituciones fueran condenadas por infraccioacuten
de derechos derivada de las obras objeto de la cesioacuten
6ordm Fines y funcionamiento del Repositorio Institucional
La obra se pondraacute a disposicioacuten de los usuarios para que hagan de ella un uso justo y respetuoso con
los derechos del autor seguacuten lo permitido por la legislacioacuten aplicable y con fines de estudio
investigacioacuten o cualquier otro fin liacutecito Con dicha finalidad la Universidad asume los siguientes
deberes y se reserva las siguientes facultades
La Universidad informaraacute a los usuarios del archivo sobre los usos permitidos y no garantiza
ni asume responsabilidad alguna por otras formas en que los usuarios hagan un uso posterior de
las obras no conforme con la legislacioacuten vigente El uso posterior maacutes allaacute de la copia privada
requeriraacute que se cite la fuente y se reconozca la autoriacutea que no se obtenga beneficio comercial
y que no se realicen obras derivadas
La Universidad no revisaraacute el contenido de las obras que en todo caso permaneceraacute bajo la
responsabilidad exclusive del autor y no estaraacute obligada a ejercitar acciones legales en nombre del
autor en el supuesto de infracciones a derechos de propiedad intelectual derivados del depoacutesito y
archivo de las obras El autor renuncia a cualquier reclamacioacuten frente a la Universidad por las
formas no ajustadas a la legislacioacuten vigente en que los usuarios hagan uso de las obras
La Universidad adoptaraacute las medidas necesarias para la preservacioacuten de la obra en un futuro
La Universidad se reserva la facultad de retirar la obra previa notificacioacuten al autor en supuestos
suficientemente justificados o en caso de reclamaciones de terceros
Madrid a 10 de julio de 2017
ACEPTA
Fdo Javier de la Paz Garcillaacuten
Motivos para solicitar el acceso restringido cerrado o embargado del trabajo en el Repositorio Institucional
Agradecimientos
Me gustariacutea empezar agradeciendo a las personas que maacutes tengo que agradecer en la vida
mis padres
A ellos va dedicado todo lo que he conseguido y conseguireacute en mi vida Han confiado
siempre en miacute me han mostrado su apoyo incondicional y nunca me han hecho echar nada
en falta en mi vida
A partir de que termine mi ciclo en la universidad empezaraacute una nueva etapa en mi vida en
la que me tendreacute que valer por miacute mismo y poner en praacutectica todo lo que me han ensentildeado
durante estos antildeos Debereacute demostrar lo que valgo que ha valido la pena todo lo que han
apostado por miacute y devolver con creces todo lo que se ha invertido en tiempo esfuerzo y
dinero (Por suerte seacute que si me caigo tengo ya no solo mis padres sino a una maravillosa
familia detraacutes para ayudarme en lo que sea)
Tranquilos tened por seguro que no os fallareacute
Tambieacuten quiero aprovechar para agradecer a ICAI que me haya brindado la oportunidad de
estudiar y formarme como ingeniero en una universidad de semejante categoriacutea Agradecer
a cada uno de los profesores que he tenido durante estos cuatro antildeos con especial eacutenfasis en
los tutores que ademaacutes de ensentildearme en clase me han ayudado en lo personal fuera de ellas
y por supuesto a mis compantildeeros a los que muchos de ellos puedo llamar ahora amigos
sin los cuales tal vez no habriacutea llegado hasta aquiacute
Gracias a David Contreras coordinador de proyecto tutor y profesor miacuteo en estos antildeos de
grado por como su cercaniacutea y amabilidad con la clase su disponibilidad su ayuda y su
entrega con todos y cada uno de nosotros
Por uacuteltimo no puedo olvidar en el apartado de agradecimientos a mi director de proyecto
Javier Matanza Darte las gracias por todo el tiempo que le has dedicado al proyecto y a miacute
por muy pesado que haya sido estos meses por los mil correos que me has tenido que
contestar y nunca con tardanza por las quinientas veces que me has tenido que ver en tu
despacho y por tu auacuten con todo esto amabilidad para ayudarme
A todos vosotros os dedico mi proyecto un proyecto que pareciacutea que empezaba a nacer a
finales de febrero cuando me vi sin praacutecticas y sin TFG y del que 4 meses despueacutes no puedo
estar maacutes orgulloso y del que he disfrutado en el camino y con el resultado final
Gracias
IMPLEMENTACIOacuteN DE UN PROCESADOR DIGITAL DE SENtildeAL
CON BITSCOPE
Autor de la Paz Garcillaacuten Javier
Director Matanza Domingo Javier y Loacutepez Loacutepez Gregorio
Entidad Colaboradora ICAI ndash Universidad Pontificia Comillas
RESUMEN DEL PROYECTO
En el presente proyecto se ha desarrollado una aplicacioacuten capaz de hacer cometidos de
osciloscopio analizador de espectros y con funcionalidad de procesador digital de sentildeales
analoacutegicas y digitales esta es el filtrado seguacuten distintos criterios (coeficientes o
especificaciones) Dicha implementacioacuten ha sido llevada a cabo utilizando una plataforma
hardware conocida como BitScope [1] La aplicacioacuten que es compatible con cualquier
sistema operativo basado en Windows Linux y Mac utiliza el lenguaje Python [4] tanto
para la comunicacioacuten con el dispositivo hardware como para la representacioacuten de sentildeales
muestreadas
Palabras clave BitScope Python Procesador digital de sentildeal Osciloscopio
1 Introduccioacuten
Nos encontramos ante una situacioacuten en la cual se observa que las escuelas de ingenieriacutea
trabajan el tratado de sentildeales de una manera muy artificial Se utilizan programas
informaacuteticos principalmente MATLAB [5] u Octave [6] para ejercicios praacutecticos de
procesado digital de sentildeal Sin embargo este tipo de programas aunque cumple con las
expectativas en cuanto a resultados proporcionados no hace lo propio con el realismo
de dichas actividades de procesado de sentildeal La principal razoacuten es que se trabajan
exclusivamente con sentildeales digitales sinteacuteticas y que el trabajo con sentildeales en tiempo
real es complicado de implementar
2 Definicioacuten del proyecto
Se quiere llevar a cabo un proyecto cuyo resultado sea representar en tiempo y en
frecuencia una sentildeal analoacutegica muestreada previamente Se busca por tanto una
aplicacioacuten capaz de ser ejecutada en cualquier entorno que simule el funcionamiento de
un osciloscopio y un analizador de espectros
Ademaacutes se busca antildeadir a la aplicacioacuten funcionalidad de un procesador digital de sentildeal
de modo que ademaacutes de representar la sentildeal se pueda trabajar con ella Se opta por
antildeadir por tanto el filtrado de sentildeal con el meacutetodo de solape y almacenamiento como
prueba de concepto de los diferentes tipos de teacutecnicas de procesado digital de sentildeal que
se podriacutean llevar a cabo en la herramienta desarrollada Dicho filtrado se podriacutea hacer
ya sea mediante la introduccioacuten por parte del usuario de los coeficientes de dicho filtro
o con las especificaciones del filtro que se desea implementar
De este modo se dispondriacutea de una aplicacioacuten capaz de diferenciarse de cualquier otro
sistema existente por su versatilidad y su capacidad de aunar las funcionalidades de
representacioacuten y filtrado de sentildeales reales
Ademaacutes del objetivo principal se pretende que la herramienta desarrollada no suponga
una complejidad electroacutenica excesiva desde el punto de vista hardware Este ha sido uno
de los principales motivos por los que se ha decidido utilizar BitScope pues plantea un
entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra totalmente
resuelta
3 Descripcioacuten del modelosistemaherramienta
Seguacuten todo lo anterior la aplicacioacuten que se propone seraacute una ventana creada con Qt
Designer [3] y con la ayuda de la libreriacutea de PyQtGraph [2] que se dividiraacute en dos partes
bull La parte de osciloscopio contaraacute con un cuadro para el control del osciloscopio
y con dos subdivisiones
o En el superior se mostraraacute la representacioacuten temporal de la sentildeal
o En el inferior se mostraraacute la representacioacuten en frecuencia de la sentildeal
bull La parte de filtrado que se activaraacute una vez pulsado el botoacuten de filtrar tambieacuten
se dividiraacute en dos partes
o La izquierda donde se encontraraacute el cuadro de texto en el que se podraacuten
introducir los coeficientes del filtro que se desee aplicar
o La derecha donde se podraacuten introducir frecuencia de corte el ancho
deseado en el paso de transicioacuten y la atenuacioacuten deseada en la banda de
stop en dB
Para que el correcto funcionamiento del sistema se debe
1 Conectar una sentildeal al CHA del BitScope
2 Conectar el BitScope mediante un puerto USB a un ordenador o Raspberry-pi que
disponga de un inteacuterprete de Python y de la libreriacutea que proporciona BitScope
(bitlib)
3 Ejecutar la aplicacioacuten
BitScope muestrea la sentildeal que le llega con la frecuencia de muestreo que se le indique
Dichas muestras son transferidas al ordenadorraspberry que esteacute ejecutando la
aplicacioacuten y son tratadas de modo que se pueda recomponer la sentildeal y trabajar con ella
4 Resultados
Para hablar de los resultados obtenidos nos apoyaremos en la Ilustracioacuten 1
bull Se representa la sentildeal introducida en el BitScope Se muestra de color verde la
sentildeal original tanto en la representacioacuten temporal como en el espectro de
frecuencia
bull Se puede controlar el nivel del trigger que nos permite capturar las sentildeales y
representarlas de manera estaacutetica cuando se cumple la condicioacuten Ademaacutes
pulsando el botoacuten Not Enabled del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
Declaro bajo mi responsabilidad que el Proyecto presentado con el tiacutetulo
Implementacioacuten de un Procesador Digital con BitScope
en la ETS de Ingenieriacutea - ICAI de la Universidad Pontificia Comillas en el
curso acadeacutemico (201617) es de mi autoriacutea original e ineacutedito y
no ha sido presentado con anterioridad a otros efectos
El Proyecto no es plagio de otro ni total ni parcialmente y la informacioacuten que ha sido
tomada de otros documentos estaacute debidamente referenciada
Fdo Javier de la Paz Garcillaacuten Fecha 10 07 2017
Autorizada la entrega del proyecto
LOS DIRECTORES DEL PROYECTO
Fdo Javier Matanza Domingo Fecha 10 07 2017
Fdo Gregorio Loacutepez Loacutepez Fecha 10 07 2017
Vordm Bordm del Coordinador de Proyectos
Fdo David Contreras Baacutercena Fecha helliphellip helliphellip helliphellip
AUTORIZACIOacuteN PARA LA DIGITALIZACIOacuteN DEPOacuteSITO Y DIVULGACIOacuteN EN RED DE
PROYECTOS FIN DE GRADO FIN DE MAacuteSTER TESINAS O MEMORIAS DE BACHILLERATO
1ordm Declaracioacuten de la autoriacutea y acreditacioacuten de la misma
El autor D Javier de la Paz Garcillaacuten DECLARA ser el titular de los derechos de propiedad intelectual
de la obra Implementacioacuten de un Procesador Digital de Sentildeal con el osciloscopio y analizador BitScope
que eacutesta es una obra original y que ostenta la condicioacuten de autor en el sentido que otorga la Ley de
Propiedad Intelectual
2ordm Objeto y fines de la cesioacuten
Con el fin de dar la maacutexima difusioacuten a la obra citada a traveacutes del Repositorio institucional de la
Universidad el autor CEDE a la Universidad Pontificia Comillas de forma gratuita y no exclusiva
por el maacuteximo plazo legal y con aacutembito universal los derechos de digitalizacioacuten de archivo de
reproduccioacuten de distribucioacuten y de comunicacioacuten puacuteblica incluido el derecho de puesta a disposicioacuten
electroacutenica tal y como se describen en la Ley de Propiedad Intelectual El derecho de transformacioacuten
se cede a los uacutenicos efectos de lo dispuesto en la letra a) del apartado siguiente
3ordm Condiciones de la cesioacuten y acceso
Sin perjuicio de la titularidad de la obra que sigue correspondiendo a su autor la cesioacuten de
derechos contemplada en esta licencia habilita para
a) Transformarla con el fin de adaptarla a cualquier tecnologiacutea que permita incorporarla a internet y
hacerla accesible incorporar metadatos para realizar el registro de la obra e incorporar ldquomarcas
de aguardquo o cualquier otro sistema de seguridad o de proteccioacuten
b) Reproducirla en un soporte digital para su incorporacioacuten a una base de datos electroacutenica
incluyendo el derecho de reproducir y almacenar la obra en servidores a los efectos de garantizar
su seguridad conservacioacuten y preservar el formato
c) Comunicarla por defecto a traveacutes de un archivo institucional abierto accesible de modo libre y
gratuito a traveacutes de internet
d) Cualquier otra forma de acceso (restringido embargado cerrado) deberaacute solicitarse expresamente
y obedecer a causas justificadas
e) Asignar por defecto a estos trabajos una licencia Creative Commons
f) Asignar por defecto a estos trabajos un HANDLE (URL persistente)
4ordm Derechos del autor
El autor en tanto que titular de una obra tiene derecho a
a) Que la Universidad identifique claramente su nombre como autor de la misma
b) Comunicar y dar publicidad a la obra en la versioacuten que ceda y en otras posteriores a traveacutes de
cualquier medio
c) Solicitar la retirada de la obra del repositorio por causa justificada
d) Recibir notificacioacuten fehaciente de cualquier reclamacioacuten que puedan formular terceras personas
en relacioacuten con la obra y en particular de reclamaciones relativas a los derechos de propiedad
intelectual sobre ella
5ordm Deberes del autor
bull El autor se compromete a
a) Garantizar que el compromiso que adquiere mediante el presente escrito no infringe ninguacuten
derecho de terceros ya sean de propiedad industrial intelectual o cualquier otro
b) Garantizar que el contenido de las obras no atenta contra los derechos al honor a la
intimidad y a la imagen de terceros
c) Asumir toda reclamacioacuten o responsabilidad incluyendo las indemnizaciones por dantildeos que
pudieran ejercitarse contra la Universidad por terceros que vieran infringidos sus derechos e
intereses a causa de la cesioacuten
d) Asumir la responsabilidad en el caso de que las instituciones fueran condenadas por infraccioacuten
de derechos derivada de las obras objeto de la cesioacuten
6ordm Fines y funcionamiento del Repositorio Institucional
La obra se pondraacute a disposicioacuten de los usuarios para que hagan de ella un uso justo y respetuoso con
los derechos del autor seguacuten lo permitido por la legislacioacuten aplicable y con fines de estudio
investigacioacuten o cualquier otro fin liacutecito Con dicha finalidad la Universidad asume los siguientes
deberes y se reserva las siguientes facultades
La Universidad informaraacute a los usuarios del archivo sobre los usos permitidos y no garantiza
ni asume responsabilidad alguna por otras formas en que los usuarios hagan un uso posterior de
las obras no conforme con la legislacioacuten vigente El uso posterior maacutes allaacute de la copia privada
requeriraacute que se cite la fuente y se reconozca la autoriacutea que no se obtenga beneficio comercial
y que no se realicen obras derivadas
La Universidad no revisaraacute el contenido de las obras que en todo caso permaneceraacute bajo la
responsabilidad exclusive del autor y no estaraacute obligada a ejercitar acciones legales en nombre del
autor en el supuesto de infracciones a derechos de propiedad intelectual derivados del depoacutesito y
archivo de las obras El autor renuncia a cualquier reclamacioacuten frente a la Universidad por las
formas no ajustadas a la legislacioacuten vigente en que los usuarios hagan uso de las obras
La Universidad adoptaraacute las medidas necesarias para la preservacioacuten de la obra en un futuro
La Universidad se reserva la facultad de retirar la obra previa notificacioacuten al autor en supuestos
suficientemente justificados o en caso de reclamaciones de terceros
Madrid a 10 de julio de 2017
ACEPTA
Fdo Javier de la Paz Garcillaacuten
Motivos para solicitar el acceso restringido cerrado o embargado del trabajo en el Repositorio Institucional
Agradecimientos
Me gustariacutea empezar agradeciendo a las personas que maacutes tengo que agradecer en la vida
mis padres
A ellos va dedicado todo lo que he conseguido y conseguireacute en mi vida Han confiado
siempre en miacute me han mostrado su apoyo incondicional y nunca me han hecho echar nada
en falta en mi vida
A partir de que termine mi ciclo en la universidad empezaraacute una nueva etapa en mi vida en
la que me tendreacute que valer por miacute mismo y poner en praacutectica todo lo que me han ensentildeado
durante estos antildeos Debereacute demostrar lo que valgo que ha valido la pena todo lo que han
apostado por miacute y devolver con creces todo lo que se ha invertido en tiempo esfuerzo y
dinero (Por suerte seacute que si me caigo tengo ya no solo mis padres sino a una maravillosa
familia detraacutes para ayudarme en lo que sea)
Tranquilos tened por seguro que no os fallareacute
Tambieacuten quiero aprovechar para agradecer a ICAI que me haya brindado la oportunidad de
estudiar y formarme como ingeniero en una universidad de semejante categoriacutea Agradecer
a cada uno de los profesores que he tenido durante estos cuatro antildeos con especial eacutenfasis en
los tutores que ademaacutes de ensentildearme en clase me han ayudado en lo personal fuera de ellas
y por supuesto a mis compantildeeros a los que muchos de ellos puedo llamar ahora amigos
sin los cuales tal vez no habriacutea llegado hasta aquiacute
Gracias a David Contreras coordinador de proyecto tutor y profesor miacuteo en estos antildeos de
grado por como su cercaniacutea y amabilidad con la clase su disponibilidad su ayuda y su
entrega con todos y cada uno de nosotros
Por uacuteltimo no puedo olvidar en el apartado de agradecimientos a mi director de proyecto
Javier Matanza Darte las gracias por todo el tiempo que le has dedicado al proyecto y a miacute
por muy pesado que haya sido estos meses por los mil correos que me has tenido que
contestar y nunca con tardanza por las quinientas veces que me has tenido que ver en tu
despacho y por tu auacuten con todo esto amabilidad para ayudarme
A todos vosotros os dedico mi proyecto un proyecto que pareciacutea que empezaba a nacer a
finales de febrero cuando me vi sin praacutecticas y sin TFG y del que 4 meses despueacutes no puedo
estar maacutes orgulloso y del que he disfrutado en el camino y con el resultado final
Gracias
IMPLEMENTACIOacuteN DE UN PROCESADOR DIGITAL DE SENtildeAL
CON BITSCOPE
Autor de la Paz Garcillaacuten Javier
Director Matanza Domingo Javier y Loacutepez Loacutepez Gregorio
Entidad Colaboradora ICAI ndash Universidad Pontificia Comillas
RESUMEN DEL PROYECTO
En el presente proyecto se ha desarrollado una aplicacioacuten capaz de hacer cometidos de
osciloscopio analizador de espectros y con funcionalidad de procesador digital de sentildeales
analoacutegicas y digitales esta es el filtrado seguacuten distintos criterios (coeficientes o
especificaciones) Dicha implementacioacuten ha sido llevada a cabo utilizando una plataforma
hardware conocida como BitScope [1] La aplicacioacuten que es compatible con cualquier
sistema operativo basado en Windows Linux y Mac utiliza el lenguaje Python [4] tanto
para la comunicacioacuten con el dispositivo hardware como para la representacioacuten de sentildeales
muestreadas
Palabras clave BitScope Python Procesador digital de sentildeal Osciloscopio
1 Introduccioacuten
Nos encontramos ante una situacioacuten en la cual se observa que las escuelas de ingenieriacutea
trabajan el tratado de sentildeales de una manera muy artificial Se utilizan programas
informaacuteticos principalmente MATLAB [5] u Octave [6] para ejercicios praacutecticos de
procesado digital de sentildeal Sin embargo este tipo de programas aunque cumple con las
expectativas en cuanto a resultados proporcionados no hace lo propio con el realismo
de dichas actividades de procesado de sentildeal La principal razoacuten es que se trabajan
exclusivamente con sentildeales digitales sinteacuteticas y que el trabajo con sentildeales en tiempo
real es complicado de implementar
2 Definicioacuten del proyecto
Se quiere llevar a cabo un proyecto cuyo resultado sea representar en tiempo y en
frecuencia una sentildeal analoacutegica muestreada previamente Se busca por tanto una
aplicacioacuten capaz de ser ejecutada en cualquier entorno que simule el funcionamiento de
un osciloscopio y un analizador de espectros
Ademaacutes se busca antildeadir a la aplicacioacuten funcionalidad de un procesador digital de sentildeal
de modo que ademaacutes de representar la sentildeal se pueda trabajar con ella Se opta por
antildeadir por tanto el filtrado de sentildeal con el meacutetodo de solape y almacenamiento como
prueba de concepto de los diferentes tipos de teacutecnicas de procesado digital de sentildeal que
se podriacutean llevar a cabo en la herramienta desarrollada Dicho filtrado se podriacutea hacer
ya sea mediante la introduccioacuten por parte del usuario de los coeficientes de dicho filtro
o con las especificaciones del filtro que se desea implementar
De este modo se dispondriacutea de una aplicacioacuten capaz de diferenciarse de cualquier otro
sistema existente por su versatilidad y su capacidad de aunar las funcionalidades de
representacioacuten y filtrado de sentildeales reales
Ademaacutes del objetivo principal se pretende que la herramienta desarrollada no suponga
una complejidad electroacutenica excesiva desde el punto de vista hardware Este ha sido uno
de los principales motivos por los que se ha decidido utilizar BitScope pues plantea un
entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra totalmente
resuelta
3 Descripcioacuten del modelosistemaherramienta
Seguacuten todo lo anterior la aplicacioacuten que se propone seraacute una ventana creada con Qt
Designer [3] y con la ayuda de la libreriacutea de PyQtGraph [2] que se dividiraacute en dos partes
bull La parte de osciloscopio contaraacute con un cuadro para el control del osciloscopio
y con dos subdivisiones
o En el superior se mostraraacute la representacioacuten temporal de la sentildeal
o En el inferior se mostraraacute la representacioacuten en frecuencia de la sentildeal
bull La parte de filtrado que se activaraacute una vez pulsado el botoacuten de filtrar tambieacuten
se dividiraacute en dos partes
o La izquierda donde se encontraraacute el cuadro de texto en el que se podraacuten
introducir los coeficientes del filtro que se desee aplicar
o La derecha donde se podraacuten introducir frecuencia de corte el ancho
deseado en el paso de transicioacuten y la atenuacioacuten deseada en la banda de
stop en dB
Para que el correcto funcionamiento del sistema se debe
1 Conectar una sentildeal al CHA del BitScope
2 Conectar el BitScope mediante un puerto USB a un ordenador o Raspberry-pi que
disponga de un inteacuterprete de Python y de la libreriacutea que proporciona BitScope
(bitlib)
3 Ejecutar la aplicacioacuten
BitScope muestrea la sentildeal que le llega con la frecuencia de muestreo que se le indique
Dichas muestras son transferidas al ordenadorraspberry que esteacute ejecutando la
aplicacioacuten y son tratadas de modo que se pueda recomponer la sentildeal y trabajar con ella
4 Resultados
Para hablar de los resultados obtenidos nos apoyaremos en la Ilustracioacuten 1
bull Se representa la sentildeal introducida en el BitScope Se muestra de color verde la
sentildeal original tanto en la representacioacuten temporal como en el espectro de
frecuencia
bull Se puede controlar el nivel del trigger que nos permite capturar las sentildeales y
representarlas de manera estaacutetica cuando se cumple la condicioacuten Ademaacutes
pulsando el botoacuten Not Enabled del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
AUTORIZACIOacuteN PARA LA DIGITALIZACIOacuteN DEPOacuteSITO Y DIVULGACIOacuteN EN RED DE
PROYECTOS FIN DE GRADO FIN DE MAacuteSTER TESINAS O MEMORIAS DE BACHILLERATO
1ordm Declaracioacuten de la autoriacutea y acreditacioacuten de la misma
El autor D Javier de la Paz Garcillaacuten DECLARA ser el titular de los derechos de propiedad intelectual
de la obra Implementacioacuten de un Procesador Digital de Sentildeal con el osciloscopio y analizador BitScope
que eacutesta es una obra original y que ostenta la condicioacuten de autor en el sentido que otorga la Ley de
Propiedad Intelectual
2ordm Objeto y fines de la cesioacuten
Con el fin de dar la maacutexima difusioacuten a la obra citada a traveacutes del Repositorio institucional de la
Universidad el autor CEDE a la Universidad Pontificia Comillas de forma gratuita y no exclusiva
por el maacuteximo plazo legal y con aacutembito universal los derechos de digitalizacioacuten de archivo de
reproduccioacuten de distribucioacuten y de comunicacioacuten puacuteblica incluido el derecho de puesta a disposicioacuten
electroacutenica tal y como se describen en la Ley de Propiedad Intelectual El derecho de transformacioacuten
se cede a los uacutenicos efectos de lo dispuesto en la letra a) del apartado siguiente
3ordm Condiciones de la cesioacuten y acceso
Sin perjuicio de la titularidad de la obra que sigue correspondiendo a su autor la cesioacuten de
derechos contemplada en esta licencia habilita para
a) Transformarla con el fin de adaptarla a cualquier tecnologiacutea que permita incorporarla a internet y
hacerla accesible incorporar metadatos para realizar el registro de la obra e incorporar ldquomarcas
de aguardquo o cualquier otro sistema de seguridad o de proteccioacuten
b) Reproducirla en un soporte digital para su incorporacioacuten a una base de datos electroacutenica
incluyendo el derecho de reproducir y almacenar la obra en servidores a los efectos de garantizar
su seguridad conservacioacuten y preservar el formato
c) Comunicarla por defecto a traveacutes de un archivo institucional abierto accesible de modo libre y
gratuito a traveacutes de internet
d) Cualquier otra forma de acceso (restringido embargado cerrado) deberaacute solicitarse expresamente
y obedecer a causas justificadas
e) Asignar por defecto a estos trabajos una licencia Creative Commons
f) Asignar por defecto a estos trabajos un HANDLE (URL persistente)
4ordm Derechos del autor
El autor en tanto que titular de una obra tiene derecho a
a) Que la Universidad identifique claramente su nombre como autor de la misma
b) Comunicar y dar publicidad a la obra en la versioacuten que ceda y en otras posteriores a traveacutes de
cualquier medio
c) Solicitar la retirada de la obra del repositorio por causa justificada
d) Recibir notificacioacuten fehaciente de cualquier reclamacioacuten que puedan formular terceras personas
en relacioacuten con la obra y en particular de reclamaciones relativas a los derechos de propiedad
intelectual sobre ella
5ordm Deberes del autor
bull El autor se compromete a
a) Garantizar que el compromiso que adquiere mediante el presente escrito no infringe ninguacuten
derecho de terceros ya sean de propiedad industrial intelectual o cualquier otro
b) Garantizar que el contenido de las obras no atenta contra los derechos al honor a la
intimidad y a la imagen de terceros
c) Asumir toda reclamacioacuten o responsabilidad incluyendo las indemnizaciones por dantildeos que
pudieran ejercitarse contra la Universidad por terceros que vieran infringidos sus derechos e
intereses a causa de la cesioacuten
d) Asumir la responsabilidad en el caso de que las instituciones fueran condenadas por infraccioacuten
de derechos derivada de las obras objeto de la cesioacuten
6ordm Fines y funcionamiento del Repositorio Institucional
La obra se pondraacute a disposicioacuten de los usuarios para que hagan de ella un uso justo y respetuoso con
los derechos del autor seguacuten lo permitido por la legislacioacuten aplicable y con fines de estudio
investigacioacuten o cualquier otro fin liacutecito Con dicha finalidad la Universidad asume los siguientes
deberes y se reserva las siguientes facultades
La Universidad informaraacute a los usuarios del archivo sobre los usos permitidos y no garantiza
ni asume responsabilidad alguna por otras formas en que los usuarios hagan un uso posterior de
las obras no conforme con la legislacioacuten vigente El uso posterior maacutes allaacute de la copia privada
requeriraacute que se cite la fuente y se reconozca la autoriacutea que no se obtenga beneficio comercial
y que no se realicen obras derivadas
La Universidad no revisaraacute el contenido de las obras que en todo caso permaneceraacute bajo la
responsabilidad exclusive del autor y no estaraacute obligada a ejercitar acciones legales en nombre del
autor en el supuesto de infracciones a derechos de propiedad intelectual derivados del depoacutesito y
archivo de las obras El autor renuncia a cualquier reclamacioacuten frente a la Universidad por las
formas no ajustadas a la legislacioacuten vigente en que los usuarios hagan uso de las obras
La Universidad adoptaraacute las medidas necesarias para la preservacioacuten de la obra en un futuro
La Universidad se reserva la facultad de retirar la obra previa notificacioacuten al autor en supuestos
suficientemente justificados o en caso de reclamaciones de terceros
Madrid a 10 de julio de 2017
ACEPTA
Fdo Javier de la Paz Garcillaacuten
Motivos para solicitar el acceso restringido cerrado o embargado del trabajo en el Repositorio Institucional
Agradecimientos
Me gustariacutea empezar agradeciendo a las personas que maacutes tengo que agradecer en la vida
mis padres
A ellos va dedicado todo lo que he conseguido y conseguireacute en mi vida Han confiado
siempre en miacute me han mostrado su apoyo incondicional y nunca me han hecho echar nada
en falta en mi vida
A partir de que termine mi ciclo en la universidad empezaraacute una nueva etapa en mi vida en
la que me tendreacute que valer por miacute mismo y poner en praacutectica todo lo que me han ensentildeado
durante estos antildeos Debereacute demostrar lo que valgo que ha valido la pena todo lo que han
apostado por miacute y devolver con creces todo lo que se ha invertido en tiempo esfuerzo y
dinero (Por suerte seacute que si me caigo tengo ya no solo mis padres sino a una maravillosa
familia detraacutes para ayudarme en lo que sea)
Tranquilos tened por seguro que no os fallareacute
Tambieacuten quiero aprovechar para agradecer a ICAI que me haya brindado la oportunidad de
estudiar y formarme como ingeniero en una universidad de semejante categoriacutea Agradecer
a cada uno de los profesores que he tenido durante estos cuatro antildeos con especial eacutenfasis en
los tutores que ademaacutes de ensentildearme en clase me han ayudado en lo personal fuera de ellas
y por supuesto a mis compantildeeros a los que muchos de ellos puedo llamar ahora amigos
sin los cuales tal vez no habriacutea llegado hasta aquiacute
Gracias a David Contreras coordinador de proyecto tutor y profesor miacuteo en estos antildeos de
grado por como su cercaniacutea y amabilidad con la clase su disponibilidad su ayuda y su
entrega con todos y cada uno de nosotros
Por uacuteltimo no puedo olvidar en el apartado de agradecimientos a mi director de proyecto
Javier Matanza Darte las gracias por todo el tiempo que le has dedicado al proyecto y a miacute
por muy pesado que haya sido estos meses por los mil correos que me has tenido que
contestar y nunca con tardanza por las quinientas veces que me has tenido que ver en tu
despacho y por tu auacuten con todo esto amabilidad para ayudarme
A todos vosotros os dedico mi proyecto un proyecto que pareciacutea que empezaba a nacer a
finales de febrero cuando me vi sin praacutecticas y sin TFG y del que 4 meses despueacutes no puedo
estar maacutes orgulloso y del que he disfrutado en el camino y con el resultado final
Gracias
IMPLEMENTACIOacuteN DE UN PROCESADOR DIGITAL DE SENtildeAL
CON BITSCOPE
Autor de la Paz Garcillaacuten Javier
Director Matanza Domingo Javier y Loacutepez Loacutepez Gregorio
Entidad Colaboradora ICAI ndash Universidad Pontificia Comillas
RESUMEN DEL PROYECTO
En el presente proyecto se ha desarrollado una aplicacioacuten capaz de hacer cometidos de
osciloscopio analizador de espectros y con funcionalidad de procesador digital de sentildeales
analoacutegicas y digitales esta es el filtrado seguacuten distintos criterios (coeficientes o
especificaciones) Dicha implementacioacuten ha sido llevada a cabo utilizando una plataforma
hardware conocida como BitScope [1] La aplicacioacuten que es compatible con cualquier
sistema operativo basado en Windows Linux y Mac utiliza el lenguaje Python [4] tanto
para la comunicacioacuten con el dispositivo hardware como para la representacioacuten de sentildeales
muestreadas
Palabras clave BitScope Python Procesador digital de sentildeal Osciloscopio
1 Introduccioacuten
Nos encontramos ante una situacioacuten en la cual se observa que las escuelas de ingenieriacutea
trabajan el tratado de sentildeales de una manera muy artificial Se utilizan programas
informaacuteticos principalmente MATLAB [5] u Octave [6] para ejercicios praacutecticos de
procesado digital de sentildeal Sin embargo este tipo de programas aunque cumple con las
expectativas en cuanto a resultados proporcionados no hace lo propio con el realismo
de dichas actividades de procesado de sentildeal La principal razoacuten es que se trabajan
exclusivamente con sentildeales digitales sinteacuteticas y que el trabajo con sentildeales en tiempo
real es complicado de implementar
2 Definicioacuten del proyecto
Se quiere llevar a cabo un proyecto cuyo resultado sea representar en tiempo y en
frecuencia una sentildeal analoacutegica muestreada previamente Se busca por tanto una
aplicacioacuten capaz de ser ejecutada en cualquier entorno que simule el funcionamiento de
un osciloscopio y un analizador de espectros
Ademaacutes se busca antildeadir a la aplicacioacuten funcionalidad de un procesador digital de sentildeal
de modo que ademaacutes de representar la sentildeal se pueda trabajar con ella Se opta por
antildeadir por tanto el filtrado de sentildeal con el meacutetodo de solape y almacenamiento como
prueba de concepto de los diferentes tipos de teacutecnicas de procesado digital de sentildeal que
se podriacutean llevar a cabo en la herramienta desarrollada Dicho filtrado se podriacutea hacer
ya sea mediante la introduccioacuten por parte del usuario de los coeficientes de dicho filtro
o con las especificaciones del filtro que se desea implementar
De este modo se dispondriacutea de una aplicacioacuten capaz de diferenciarse de cualquier otro
sistema existente por su versatilidad y su capacidad de aunar las funcionalidades de
representacioacuten y filtrado de sentildeales reales
Ademaacutes del objetivo principal se pretende que la herramienta desarrollada no suponga
una complejidad electroacutenica excesiva desde el punto de vista hardware Este ha sido uno
de los principales motivos por los que se ha decidido utilizar BitScope pues plantea un
entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra totalmente
resuelta
3 Descripcioacuten del modelosistemaherramienta
Seguacuten todo lo anterior la aplicacioacuten que se propone seraacute una ventana creada con Qt
Designer [3] y con la ayuda de la libreriacutea de PyQtGraph [2] que se dividiraacute en dos partes
bull La parte de osciloscopio contaraacute con un cuadro para el control del osciloscopio
y con dos subdivisiones
o En el superior se mostraraacute la representacioacuten temporal de la sentildeal
o En el inferior se mostraraacute la representacioacuten en frecuencia de la sentildeal
bull La parte de filtrado que se activaraacute una vez pulsado el botoacuten de filtrar tambieacuten
se dividiraacute en dos partes
o La izquierda donde se encontraraacute el cuadro de texto en el que se podraacuten
introducir los coeficientes del filtro que se desee aplicar
o La derecha donde se podraacuten introducir frecuencia de corte el ancho
deseado en el paso de transicioacuten y la atenuacioacuten deseada en la banda de
stop en dB
Para que el correcto funcionamiento del sistema se debe
1 Conectar una sentildeal al CHA del BitScope
2 Conectar el BitScope mediante un puerto USB a un ordenador o Raspberry-pi que
disponga de un inteacuterprete de Python y de la libreriacutea que proporciona BitScope
(bitlib)
3 Ejecutar la aplicacioacuten
BitScope muestrea la sentildeal que le llega con la frecuencia de muestreo que se le indique
Dichas muestras son transferidas al ordenadorraspberry que esteacute ejecutando la
aplicacioacuten y son tratadas de modo que se pueda recomponer la sentildeal y trabajar con ella
4 Resultados
Para hablar de los resultados obtenidos nos apoyaremos en la Ilustracioacuten 1
bull Se representa la sentildeal introducida en el BitScope Se muestra de color verde la
sentildeal original tanto en la representacioacuten temporal como en el espectro de
frecuencia
bull Se puede controlar el nivel del trigger que nos permite capturar las sentildeales y
representarlas de manera estaacutetica cuando se cumple la condicioacuten Ademaacutes
pulsando el botoacuten Not Enabled del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
d) Asumir la responsabilidad en el caso de que las instituciones fueran condenadas por infraccioacuten
de derechos derivada de las obras objeto de la cesioacuten
6ordm Fines y funcionamiento del Repositorio Institucional
La obra se pondraacute a disposicioacuten de los usuarios para que hagan de ella un uso justo y respetuoso con
los derechos del autor seguacuten lo permitido por la legislacioacuten aplicable y con fines de estudio
investigacioacuten o cualquier otro fin liacutecito Con dicha finalidad la Universidad asume los siguientes
deberes y se reserva las siguientes facultades
La Universidad informaraacute a los usuarios del archivo sobre los usos permitidos y no garantiza
ni asume responsabilidad alguna por otras formas en que los usuarios hagan un uso posterior de
las obras no conforme con la legislacioacuten vigente El uso posterior maacutes allaacute de la copia privada
requeriraacute que se cite la fuente y se reconozca la autoriacutea que no se obtenga beneficio comercial
y que no se realicen obras derivadas
La Universidad no revisaraacute el contenido de las obras que en todo caso permaneceraacute bajo la
responsabilidad exclusive del autor y no estaraacute obligada a ejercitar acciones legales en nombre del
autor en el supuesto de infracciones a derechos de propiedad intelectual derivados del depoacutesito y
archivo de las obras El autor renuncia a cualquier reclamacioacuten frente a la Universidad por las
formas no ajustadas a la legislacioacuten vigente en que los usuarios hagan uso de las obras
La Universidad adoptaraacute las medidas necesarias para la preservacioacuten de la obra en un futuro
La Universidad se reserva la facultad de retirar la obra previa notificacioacuten al autor en supuestos
suficientemente justificados o en caso de reclamaciones de terceros
Madrid a 10 de julio de 2017
ACEPTA
Fdo Javier de la Paz Garcillaacuten
Motivos para solicitar el acceso restringido cerrado o embargado del trabajo en el Repositorio Institucional
Agradecimientos
Me gustariacutea empezar agradeciendo a las personas que maacutes tengo que agradecer en la vida
mis padres
A ellos va dedicado todo lo que he conseguido y conseguireacute en mi vida Han confiado
siempre en miacute me han mostrado su apoyo incondicional y nunca me han hecho echar nada
en falta en mi vida
A partir de que termine mi ciclo en la universidad empezaraacute una nueva etapa en mi vida en
la que me tendreacute que valer por miacute mismo y poner en praacutectica todo lo que me han ensentildeado
durante estos antildeos Debereacute demostrar lo que valgo que ha valido la pena todo lo que han
apostado por miacute y devolver con creces todo lo que se ha invertido en tiempo esfuerzo y
dinero (Por suerte seacute que si me caigo tengo ya no solo mis padres sino a una maravillosa
familia detraacutes para ayudarme en lo que sea)
Tranquilos tened por seguro que no os fallareacute
Tambieacuten quiero aprovechar para agradecer a ICAI que me haya brindado la oportunidad de
estudiar y formarme como ingeniero en una universidad de semejante categoriacutea Agradecer
a cada uno de los profesores que he tenido durante estos cuatro antildeos con especial eacutenfasis en
los tutores que ademaacutes de ensentildearme en clase me han ayudado en lo personal fuera de ellas
y por supuesto a mis compantildeeros a los que muchos de ellos puedo llamar ahora amigos
sin los cuales tal vez no habriacutea llegado hasta aquiacute
Gracias a David Contreras coordinador de proyecto tutor y profesor miacuteo en estos antildeos de
grado por como su cercaniacutea y amabilidad con la clase su disponibilidad su ayuda y su
entrega con todos y cada uno de nosotros
Por uacuteltimo no puedo olvidar en el apartado de agradecimientos a mi director de proyecto
Javier Matanza Darte las gracias por todo el tiempo que le has dedicado al proyecto y a miacute
por muy pesado que haya sido estos meses por los mil correos que me has tenido que
contestar y nunca con tardanza por las quinientas veces que me has tenido que ver en tu
despacho y por tu auacuten con todo esto amabilidad para ayudarme
A todos vosotros os dedico mi proyecto un proyecto que pareciacutea que empezaba a nacer a
finales de febrero cuando me vi sin praacutecticas y sin TFG y del que 4 meses despueacutes no puedo
estar maacutes orgulloso y del que he disfrutado en el camino y con el resultado final
Gracias
IMPLEMENTACIOacuteN DE UN PROCESADOR DIGITAL DE SENtildeAL
CON BITSCOPE
Autor de la Paz Garcillaacuten Javier
Director Matanza Domingo Javier y Loacutepez Loacutepez Gregorio
Entidad Colaboradora ICAI ndash Universidad Pontificia Comillas
RESUMEN DEL PROYECTO
En el presente proyecto se ha desarrollado una aplicacioacuten capaz de hacer cometidos de
osciloscopio analizador de espectros y con funcionalidad de procesador digital de sentildeales
analoacutegicas y digitales esta es el filtrado seguacuten distintos criterios (coeficientes o
especificaciones) Dicha implementacioacuten ha sido llevada a cabo utilizando una plataforma
hardware conocida como BitScope [1] La aplicacioacuten que es compatible con cualquier
sistema operativo basado en Windows Linux y Mac utiliza el lenguaje Python [4] tanto
para la comunicacioacuten con el dispositivo hardware como para la representacioacuten de sentildeales
muestreadas
Palabras clave BitScope Python Procesador digital de sentildeal Osciloscopio
1 Introduccioacuten
Nos encontramos ante una situacioacuten en la cual se observa que las escuelas de ingenieriacutea
trabajan el tratado de sentildeales de una manera muy artificial Se utilizan programas
informaacuteticos principalmente MATLAB [5] u Octave [6] para ejercicios praacutecticos de
procesado digital de sentildeal Sin embargo este tipo de programas aunque cumple con las
expectativas en cuanto a resultados proporcionados no hace lo propio con el realismo
de dichas actividades de procesado de sentildeal La principal razoacuten es que se trabajan
exclusivamente con sentildeales digitales sinteacuteticas y que el trabajo con sentildeales en tiempo
real es complicado de implementar
2 Definicioacuten del proyecto
Se quiere llevar a cabo un proyecto cuyo resultado sea representar en tiempo y en
frecuencia una sentildeal analoacutegica muestreada previamente Se busca por tanto una
aplicacioacuten capaz de ser ejecutada en cualquier entorno que simule el funcionamiento de
un osciloscopio y un analizador de espectros
Ademaacutes se busca antildeadir a la aplicacioacuten funcionalidad de un procesador digital de sentildeal
de modo que ademaacutes de representar la sentildeal se pueda trabajar con ella Se opta por
antildeadir por tanto el filtrado de sentildeal con el meacutetodo de solape y almacenamiento como
prueba de concepto de los diferentes tipos de teacutecnicas de procesado digital de sentildeal que
se podriacutean llevar a cabo en la herramienta desarrollada Dicho filtrado se podriacutea hacer
ya sea mediante la introduccioacuten por parte del usuario de los coeficientes de dicho filtro
o con las especificaciones del filtro que se desea implementar
De este modo se dispondriacutea de una aplicacioacuten capaz de diferenciarse de cualquier otro
sistema existente por su versatilidad y su capacidad de aunar las funcionalidades de
representacioacuten y filtrado de sentildeales reales
Ademaacutes del objetivo principal se pretende que la herramienta desarrollada no suponga
una complejidad electroacutenica excesiva desde el punto de vista hardware Este ha sido uno
de los principales motivos por los que se ha decidido utilizar BitScope pues plantea un
entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra totalmente
resuelta
3 Descripcioacuten del modelosistemaherramienta
Seguacuten todo lo anterior la aplicacioacuten que se propone seraacute una ventana creada con Qt
Designer [3] y con la ayuda de la libreriacutea de PyQtGraph [2] que se dividiraacute en dos partes
bull La parte de osciloscopio contaraacute con un cuadro para el control del osciloscopio
y con dos subdivisiones
o En el superior se mostraraacute la representacioacuten temporal de la sentildeal
o En el inferior se mostraraacute la representacioacuten en frecuencia de la sentildeal
bull La parte de filtrado que se activaraacute una vez pulsado el botoacuten de filtrar tambieacuten
se dividiraacute en dos partes
o La izquierda donde se encontraraacute el cuadro de texto en el que se podraacuten
introducir los coeficientes del filtro que se desee aplicar
o La derecha donde se podraacuten introducir frecuencia de corte el ancho
deseado en el paso de transicioacuten y la atenuacioacuten deseada en la banda de
stop en dB
Para que el correcto funcionamiento del sistema se debe
1 Conectar una sentildeal al CHA del BitScope
2 Conectar el BitScope mediante un puerto USB a un ordenador o Raspberry-pi que
disponga de un inteacuterprete de Python y de la libreriacutea que proporciona BitScope
(bitlib)
3 Ejecutar la aplicacioacuten
BitScope muestrea la sentildeal que le llega con la frecuencia de muestreo que se le indique
Dichas muestras son transferidas al ordenadorraspberry que esteacute ejecutando la
aplicacioacuten y son tratadas de modo que se pueda recomponer la sentildeal y trabajar con ella
4 Resultados
Para hablar de los resultados obtenidos nos apoyaremos en la Ilustracioacuten 1
bull Se representa la sentildeal introducida en el BitScope Se muestra de color verde la
sentildeal original tanto en la representacioacuten temporal como en el espectro de
frecuencia
bull Se puede controlar el nivel del trigger que nos permite capturar las sentildeales y
representarlas de manera estaacutetica cuando se cumple la condicioacuten Ademaacutes
pulsando el botoacuten Not Enabled del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
Agradecimientos
Me gustariacutea empezar agradeciendo a las personas que maacutes tengo que agradecer en la vida
mis padres
A ellos va dedicado todo lo que he conseguido y conseguireacute en mi vida Han confiado
siempre en miacute me han mostrado su apoyo incondicional y nunca me han hecho echar nada
en falta en mi vida
A partir de que termine mi ciclo en la universidad empezaraacute una nueva etapa en mi vida en
la que me tendreacute que valer por miacute mismo y poner en praacutectica todo lo que me han ensentildeado
durante estos antildeos Debereacute demostrar lo que valgo que ha valido la pena todo lo que han
apostado por miacute y devolver con creces todo lo que se ha invertido en tiempo esfuerzo y
dinero (Por suerte seacute que si me caigo tengo ya no solo mis padres sino a una maravillosa
familia detraacutes para ayudarme en lo que sea)
Tranquilos tened por seguro que no os fallareacute
Tambieacuten quiero aprovechar para agradecer a ICAI que me haya brindado la oportunidad de
estudiar y formarme como ingeniero en una universidad de semejante categoriacutea Agradecer
a cada uno de los profesores que he tenido durante estos cuatro antildeos con especial eacutenfasis en
los tutores que ademaacutes de ensentildearme en clase me han ayudado en lo personal fuera de ellas
y por supuesto a mis compantildeeros a los que muchos de ellos puedo llamar ahora amigos
sin los cuales tal vez no habriacutea llegado hasta aquiacute
Gracias a David Contreras coordinador de proyecto tutor y profesor miacuteo en estos antildeos de
grado por como su cercaniacutea y amabilidad con la clase su disponibilidad su ayuda y su
entrega con todos y cada uno de nosotros
Por uacuteltimo no puedo olvidar en el apartado de agradecimientos a mi director de proyecto
Javier Matanza Darte las gracias por todo el tiempo que le has dedicado al proyecto y a miacute
por muy pesado que haya sido estos meses por los mil correos que me has tenido que
contestar y nunca con tardanza por las quinientas veces que me has tenido que ver en tu
despacho y por tu auacuten con todo esto amabilidad para ayudarme
A todos vosotros os dedico mi proyecto un proyecto que pareciacutea que empezaba a nacer a
finales de febrero cuando me vi sin praacutecticas y sin TFG y del que 4 meses despueacutes no puedo
estar maacutes orgulloso y del que he disfrutado en el camino y con el resultado final
Gracias
IMPLEMENTACIOacuteN DE UN PROCESADOR DIGITAL DE SENtildeAL
CON BITSCOPE
Autor de la Paz Garcillaacuten Javier
Director Matanza Domingo Javier y Loacutepez Loacutepez Gregorio
Entidad Colaboradora ICAI ndash Universidad Pontificia Comillas
RESUMEN DEL PROYECTO
En el presente proyecto se ha desarrollado una aplicacioacuten capaz de hacer cometidos de
osciloscopio analizador de espectros y con funcionalidad de procesador digital de sentildeales
analoacutegicas y digitales esta es el filtrado seguacuten distintos criterios (coeficientes o
especificaciones) Dicha implementacioacuten ha sido llevada a cabo utilizando una plataforma
hardware conocida como BitScope [1] La aplicacioacuten que es compatible con cualquier
sistema operativo basado en Windows Linux y Mac utiliza el lenguaje Python [4] tanto
para la comunicacioacuten con el dispositivo hardware como para la representacioacuten de sentildeales
muestreadas
Palabras clave BitScope Python Procesador digital de sentildeal Osciloscopio
1 Introduccioacuten
Nos encontramos ante una situacioacuten en la cual se observa que las escuelas de ingenieriacutea
trabajan el tratado de sentildeales de una manera muy artificial Se utilizan programas
informaacuteticos principalmente MATLAB [5] u Octave [6] para ejercicios praacutecticos de
procesado digital de sentildeal Sin embargo este tipo de programas aunque cumple con las
expectativas en cuanto a resultados proporcionados no hace lo propio con el realismo
de dichas actividades de procesado de sentildeal La principal razoacuten es que se trabajan
exclusivamente con sentildeales digitales sinteacuteticas y que el trabajo con sentildeales en tiempo
real es complicado de implementar
2 Definicioacuten del proyecto
Se quiere llevar a cabo un proyecto cuyo resultado sea representar en tiempo y en
frecuencia una sentildeal analoacutegica muestreada previamente Se busca por tanto una
aplicacioacuten capaz de ser ejecutada en cualquier entorno que simule el funcionamiento de
un osciloscopio y un analizador de espectros
Ademaacutes se busca antildeadir a la aplicacioacuten funcionalidad de un procesador digital de sentildeal
de modo que ademaacutes de representar la sentildeal se pueda trabajar con ella Se opta por
antildeadir por tanto el filtrado de sentildeal con el meacutetodo de solape y almacenamiento como
prueba de concepto de los diferentes tipos de teacutecnicas de procesado digital de sentildeal que
se podriacutean llevar a cabo en la herramienta desarrollada Dicho filtrado se podriacutea hacer
ya sea mediante la introduccioacuten por parte del usuario de los coeficientes de dicho filtro
o con las especificaciones del filtro que se desea implementar
De este modo se dispondriacutea de una aplicacioacuten capaz de diferenciarse de cualquier otro
sistema existente por su versatilidad y su capacidad de aunar las funcionalidades de
representacioacuten y filtrado de sentildeales reales
Ademaacutes del objetivo principal se pretende que la herramienta desarrollada no suponga
una complejidad electroacutenica excesiva desde el punto de vista hardware Este ha sido uno
de los principales motivos por los que se ha decidido utilizar BitScope pues plantea un
entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra totalmente
resuelta
3 Descripcioacuten del modelosistemaherramienta
Seguacuten todo lo anterior la aplicacioacuten que se propone seraacute una ventana creada con Qt
Designer [3] y con la ayuda de la libreriacutea de PyQtGraph [2] que se dividiraacute en dos partes
bull La parte de osciloscopio contaraacute con un cuadro para el control del osciloscopio
y con dos subdivisiones
o En el superior se mostraraacute la representacioacuten temporal de la sentildeal
o En el inferior se mostraraacute la representacioacuten en frecuencia de la sentildeal
bull La parte de filtrado que se activaraacute una vez pulsado el botoacuten de filtrar tambieacuten
se dividiraacute en dos partes
o La izquierda donde se encontraraacute el cuadro de texto en el que se podraacuten
introducir los coeficientes del filtro que se desee aplicar
o La derecha donde se podraacuten introducir frecuencia de corte el ancho
deseado en el paso de transicioacuten y la atenuacioacuten deseada en la banda de
stop en dB
Para que el correcto funcionamiento del sistema se debe
1 Conectar una sentildeal al CHA del BitScope
2 Conectar el BitScope mediante un puerto USB a un ordenador o Raspberry-pi que
disponga de un inteacuterprete de Python y de la libreriacutea que proporciona BitScope
(bitlib)
3 Ejecutar la aplicacioacuten
BitScope muestrea la sentildeal que le llega con la frecuencia de muestreo que se le indique
Dichas muestras son transferidas al ordenadorraspberry que esteacute ejecutando la
aplicacioacuten y son tratadas de modo que se pueda recomponer la sentildeal y trabajar con ella
4 Resultados
Para hablar de los resultados obtenidos nos apoyaremos en la Ilustracioacuten 1
bull Se representa la sentildeal introducida en el BitScope Se muestra de color verde la
sentildeal original tanto en la representacioacuten temporal como en el espectro de
frecuencia
bull Se puede controlar el nivel del trigger que nos permite capturar las sentildeales y
representarlas de manera estaacutetica cuando se cumple la condicioacuten Ademaacutes
pulsando el botoacuten Not Enabled del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
IMPLEMENTACIOacuteN DE UN PROCESADOR DIGITAL DE SENtildeAL
CON BITSCOPE
Autor de la Paz Garcillaacuten Javier
Director Matanza Domingo Javier y Loacutepez Loacutepez Gregorio
Entidad Colaboradora ICAI ndash Universidad Pontificia Comillas
RESUMEN DEL PROYECTO
En el presente proyecto se ha desarrollado una aplicacioacuten capaz de hacer cometidos de
osciloscopio analizador de espectros y con funcionalidad de procesador digital de sentildeales
analoacutegicas y digitales esta es el filtrado seguacuten distintos criterios (coeficientes o
especificaciones) Dicha implementacioacuten ha sido llevada a cabo utilizando una plataforma
hardware conocida como BitScope [1] La aplicacioacuten que es compatible con cualquier
sistema operativo basado en Windows Linux y Mac utiliza el lenguaje Python [4] tanto
para la comunicacioacuten con el dispositivo hardware como para la representacioacuten de sentildeales
muestreadas
Palabras clave BitScope Python Procesador digital de sentildeal Osciloscopio
1 Introduccioacuten
Nos encontramos ante una situacioacuten en la cual se observa que las escuelas de ingenieriacutea
trabajan el tratado de sentildeales de una manera muy artificial Se utilizan programas
informaacuteticos principalmente MATLAB [5] u Octave [6] para ejercicios praacutecticos de
procesado digital de sentildeal Sin embargo este tipo de programas aunque cumple con las
expectativas en cuanto a resultados proporcionados no hace lo propio con el realismo
de dichas actividades de procesado de sentildeal La principal razoacuten es que se trabajan
exclusivamente con sentildeales digitales sinteacuteticas y que el trabajo con sentildeales en tiempo
real es complicado de implementar
2 Definicioacuten del proyecto
Se quiere llevar a cabo un proyecto cuyo resultado sea representar en tiempo y en
frecuencia una sentildeal analoacutegica muestreada previamente Se busca por tanto una
aplicacioacuten capaz de ser ejecutada en cualquier entorno que simule el funcionamiento de
un osciloscopio y un analizador de espectros
Ademaacutes se busca antildeadir a la aplicacioacuten funcionalidad de un procesador digital de sentildeal
de modo que ademaacutes de representar la sentildeal se pueda trabajar con ella Se opta por
antildeadir por tanto el filtrado de sentildeal con el meacutetodo de solape y almacenamiento como
prueba de concepto de los diferentes tipos de teacutecnicas de procesado digital de sentildeal que
se podriacutean llevar a cabo en la herramienta desarrollada Dicho filtrado se podriacutea hacer
ya sea mediante la introduccioacuten por parte del usuario de los coeficientes de dicho filtro
o con las especificaciones del filtro que se desea implementar
De este modo se dispondriacutea de una aplicacioacuten capaz de diferenciarse de cualquier otro
sistema existente por su versatilidad y su capacidad de aunar las funcionalidades de
representacioacuten y filtrado de sentildeales reales
Ademaacutes del objetivo principal se pretende que la herramienta desarrollada no suponga
una complejidad electroacutenica excesiva desde el punto de vista hardware Este ha sido uno
de los principales motivos por los que se ha decidido utilizar BitScope pues plantea un
entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra totalmente
resuelta
3 Descripcioacuten del modelosistemaherramienta
Seguacuten todo lo anterior la aplicacioacuten que se propone seraacute una ventana creada con Qt
Designer [3] y con la ayuda de la libreriacutea de PyQtGraph [2] que se dividiraacute en dos partes
bull La parte de osciloscopio contaraacute con un cuadro para el control del osciloscopio
y con dos subdivisiones
o En el superior se mostraraacute la representacioacuten temporal de la sentildeal
o En el inferior se mostraraacute la representacioacuten en frecuencia de la sentildeal
bull La parte de filtrado que se activaraacute una vez pulsado el botoacuten de filtrar tambieacuten
se dividiraacute en dos partes
o La izquierda donde se encontraraacute el cuadro de texto en el que se podraacuten
introducir los coeficientes del filtro que se desee aplicar
o La derecha donde se podraacuten introducir frecuencia de corte el ancho
deseado en el paso de transicioacuten y la atenuacioacuten deseada en la banda de
stop en dB
Para que el correcto funcionamiento del sistema se debe
1 Conectar una sentildeal al CHA del BitScope
2 Conectar el BitScope mediante un puerto USB a un ordenador o Raspberry-pi que
disponga de un inteacuterprete de Python y de la libreriacutea que proporciona BitScope
(bitlib)
3 Ejecutar la aplicacioacuten
BitScope muestrea la sentildeal que le llega con la frecuencia de muestreo que se le indique
Dichas muestras son transferidas al ordenadorraspberry que esteacute ejecutando la
aplicacioacuten y son tratadas de modo que se pueda recomponer la sentildeal y trabajar con ella
4 Resultados
Para hablar de los resultados obtenidos nos apoyaremos en la Ilustracioacuten 1
bull Se representa la sentildeal introducida en el BitScope Se muestra de color verde la
sentildeal original tanto en la representacioacuten temporal como en el espectro de
frecuencia
bull Se puede controlar el nivel del trigger que nos permite capturar las sentildeales y
representarlas de manera estaacutetica cuando se cumple la condicioacuten Ademaacutes
pulsando el botoacuten Not Enabled del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
Ademaacutes del objetivo principal se pretende que la herramienta desarrollada no suponga
una complejidad electroacutenica excesiva desde el punto de vista hardware Este ha sido uno
de los principales motivos por los que se ha decidido utilizar BitScope pues plantea un
entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra totalmente
resuelta
3 Descripcioacuten del modelosistemaherramienta
Seguacuten todo lo anterior la aplicacioacuten que se propone seraacute una ventana creada con Qt
Designer [3] y con la ayuda de la libreriacutea de PyQtGraph [2] que se dividiraacute en dos partes
bull La parte de osciloscopio contaraacute con un cuadro para el control del osciloscopio
y con dos subdivisiones
o En el superior se mostraraacute la representacioacuten temporal de la sentildeal
o En el inferior se mostraraacute la representacioacuten en frecuencia de la sentildeal
bull La parte de filtrado que se activaraacute una vez pulsado el botoacuten de filtrar tambieacuten
se dividiraacute en dos partes
o La izquierda donde se encontraraacute el cuadro de texto en el que se podraacuten
introducir los coeficientes del filtro que se desee aplicar
o La derecha donde se podraacuten introducir frecuencia de corte el ancho
deseado en el paso de transicioacuten y la atenuacioacuten deseada en la banda de
stop en dB
Para que el correcto funcionamiento del sistema se debe
1 Conectar una sentildeal al CHA del BitScope
2 Conectar el BitScope mediante un puerto USB a un ordenador o Raspberry-pi que
disponga de un inteacuterprete de Python y de la libreriacutea que proporciona BitScope
(bitlib)
3 Ejecutar la aplicacioacuten
BitScope muestrea la sentildeal que le llega con la frecuencia de muestreo que se le indique
Dichas muestras son transferidas al ordenadorraspberry que esteacute ejecutando la
aplicacioacuten y son tratadas de modo que se pueda recomponer la sentildeal y trabajar con ella
4 Resultados
Para hablar de los resultados obtenidos nos apoyaremos en la Ilustracioacuten 1
bull Se representa la sentildeal introducida en el BitScope Se muestra de color verde la
sentildeal original tanto en la representacioacuten temporal como en el espectro de
frecuencia
bull Se puede controlar el nivel del trigger que nos permite capturar las sentildeales y
representarlas de manera estaacutetica cuando se cumple la condicioacuten Ademaacutes
pulsando el botoacuten Not Enabled del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su
rango Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
bull Se puede filtrar la sentildeal ya sea a traveacutes de los coeficientes del filtro que se desea
aplicar o introduciendo frecuencia de corte ancho de transicioacuten y atenuacioacuten en
banda de stop Para ver coacutemo seriacutea el diagrama de Bode del filtro disentildeado se
puede pulsar el botoacuten Plot en cualquiera de las dos opciones Una vez pulsado el
botoacuten Filter apareceraacute si el usuario asiacute lo desea la sentildeal filtrada en rojo Todos
los datos introducidos en las cajas de texto seraacuten validados y en caso de no ser
vaacutelidos se mostraraacute un mensaje de error descriptivo al usuario
bull Se podraacute elegir representar la sentildeal en tiempo en frecuencia la sentildeal original
la sentildeal filtrada o cualquier combinacioacuten deseada de estas cuatro
Ilustracioacuten 1 Ventana de aplicacioacuten en funcionamiento
5 Conclusiones
Se logra el objetivo de juntar la representacioacuten y el procesado digital de sentildeales analoacutegicas
Gracias a BitScope se ha sido capaz de ver funcionar un sistema en tiempo real El muestreo
se hace en tiempo real y se va representando seguacuten se procesan las muestras De este modo
se ha mostrado una pequentildea parte del gran potencial de un muestreador sencillo barato y
programable con una API extensa llena de posibilidades y que ayuda al propoacutesito por el
que nacioacute este proyecto de dar mayor realismo a las praacutecticas en tratado de sentildeal en las
escuelas de ingenieriacutea
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
6 Referencias
[1] Paacutegina Oficial BitScope - httpwwwbitscopeorg
[2] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[3] Paacutegina Oficial Qt Designer - httpswwwqtioide
[4] Paacutegina Oficial Python 27 - httpswwwpythonorgdownloadreleases27
[5] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[6] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
DIGITAL SIGNAL PROCESSOR IMPLEMENTATION WITH
BITSCOPE Author de la Paz Garcillaacuten Javier
Supervisor Matanza Domingo Javier and Loacutepez Loacutepez Gregorio
ABSTRACT
This project has developed an application capable of behaving as an oscilloscope spectrum
analyser and digital processor of analogue and digital signals filtering according to different
criteria (coefficients or specifications) This implementation has been carried out using a
hardware platform known as BitScope [1] The application which is compatible with any
operating system based on Windows Linux and Mac uses Python [4] language both for
communication with the hardware device and for the representation of sampled signals
Keywords BitScope Python Digital signal processor Oscilloscope
1 Introduction
We are faced with a situation in which it is observed that the engineering schools work
the signalling in a very artificial way Computer programs mainly MATLAB [5] or
Octave [6] are used for practical exercises in digital signal processing However this
kind of programs while meeting expectations in terms of results provided does not do
the same with the realism of such signal processing activities The main reason is that
they work exclusively with synthetic digital signals and that working with real-time
signals is complicated to implement
2 Project definition
We want to carry out a project which result is to represent in time and in frequency a
previously sampled analogue signal It is therefore sought an application capable of being
executed in any computer environment which simulates the function of an oscilloscope
and a spectrum analyser
In addition we are looking for adding to the application functionality of a digital signal
processor so that in addition to representing the signal you can work with it It has been
opted to add therefore the signal filtering with overlap-add method as proof of concept
of the different types of techniques of digital signal processing that could be carried out
in the developed tool The filtering could be done either by introducing the coefficients
or by the specifications of the filter to be implemented by the user
In this way an application would be available able to differentiate itself from any other
existing system for its versatility and its ability to combine the functionalities of
representation and filtering of real signals
In addition to the main objective it is intended that the tool developed does not imply an
excessive electronic complexity from the hardware point of view This has been one of
the main reasons why it has been decided to use BitScope since it proposes a fully
functional environment where the digitalization of the signal is totally resolved
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
3 System description
According to all the above the application that is proposed will be a window created
with Qt Designer [3] and with PyQtGraph [2] library that will be divided into two parts
bull The oscilloscope part will have a frame for the oscilloscope control and two
subdivisions
o In the upper one the temporal representation of the signal will be
displayed
o In the lower one the frequency representation of the signal will be
displayed
bull The filtering part which will be activated once the filter button is pressed will
also be divided into two parts
o On the left where you will find the text box in which you can enter the
coefficients of the filter to be applied
o On the right where you can enter cutting frequency the desired width in
the transition step and the desired attenuation in the stopband in dBs
For the correct functioning of the system we should
1 Connect a signal to the CHA of the BitScope
2 Connect the BitScope via a USB port to a computer or Raspberry-pi which has a
Python interpreter and the library that provides BitScope (bitlib)
3 Run the application
BitScope samples the entering signal with the sampling frequency instructed Such
samples are transferred to the computerraspberry that is running the application and are
treated so that the signal can be recomposed and work with it
4 Results
To talk about the results obtained we will reference to Figure 1
bull The signal entered in the BitScope is displayed The original signal is shown
green in both the temporal and frequency spectrum
bull It is possible to control the level of the trigger which allows us to capture the
signals and to represent them in a static way when the condition is fulfilled In
addition by pressing the button Not Enabled of the trigger the graphs can be
frozen In this way the signal can be enlarged reduced and moved to our liking
and thus be analysed without the signal being continuously refreshed and adjusted
to its range To return to the latter case simply press the button again
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
bull You can filter the signal either through the coefficients of the filter you want to
apply or by inputting cut-off frequency transition width and stopband
attenuation To see what the Bode diagram of the designed filter would look like
you can press the Plot button in either of the two options Once the Filter button
is pressed the filtered signal will appear in red if the user so wishes All data
entered in the text boxes will be validated and if not valid a descriptive error
message will be displayed to the user
bull You can choose to represent the signal in time in frequency the original signal
the filtered signal or any desired combination of these four
Figure 1 Application window working
5 Conclusions
The objective of joining digital representation and processing of analogue signals
together is achieved Thanks to BitScope it has been able to see a system work in real
time Sampling is done in real time and the samples are plot as they are processed In this
way it has been shown a small part of the great potential of a simple cheap and
programmable sampler with an extensive API full of possibilities and which helps the
purpose which this project was born giving more realism to the signal practices in
engineering universities
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
6 References
[1] BitScope Official Website - httpwwwbitscopeorg
[2] PyQtGraph Official Website - httpwwwpyqtgraphorg
[3] Qt Designer Official Website - httpswwwqtioide
[4] Python 27 Official Website - httpswwwpythonorgdownloadreleases27
[5] MATLAB Official Website - httpsesmathworkscomproductsmatlabhtml
[6] GNU Octave Official Website - httpswwwgnuorgsoftwareoctave
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
I
Iacutendice de la memoria
Capiacutetulo 1 Introduccioacuten 6
Capiacutetulo 2 Descripcioacuten de las Tecnologiacuteas 9
21 Procesamiento Digital de Sentildeal 9
Muestreo Digital 9
FFT 11
22 Python 12
PyQtGpraph 12
23 BitScope 12
24 Software 13
Qt Designer 13
25 Otras Tecnologiacuteas 14
Threads 14
Timers 15
Capiacutetulo 3 Estado de la Cuestioacuten 16
31 Proyectos relacionados 20
Capiacutetulo 4 Definicioacuten del Trabajo 22
41 Justificacioacuten 22
42 Objetivos 23
43 Metodologiacutea 24
44 Planificacioacuten y Estimacioacuten Econoacutemica 25
Planificacioacuten 25
Estimacioacuten Econoacutemica 27
Capiacutetulo 5 Sistema Desarrollado 29
51 Anaacutelisis del Sistema 29
52 Disentildeo 30
53 Implementacioacuten 32
Capiacutetulo 6 Anaacutelisis de Resultados 43
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE LA MEMORIA
II
Capiacutetulo 7 Conclusiones y Trabajos Futuros 51
Capiacutetulo 8 Bibliografiacutea 55
ANEXO A Coacutedigo Fuente 58
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
III
Iacutendice de Ilustraciones
Ilustracioacuten 1 Muestreo digital de una sentildeal 10
Ilustracioacuten 2 Diagrama de bloques de Conversor AD 10
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia 11
Ilustracioacuten 4 Diagrama de Gantt del proyecto 26
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel 29
Ilustracioacuten 6 Conexioacuten del sistema detallado 32
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten 32
Ilustracioacuten 8 Solape y almacenamiento 1 39
Ilustracioacuten 9 Solape y almacenamiento 2 39
Ilustracioacuten 10 Diagrama de Bode del filtro 40
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento 42
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante 44
Ilustracioacuten 13 Trigger Armed 45
Ilustracioacuten 14 Trigger Frozen 46
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones) 47
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes) 47
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones 48
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes 49
Ilustracioacuten 19 Eleccioacuten de representaciones 50
Ilustracioacuten 20 Validacioacuten de datos 50
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
IV
Iacutendice de tablas
Tabla 1 Coste de componentes hardware 28
Tabla 2 Tabla comparativa BitScope 53
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
IacuteNDICE DE FIGURAS
V
Iacutendice de Acroacutenimos
AD ndash Analoacutegico Digital
API - Application Programming Interface
DFT - Discrete Fourier Transform
HPF ndash High Pass Filter
IDE - Integrated Development Environment
IO ndash Input Output
FFT - Fast Fourier Transform
FIR ndash Finite Impulse Response
GUI - Graphical User Interface
LPF ndash Low Pass Filter
OEM - Original Equipment Manufacturer
PBF ndash Pass-Band Filter
PDS ndash Procesado Digital de Sentildeal
QA ndash Quality Assurance
TIC - Tecnologiacuteas de la Informacioacuten y la Comunicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
6
Capiacutetulo 1 INTRODUCCIOacuteN
Hoy en diacutea el anaacutelisis de sentildeales y el procesado digital de las mismas se considera
un tema imprescindible en el aprendizaje de cualquier carrera de tecnologiacuteas de la
informacioacuten y la comunicacioacuten (TIC) La digitalizacioacuten global en la que nos encontramos
actualmente confiere una gran importancia a este tema y una gran demanda de personas con
conocimientos sobre el mismo La digitalizacioacuten de sentildeales (o transcripcioacuten de sentildeales
analoacutegicas en sentildeales digitales) ha facilitado su procesamiento ademaacutes de inmunizarla
contra ruido e interferencias
Principalmente en ingenieriacuteas electroacutenicas y de telecomunicaciones el estudio de sentildeales
tanto analoacutegicas como digitales es de obligado cumplimiento Entender los principios
baacutesicos de la sentildeal la conversioacuten AD las ventajas e inconvenientes de esta conversioacuten y las
aplicaciones que se le pueden dar se antoja algo fundamental en nuestra sociedad en pleno
siglo XXI y ante la evolucioacuten del mundo digital y la cada vez menor presencia de las
tecnologiacuteas analoacutegicas
Vayaacutemonos por tanto al mundo acadeacutemico a los estudiantes de hoy en diacutea y a su formacioacuten
para el mundo de ahora En las escuelas de ingenieriacutea se les confiere mucha importancia a
las asignaturas de sentildeales En torno a 24-30 creacuteditos son destinados en las carreras de
Telecomunicaciones a ensentildear acerca de este tema
Las ingenieriacuteas como carreras praacutecticas que se presuponen suelen ser enfocadas en las
universidades con dos perspectivas la teoacuterica y la praacutectica Es por esto que la gran mayoriacutea
de las asignaturas se dividen en clases teoacutericas y laboratorios El objetivo de los laboratorios
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
7
no es otra que ensentildear al alumno como funciona lo aprendido en clase en la praacutectica
demostrar que la teoriacutea se puede llevar a la praacutectica que lo que se explica tiene aplicacioacuten
real y que los estudiantes entiendan que al final lo importante en las carreras de ingenieriacutea
es saber aplicar a la vida real lo aprendido diacutea a diacutea
Por todo esto en los laboratorios se busca el mayor realismo posible e intentar reproducir
lo maacutes fielmente que se pueda un caso real o en caso de no ser posible simularlo Y esto
uacuteltimo simularlo es lo que maacutes se hace en las praacutecticas de procesado de sentildeal
En las escuelas de ingenieriacutea se trabaja el tratado de sentildeales de manera muy artificial Se
utilizan programas informaacuteticos principalmente MATLAB [13] y GNU Octave [14] para
ejercicios praacutecticos de procesado digital de sentildeal sin embargo dichos programas aunque
cumplen con las expectativas en cuanto a resultados proporcionados no hacen lo propio con
el realismo de dichas actividades de procesado de sentildeal
MATLAB no trabaja con sentildeales analoacutegicas (reales) de manera sencilla ni trabaja en tiempo
real
Por otro lado las escuelas disponen de instrumentos capaces de trabajar con sentildeales
analoacutegicas y dar resultados en tiempo real como osciloscopios y analizadores de espectro
pero ademaacutes de su alto precio su principal laguna es que permiten el estudio de la sentildeal
pero no trabajar con ella debido a que carecen de caracteriacutesticas de procesado digital de
sentildeal
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
INTRODUCCIOacuteN
8
Se debe buscar una solucioacuten que auacutene todas las caracteriacutesticas previamente citadas y cumpla
el objetivo de dar mayor realismo a las praacutecticas de procesado digital de sentildeal de forma
sencilla y econoacutemica de esta buacutesqueda surge BitScope que supondraacute ser la base de este
proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
9
Capiacutetulo 2 DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
21 PROCESAMIENTO DIGITAL DE SENtildeAL
Manipulacioacuten matemaacutetica de una sentildeal de informacioacuten para modificarla o mejorarla en alguacuten
sentido [1] Se hace uso del procesamiento digital para realizar una amplia variedad de
operaciones de procesamiento de sentildeal
Se caracteriza por la representacioacuten en el dominio discreto (de tiempo o frecuencia) de
sentildeales por medio de una secuencia de nuacutemeros o siacutembolos y el procesado de esas sentildeales
Para dicho fin se suelen utilizar sistemas basados en un procesador o microprocesador con
instrucciones hardware y software optimizados para aplicaciones que requieran operaciones
numeacutericas a alta velocidad
El propoacutesito de procesar una sentildeal puede ser disminuir el nivel de ruido o mejorar la
presencia de determinados matices [2] Es por esto que algunas de las aplicaciones del
procesamiento digital de sentildeales son procesamientos de audio voz imaacutegenes viacutedeo o datos
digitales
MUESTREO DIGITAL
Fase del proceso de digitalizacioacuten de una sentildeal [5] Eacuteste consiste en tomar muestras de una
sentildeal analoacutegica a una frecuencia de muestreo constante (como se ve en la Ilustracioacuten 1) Se
reduce una sentildeal continua en el tiempo a sentildeal discreta
bull Una muestra es un valor o serie de valores en un punto en tiempo yo espacio
bull Un muestreador es un subsistema que extrae muestras de una sentildeal continua Fs
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
10
Ilustracioacuten 1 Muestreo digital de una sentildeal
Una vez realizado se pasa a la cuantificacioacuten de la misma y posteriormente a la codificacioacuten
como se muestra en la Ilustracioacuten 2 De este modo se completa una conversioacuten de una sentildeal
analoacutegica a digital
Ilustracioacuten 2 Diagrama de bloques de Conversor AD
Es uacutetil en la digitalizacioacuten de sentildeales [1] por consiguiente en las telecomunicaciones y en
la codificacioacuten del sonido en formato digital
Tiene su base en el teorema de muestreo de Nyquist-Shannon una sentildeal analoacutegica puede ser
reconstruida sin error de muestras tomadas en iguales intervalos de tiempo La razoacuten de
muestreo debe ser igual o mayor al doble de su ancho de banda de la sentildeal analoacutegica [15]
El muestreo praacutectico difiere del muestreo teoacuterico en tres puntos [5]
bull La onda con la que se muestrea estaacute constituida por trenes de impulsos de duracioacuten
no nula
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
11
bull Los filtros praacutecticos de reconstruccioacuten no pueden ser ideales
bull Los mensajes a los que se aplica el teorema no estaacuten estrictamente limitados en
banda ya que se trata de sentildeales limitadas en tiempo
FFT
Un algoritmo de transformada raacutepida de Fourier (FFT) calcula la transformada discreta de
Fourier (DFT) de una secuencia o su inversa (IFFT) [8]
El anaacutelisis de Fourier convierte una sentildeal de su dominio original (a menudo tiempo o
espacio) en una representacioacuten en el dominio de la frecuencia y viceversa (por ejemplo
permite pasar de la parte superior de la Ilustracioacuten 3 a la inferior y viceversa) Una FFT
calcula raacutepidamente tales transformaciones por factorizacioacuten de la matriz DFT en un
producto de escasos factores
Las transformadas raacutepidas de Fourier son ampliamente utilizadas para muchas aplicaciones
en ingenieriacutea ciencia y matemaacuteticas Algunos ejemplos de ello son tratamiento de imagen
y audio reduccioacuten de ruido en sentildeales anaacutelisis en frecuencia de sentildeales discretas anaacutelisis
de vibraciones de materiales y estadiacutestica etc
Ilustracioacuten 3 Sentildeal en tiempo y frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
12
22 PYTHON
Es un lenguaje de programacioacuten de alto nivel ampliamente utilizado hoy en diacutea para
propoacutesitos generales de programacioacuten [12]
Es un lenguaje interpretado usa tipado dinaacutemico es multiplataforma y con una sintaxis que
favorece el coacutedigo legible
Ademaacutes se trata de un lenguaje de programacioacuten multiparadigma soporta orientacioacuten a
objetos programacioacuten imperativa y funcional
PYQTGPRAPH
En la web oficial de PyQtGraph se dice de esta libreriacutea que es un graacutefico puramente Python
y una GUI construida sobre PyQt4PySide y NumPy Estaacute disentildeado para usarse en
aplicaciones matemaacuteticas cientiacuteficas o de ingenieriacutea A pesar de ser escrita totalmente en
Python la biblioteca es muy raacutepida debido a su gran influencia de NumPy para el caacutelculo
numeacuterico y el framework GraphicsView de Qt para una visualizacioacuten raacutepida PyQtGraph se
distribuye bajo la licencia MIT open-source [7]
Se puede correr en cualquier sistema operativo (Linux Windows and OSX) que tenga
Python 27 and 3+ PyQt 48+ o PySide y NumPy
23 BITSCOPE
BitScope Mixed Signal Systems son descritos en su paacutegina web oficial como osciloscopios
programables basados en PC analizadores loacutegicos analizadores de espectro generadores de
formas de onda y sistemas de adquisicioacuten de datos para Windows Mac OS X Linux y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
13
Raspberry Pi Ofrecen soluciones integrales en pruebas medidas monitoreo y control para
ingenieros en la industria educacioacuten I+D y servicio [6]
Econoacutemicos y todos ellos estaacuten basados en la BitScope Virtual Machine La BitScope
Virtual Machine permite actualizar y personalizar dinaacutemicamente el software
Son compatibles con el software maacutes actualizado
Son capaces de capturar sentildeales digitales y analoacutegicas simultaacuteneamente Tienen un ancho de
banda de 100 MHz y hasta 40 MSs de captura digital Incorporan generadores de onda y
reloj decodificadores de protocolo IO digitales y son capaces de conducir circuitos
externos de baja potencia
Los BitScopes son completamente programables por el usuario para poder ser utilizados en
aplicaciones altamente personalizadas o incluso integrados en productos de terceros y
sistemas de software en OEM Pueden programarse directamente a nivel de maacutequina virtual
utilizando guiacuteas de usuario de publicacioacuten o mediante la BitScope Library que pone a
disposicioacuten todas las funciones de adquisicioacuten y generacioacuten de datos de sentildeal mixta de
BitScope mediante una API de llamada de funcioacuten faacutecil de usar
Algunas de sus aplicaciones son la creacioacuten de prototipos pruebas y depuracioacuten de todo tipo
de sistemas de sentildeales mixtas del mundo real desde circuitos analoacutegicos loacutegica digital e
informaacutetica integrada hasta sistemas de comunicaciones sensores y servos en roboacutetica o
sistemas de control y control de procesos industriales
24 SOFTWARE
QT DESIGNER
Extraiacutedo de la informacioacuten oficial de Qt Designer se dice de ella que es la herramienta de
Qt para disentildear y construir interfaces graacuteficas de usuario (GUI) a partir de componentes de
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
14
Qt Con esta herramienta se puede componer y personalizar los widgets o diaacutelogos de una
manera que se pueda ver lo que se obtiene y probarlo utilizando diferentes estilos y
resoluciones [8]
Los widgets y formularios creados con Qt Designer se integran con el coacutedigo programado
utilizando el mecanismo de sentildeales y ranuras de Qt que le permite asignar faacutecilmente el
comportamiento a elementos graacuteficos Todas las propiedades establecidas en Qt Designer se
pueden cambiar dinaacutemicamente dentro del coacutedigo
Funciones como la promocioacuten de widgets y complementos personalizados permiten utilizar
componentes propios con Qt Designer
Qt Designer devuelve un archivo ui que debe ser convertido en py con la ayuda del fichero
pyuicpy
25 OTRAS TECNOLOGIacuteAS
THREADS
Un hilo de ejecucioacuten es la secuencia maacutes pequentildea de instrucciones programadas que puede
ser administrada independientemente por un planificador que es tiacutepicamente una parte del
sistema operativo [6]
Pueden existir muacuteltiples hilos dentro de un proceso ejecutaacutendose simultaacuteneamente y
compartiendo recursos como la memoria En particular los hilos de un proceso comparten
su coacutedigo ejecutable y los valores de sus variables en un momento dado
Un programa con varios hilos permite que mientras se estaacute ejecutando la parte visible al
usuario y con la que se puede interactuar en segundo plano se esteacuten ejecutando otros
procesos en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DESCRIPCIOacuteN DE LAS TECNOLOGIacuteAS
15
TIMERS
Un timer es un tipo especializado de reloj para medir intervalos de tiempo
Software timers estos tipos de timers no son dispositivos ni partes de dispositivos Soacutelo
existen en liacuteneas de coacutedigo Se basan en la precisioacuten de un oscilador de reloj normalmente
incorporado en un dispositivo de hardware que ejecuta el software [7]
Permiten que se ejecute una accioacuten cada vez que transcurre el tiempo establecido por el
programador Se suele utilizar de manera ciacuteclica para que se mantenga realizando una accioacuten
cada intervalo de tiempo determinado
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
16
Capiacutetulo 3 ESTADO DE LA CUESTIOacuteN
Este proyecto contribuiraacute en gran medida en un futuro muy cercano a que nuevos
estudiantes tengan la oportunidad de trabajar con sentildeales de una manera distinta a la que
tuvieron promociones anteriores Se busca el avance el desarrollo y la evolucioacuten de manera
que seguacuten avancen los antildeos se pueda dotar a los alumnos de mejores medios para el
aprendizaje
Hasta ahora en la Universidad Pontificia Comillas ICAI y en la gran mayoriacutea de las escuelas
de ingenieriacutea a las que se ha podido tener acceso a su informacioacuten trabajan de dos maneras
distintas el tratado de sentildeal
bull Parte de anaacutelisis la parte del estudio de la sentildeal Analizar describir y sacar las
caracteriacutesticas de una sentildeal en un circuito Se construyen circuitos con objetivos
concretos
o El alumno debe comprobar que la sentildeal que sale de cada etapa es correcta y
loacutegica
o El alumno debe construir un circuito para que dada una sentildeal de entrada en
la salida haya una sentildeal de unas caracteriacutesticas dadas
o El alumno debe analizar la sentildeal a la salida de un circuito ya dado y entender
que ha sucedido
o Etc
Para estas situaciones se utilizan equipos de medicioacuten y visualizacioacuten electroacutenica
como por ejemplo osciloscopios y analizadores de espectro
o El osciloscopio se utiliza para la representacioacuten graacutefica de sentildeales eleacutectricas
que pueden variar en el tiempo Muestra los valores de las sentildeales eleacutectricas
en forma de coordenadas en una pantalla en la que el eje X representa
tiempos y el eje Y las tensiones La forma de onda observada puede analizarse
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
17
para propiedades tales como amplitud frecuencia tiempo de subida
intervalo de tiempo distorsioacuten y otros El osciloscopio se puede ajustar para
que las sentildeales repetitivas se puedan observar como una forma continua en la
pantalla [3]
o El analizador de espectro permite visualizar en una pantalla los componentes
espectrales en un espectro de frecuencias de las sentildeales de entrada pudiendo
ser eacutestas de cualquier tipo eleacutectricas acuacutesticas u oacutepticas
En el eje de ordenadas se representa en una escala logariacutetmica el nivel en
dBm del contenido espectral de la sentildeal En el eje de abscisas se representa
la frecuencia en una escala que es funcioacuten de la separacioacuten temporal y el
nuacutemero de muestras capturadas
El equipo permite medir valores de potencia o tensioacuten de sentildeal eleacutectrica Su
uso principal es la medicioacuten de potencia del espectro de sentildeales conocidas y
desconocidas
Mediante el anaacutelisis de los espectros de las sentildeales eleacutectricas se pueden
observar frecuencias dominantes potencia distorsioacuten armoacutenicos ancho de
banda y otros componentes espectrales de una sentildeal que no son faacutecilmente
detectables en las formas de onda del dominio del tiempo [4]
Ambos equipos tienen una muy amplia y completa funcionalidad en su campo el
anaacutelisis sin embargo se observan en ambos casos las mismas desventajas para el fin
que busca este proyecto En primer lugar los precios de estos equipos son muy
elevados por lo que aunque no es gran cantidad de dinero para una universidad y
suelen encontrarse en los laboratorios de cualquier escuela de ingenieriacutea si es un
elevado precio si el que quiere comprarlo es un estudiante para tener en casa En
segundo lugar carece de funcionalidad de procesado digital de la sentildeal esto significa
que se puede observar todas las caracteriacutesticas de una sentildeal pero nunca modificarlas
o trabajar con ellas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
18
bull Parte de procesado digital de sentildeal la parte de trabajo con la sentildeal Se pueden hacer
multitud de praacutecticas de procesado digital como filtrado cuantificacioacuten cambios de
frecuencia etc Para estas situaciones se utilizan programas informaacuteticos como son
MATLAB (en ICAI y predominante en las universidades) y tambieacuten Octave (en
menor medida)
o MATLAB (matrix laboratory) es una herramienta de software matemaacutetico
de coacutemputo numeacuterico multi-paradigma que ofrece un entorno de desarrollo
integrado (IDE) con un lenguaje de programacioacuten propio (M) [13]
MATLAB permite manipulaciones de matriz trazado de funciones y datos
implementacioacuten de algoritmos creacioacuten de interfaces de usuario e interfaz
con programas escritos en otros lenguajes
Estaacute disponible para las plataformas Unix Windows Mac OS X y Linux
Es un software ampliamente utilizado en universidades y en centros de
investigacioacuten y desarrollo En los uacuteltimos antildeos ha aumentado el nuacutemero de
prestaciones como por ejemplo se ha antildeadido la posibilidad de programar
directamente procesadores digitales de sentildeal
Algunas de las utilidades de MATLAB son
Computacioacuten Paralela
Matemaacuteticas Estadiacutesticas y Optimizacioacuten
Sistemas de control
Procesamiento de Sentildeales y Comunicaciones
Procesamiento de imaacutegenes y visioacuten por ordenador
Prueba y medicioacuten
Finanzas Computacionales
Biologiacutea computacional
Generacioacuten y Verificacioacuten de Coacutedigo
Implementacioacuten de aplicaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
19
Conectividad y generacioacuten de informes de bases de datos
Generador de Reportes MATLAB
Nos centraremos en su amplia funcionalidad en procesamiento de sentildeales y
comunicaciones MATLAB dispone de Signal Processing Toolbox que como
MathWorks indica en la descripcioacuten oficial de dicho paquete ldquoproporciona
funciones y aplicaciones para generar medir transformar filtrar y visualizar
sentildeales La toolbox incluye algoritmos para remuestrear suavizar y
sincronizar sentildeales disentildear y analizar filtros estimar espectros de potencia y
medir picos ancho de banda y distorsioacuten La toolbox tambieacuten incluye
algoritmos de modelado predictivo parameacutetrico y lineal Puede usar Signal
Processing Toolbox para analizar y comparar sentildeales en los dominios de
tiempo frecuencia y tiempo-frecuencia identificar patrones y tendencias
extraer caracteriacutesticas y desarrollar y validar algoritmos personalizados que le
permitan conocer sus datos en profundidadrdquo
Sin embargo MATLB trabaja con sentildeales sinteacuteticas utiliza archivos de audio
digitales comprimidos (mp3 wav) Las sentildeales analoacutegicas son muy
complejas de implementar
o GNU Octave - es un software libre con un lenguaje de programacioacuten de alto
nivel destinado principalmente a caacutelculos numeacutericos Octave ayuda a
resolver problemas lineales y no lineales numeacutericamente y para realizar otros
experimentos numeacutericos utilizando un lenguaje que es en su mayoriacutea
compatible con Matlab Tambieacuten puede utilizarse como un lenguaje
orientado por lotes Dado que forma parte del Proyecto GNU es un software
libre bajo los teacuterminos de la Licencia Puacuteblica General GNU [14]
Octave es una de las alternativas libres principales a Matlab
Octave dispone de paquetes destinados a imaacutegenes mapping optimizacioacuten
sentildeales y estadiacutesticas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
20
El paquete de sentildeales de Octave dispone de herramientas de procesamiento
de sentildeal incluyendo filtrado ventana y funciones de visualizacioacuten Sin
embargo al igual que MATLAB carece de realismo funcional
El principal problema que encontramos en ambos programas destinados al
aacutembito acadeacutemico es el poco realismo de su trabajo con sentildeales Se trabaja
con sentildeales sinteacuteticas y los resultados no se producen en tiempo real
Al final esto hace que se pierda ese realismo tan importante que se busca en
las sesiones praacutecticas de laboratorio en las universidades
31 PROYECTOS RELACIONADOS
En una buacutesqueda por Internet se han encontrado algunos proyectos con alguna similitud al
que se presenta en este documento
bull PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi este
proyecto consiste en un osciloscopio digital y un generador de funciones que son
capaces de trazar y producir (al mismo tiempo) sentildeales eleacutectricas generadas (voltaje)
que cambian con el tiempo a lo largo de una escala calibrada El dispositivo
proporciona la funcionalidad baacutesica de osciloscopio digital de trazar el voltaje
variable en un monitor de escritorio y la capacidad baacutesica del generador de funciones
para producir ondas perioacutedicas de amplitudes y frecuencias variables [17]
El usuario del dispositivo es capaz de guardar graacuteficos generados en una tarjeta SD
y la medicioacuten de pico a pico de voltaje de un graacutefico Algunas de las funciones de
generacioacuten de funciones maacutes avanzadas incluyen frecuencia amplitud y el tipo de
onda (seno cuadrado y diente de sierra) Todas estas funciones de osciloscopio y
Generacioacuten de Funciones estaacuten disponibles a traveacutes de una GUI intuitiva e
interactiva
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ESTADO DE LA CUESTIOacuteN
21
Es en conclusioacuten un proyecto similar al propuesto La idea de un osciloscopio digital
estaacute presente aunque no se utiliza BitScope como muestreador Sin embargo difiere
en este proyecto en que no busca funcionalidad de procesador digital de sentildeal como
el filtrado si no que se centra en la generacioacuten de ondas
Otros proyectos maacutes similares que podemos encontrar son utilizando PiScope Sin embargo
todaviacutea estaacute en desarrollo temprano Tambieacuten utiliza una pantalla LCD para mostrar (en
lugar de un monitor) las sentildeales
bull BitScope PiLab ndash este proyecto es descrito por los desarrolladores como un
laboratorio de ciencia de coacutedigo abierto para Raspberry Pi y BitScope
PiLab es una plataforma de programacioacuten de coacutedigo abierto faacutecil de usar escrita en
Python estaacutendar para usar con Raspberry Pi Estaacute disentildeado para permitir la creacioacuten
de aplicaciones personalizadas de prueba medicioacuten y adquisicioacuten de datos en campos
educativos de ingenieriacutea y cientiacuteficos [19]
PiLab utiliza una sencilla interfaz graacutefica de usuario PNG que no requiere bibliotecas
de widgets complicadas
PiLab construye un sistema de prueba y verificacioacuten altamente optimizado para
probar el funcionamiento de BitScope Micro en produccioacuten
Se incluyen en PiLab las aplicaciones QA test y verificacioacuten
Es un proyecto que al igual que el que se expone utiliza BitScope para el tratado de
sentildeal pero con objetivos distintos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
22
Capiacutetulo 4 DEFINICIOacuteN DEL TRABAJO
41 JUSTIFICACIOacuteN
La principal motivacioacuten de este proyecto es cambiar la forma que hay actualmente en las
universidades de ingenieriacutea de trabajar en casos praacutecticos el tratado de sentildeal
Se busca una alternativa a los programas informaacuteticos actuales (MATLAB y GNU Octave)
que son la forma predominante en la actualidad para estas praacutecticas
Se busca el realismo hacer de las praacutecticas en el laboratorio una experiencia maacutes real Se
busca poder trabajar con sentildeales reales analoacutegicas en vez de digitales sinteacuteticas se busca
trabajar y obtener resultados en tiempo real
Se queriacutea conseguir una aplicacioacuten capaz de aunar los campos del anaacutelisis y el procesado
digital de sentildeal Un sistema que permita no solo la representacioacuten de sentildeales en tiempo y en
frecuencia si no que permita trabajar con estas sentildeales dotar al sistema de aplicaciones de
procesado digital de sentildeal como es el filtrado y hacer de esta manera la experiencia praacutectica
de tratado de sentildeales una experiencia maacutes real y completa
Esta aplicacioacuten se quiere diferenciar del resto por juntar las funcionalidades de distintos
sistemas (osciloscopio analizador de espectros y procesador digital de sentildeal) en uno solo
BitScope es un hardware especial disentildeado para ser un osciloscopio programable basado en
PC un analizador de loacutegica un generador de onda y reloj y un analizador de espectro
Ademaacutes se ha elegido BitScope ya que se pretende que la herramienta desarrollada no
suponga una complejidad electroacutenica excesiva desde el punto de vista hardware BitScope
plantea un entorno totalmente funcional donde la digitalizacioacuten de la sentildeal se encuentra
totalmente resuelta Asiacute mismo su coste en comparacioacuten con los sistemas a los que pretender
reemplazar es muy bajo y su tamantildeo de bolsillo lo hace faacutecilmente portable Estas dos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
23
ventajas antildeadidas a todas las descritas anteriormente hacen de esta aplicacioacuten una
aplicacioacuten totalmente uacutenica
42 OBJETIVOS
El objetivo del proyecto es conseguir una aplicacioacuten programada en Python que se pueda
ejecutar en cualquier sistema operativo y que sea capaz de
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Ademaacutes para el muestreo digital de la sentildeal entrante se busca conseguir un hardware
bull Sencillo (que la herramienta desarrollada no suponga una complejidad electroacutenica
excesiva)
bull Barato (en comparacioacuten con instrumentos similares)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
24
bull Programable (con API propia para ser configurado y personalizado mediante la
programacioacuten)
43 METODOLOGIacuteA
En este apartado tan solo se mencionaraacute con que tecnologiacutea se abordaraacute cada punto de los
objetivos
bull Digitalizacioacuten de las sentildeales entrantes BitScope
bull Interfaz graacutefico (ventana) Qt Designer
o Introduccioacuten de datos por ventana QLineEdit
o Seleccioacuten de sentildeal a representar QCheckBox
o Filtrado y representacioacuten del filtro QPushButton
o Congelado de sentildeal QPushButton
o Representacioacuten de sentildeales QGraphicsView
o Elegir tipo de filtrado QRadioButton
o Control de valor del trigger QDoubleSpinBox
o Notificacioacuten del estado del trigger QLabel
bull Pasar de coacutedigo XML del Qt Designer a Python pyuicpy
bull Comunicacioacuten con el BitScope Python y Bitlib (libreriacutea en Python de BitScope)
[9]
bull Funcionalidad de los elementos de la ventana Python
bull Obtencioacuten de muestras del Bitscope en segundo plano a la vez que funciona el resto
de la aplicacioacuten Threads
bull Refresco de las graacuteficas Timer
Se entraraacute en maacutes detalle de coacutemo funciona cada cosa en el apartado 5 del documento que
es donde corresponde la descripcioacuten en profundidad del disentildeo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
25
44 PLANIFICACIOacuteN Y ESTIMACIOacuteN ECONOacuteMICA
PLANIFICACIOacuteN
A la hora de llevar a cabo el proyecto se ha intentado seguir un calendario de hitos y
objetivos (ilustrado en la Ilustracioacuten 4 con un Diagrama de Gantt) que aunque no se ha
cumplido estrictamente ha sido muy orientativo y ha servido de guiacutea para una buena
planificacioacuten y organizacioacuten con el mismo
Este proyecto comenzoacute a finales del mes de febrero del antildeo 2017 y ha finalizado con su
documentacioacuten y presentacioacuten ante tribunal el 10 de julio de 2017
Se desarrollaraacute un poco maacutes en profundidad la planificacioacuten llevada a cabo las actividades
y su distribucioacuten
bull Inicio del proyecto ndash Planificacioacuten inicial se solicita llevar a cabo este proyecto
(Implementacioacuten de un Procesador Digital con BitScope) y se acepta por parte del
Director del Proyecto Se exponen los objetivos y se marcan las primeras fechas
bull Conocimiento e instalacioacuten del entorno de trabajo se encarga el hardware necesario
para el sistema del proyecto (el que viene listado en el apartado 442 del documento)
se descarga e instala el software requerido (Bitlib PyQtGraph Qt Designer Python)
y en paralelo se hace la parte de documentarse acerca de la tecnologiacutea que se va a
utilizar aprendiendo asiacute que posibilidades nos ofrece y cuaacutel es su funcionamiento
para que una vez instalado todo y teniendo todo el hardware disponible no perder
tiempo y poder iniciar directamente el trabajo con lo que ya se conoce
bull Disentildeo se da forma visual a la idea Se propone un boceto de coacutemo podriacutea ser la
ventana de la aplicacioacuten Eacuteste es llevado a cabo de manera provisional con Qt
Designer seraacute un primer disentildeo que cumpla los requisitos que se han establecido
hasta el momento pero dejando lugar a futuras modificaciones y antildeadidos
bull Implementacioacuten se incorpora toda la funcionalidad a la interfaz graacutefica con Python
y PyQtGraph Se crean las distintas clases se hace la separacioacuten en coacutedigo de la parte
de interfaz y la parte funcional Una vez finalizado se observa el resultado y se
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
26
proponen optimizaciones (mejorar la velocidad de la aplicacioacuten utilizando Threads)
y nuevas ideas a implementar (control del trigger formas alternativas de filtrado
representacioacuten de filtros) y se llevan a cabo Por uacuteltimo se hace la validacioacuten de los
datos entrantes y se toman medidas para avisar al usuario de que estaacute introduciendo
datos no vaacutelidos mediante notificaciones descriptivas de error
bull Documentacioacuten ndash una vez ya se tiene todo el coacutedigo terminado se pasa a la redaccioacuten
de la memoria Se documenta todo lo realizado en el proyecto siguiendo las pautas
del guion dado Una vez finalizado se hace la presentacioacuten y se praacutectica la defensa
del proyecto Daacutendose asiacute por finalizado completamente el diacutea de la exposicioacuten ante
el Tribunal
Ilustracioacuten 4 Diagrama de Gantt del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
27
ESTIMACIOacuteN ECONOacuteMICA
A continuacioacuten en la Tabla 1 viene un listado y descripcioacuten del hardware que se ha
necesitado para llevar a cabo este proyecto
El coste total del hardware ha sido de 19107 euro
Componente Precio
unitario
Cantidad Precio
total
Coacutedigo
RSFarnell
Link
Cable HDMI 1200 euro 1 1200 euro 489-412 httpesrs-
onlinecomwebpproduc
ts489-412
Alimentacioacuten
de Raspberry-
pi
868 euro 1 868 euro 909-8126 httpesrs-
onlinecomwebpfuente-
de-alimentacion-
enchufable9098126ori
gin=PSF_430702|acc
Raspberry-pi
3
3299 euro 1 3299 euro 896-8660 httpesrs-
onlinecomwebpkits-
de-desarrollo-de-
procesador-y-
microcontrolador896866
0
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
DEFINICIOacuteN DEL TRABAJO
28
Adaptador
BNC
2400 euro 1 2400 euro 2455505 httpesfarnellcombitsc
opemp01abnc-adapter-
bitscope-micro-
oscilloscopedp2455505
ost=bitscopeampcategoryI
d=700000022505
BitScope 9800 euro 1 9800 euro 2432906 httpesfarnellcombitsc
opebitscope-
microoscilloscope-2-
6ch-20mhz-
40mspsdp2432906
Tarjeta
MicroSD
1540 euro 1 1540 euro 121-3897 httpesrs-
onlinecomwebptarjeta
s-
sd1213897origin=PSF
_437585|acc
Tabla 1 Coste de componentes hardware
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
29
Capiacutetulo 5 SISTEMA DESARROLLADO
51 ANAacuteLISIS DEL SISTEMA
El sistema pensado a seguir es el descrito en el esquema de la Ilustracioacuten 5 En este apartado
se haraacute una descripcioacuten del sistema a muy alto nivel Ya en el apartado 52 de disentildeo se
profundizaraacute en los componentes que se han escogido las decisiones que se han tomado y
el porqueacute
bull Sentildeal debe haber una fuente que genere las sentildeales de entrada o se puede utilizar
cualquier otra sentildeal salida de otro sistema (ya sea analoacutegica o digital)
bull Muestreador se debe muestrear la sentildeal y enviar las muestras al PCRaspberry-pi
bull PCRaspberry-pi las muestras deben llegar al dispositivo final a traveacutes de un puerto
USB En el monitor del dispositivo final cuando se ejecute la aplicacioacuten apareceraacute
una ventana en la que se podraacute ver representada la sentildeal entrante en tiempo y en
frecuencia y podraacute ser filtrada
Ilustracioacuten 5 Conexioacuten del sistema a alto nivel
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
30
52 DISENtildeO
En este apartado se describiraacute como dados los objetivos y el sistema planteado se tomaron
las decisiones de disentildeo y porqueacute Los elementos elegidos finalmente son los que figuran en
la Ilustracioacuten 6
bull Generador de sentildeales se ha elegido un generador de sentildeales ya que nos ofrece
distintas posibilidades de sentildeal disentildeada a la medida del usuario Sin embargo como
se ha comentado con anterioridad cualquier sentildeal analoacutegica o digital valdriacutea
bull BitScope para la digitalizacioacuten de las sentildeales entrantes se ha decidido utilizar
BitScope Eacuteste plantea un entorno totalmente funcional donde la digitalizacioacuten de la
sentildeal se encuentra totalmente resuelta por lo que el muestreo de las sentildeales es
transparente al usuario Solo se debe inicializar con las condiciones deseadas al
activar el dispositivo hardware y tras esto nos podemos centrar uacutenicamente en las
muestras que devuelve de la sentildeal Ademaacutes permite la entrada de sentildeales tanto
analoacutegicas como digitales BitScope cumple con los requisitos establecidos y nos
sirve como base para alcanzar los objetivos propuestos Su funcionalidad viene
descrita en el punto 24 de este documento Se introduce la sentildeal en el muestreador
ya sea mediante los hilos de prueba sonda que vienen junto con el BitScope o con
cables BNC aprovechando el adaptador BNC del que se dispone El BitScope
muestrea la sentildeal y enviacutea las muestras al PCRaspberry-pi Para comunicarse
configurar y programar el BitScope se utilizaraacute la libreriacutea propia que dispone Bitlib
y lenguaje Python
bull PCRaspberry-pi las muestras llegan al dispositivo final a traveacutes de un puerto USB
El dispositivo final ya sea PC con Windows Linux o MAC o Raspberry debe tener
Python instalado y la libreriacutea Biltlib para poder ejecutar la aplicacioacuten (otra de las
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
31
ventajas de BitScope es la posibilidad de trabajar en cualquier entorno) Para crear el
interfaz graacutefico en forma de ventana de ordenador con el que pueda interactuar el
usuario se utiliza Qt Designer Este programa permite generar una ventana de
manera visual en cuanto a la eleccioacuten y colocacioacuten de los componentes que van a
formar parte de la misma Una vez finalizada y estando conforme con el resultado
se puede obtener el coacutedigo de la misma En el monitor del dispositivo final cuando
se inicie la aplicacioacuten apareceraacute una ventana en la que se podraacute representar la sentildeal
entrante en tiempo y en frecuencia se podraacute controlar el trigger de la representacioacuten
temporal se podraacute congelar la sentildeal la sentildeal podraacute ser filtrada por un filtro a disentildear
con coeficientes o especificaciones del filtro y se podraacute ver el Diagrama de Bode del
filtro disentildeado El disentildeo de la ventana auacuten sin funcionalidad seraacute el que se observa
en la Ilustracioacuten 7
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
32
Ilustracioacuten 6 Conexioacuten del sistema detallado
Ilustracioacuten 7 Disentildeo de la ventana de la aplicacioacuten
53 IMPLEMENTACIOacuteN
Empezaremos por la creacioacuten de la ventana de la aplicacioacuten que tendraacute el disentildeo mostrado
anteriormente en la Ilustracioacuten 7 Una vez creada con Qt Designer se guarda y se obtiene un
fichero ui con formato XML Para pasar de XML a coacutedigo Python se utiliza un fichero
Python pyuic que permite esta transformacioacuten
python pyuicpy -o nombre_ficheropy nombre_ficheroui
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
33
Todo lo relacionado con el disentildeo inicial de la ventana se guardaraacute en un fichero con
extensioacuten py que no debe ser modificado nunca manualmente En caso de querer proceder
a realizar un cambio se haraacute con el software de Qt Designer y se haraacute un reemplazo entre
el fichero antiguo y el nuevo
Lo primero se lleva a cabo en el fichero principal (main) es la inicializacioacuten de la ventana
de modo que cuando se ejecute dicho fichero lo primero que se produzca sea la creacioacuten de
la misma
A continuacioacuten se inicializan las variables auxiliares y las variables para lectura de datos
entrantes
Se configuran punteros de otras clases hacia el main
Se crean instancias de Sampler (que se encargaraacute de todo lo relacionado con la conexioacuten y
comunicacioacuten con BitScope) y de Plotter que seraacute la clase encargada de refrescar la
ventana
La secuencia que se debe llevar siempre con el BitScope debe ser
(1) Initialize (2) Setup (3) Trace (4) Acquire (5) Close
Lo primero que se realiza por tanto es la inicializacioacuten y el setup del BitScope Para ello se
tiene un meacutetodo open_scope en la clase Sampler Antes de empezar a dar funcionalidad a la
ventana haremos el open_scope (1) Utilizando la API de BitScope se aprende que el
muestreador se inicializa de la siguiente manera
bull BL_Initialize() - inicializa la libreriacutea
bull BL_Open( 1) - abre el dispositivo
(2) Una vez inicializado se hace el setup
bull BL_Count(BL_COUNT_ANALOG)
BL_Count(BL_COUNT_LOGIC)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
34
Detecta el nuacutemero de canales analoacutegicos y canales loacutegicos
bull BL_Select(BL_SELECT_DEVICE MY_DEVICE=0)
BL_Select(BL_SELECT_CHANNEL MY_CHANNEL=0)
BL_Select(BL_SELECT_SOURCE BL_SOURCE_POD)
Se seleccionan el dispositivo el canal y la fuente El primer argumento especifica
queacute tipo de entidad seleccionar El canal 0 elegido es el CHA
bull BL_Mode(MY_MODE=BL_MODE_FAST) - Cuando se selecciona el dispositivo por primera
vez tambieacuten debe seleccionarse su modo de trace Debe ser llamado despueacutes de
seleccionar el dispositivo pero antes de seleccionar el canal ya que el nuacutemero de
canales disponibles puede ser menor que el nuacutemero fiacutesico que el dispositivo admite
en algunos modos
bull BL_Range(BL_Count(BL_COUNT_RANGE)) ndash selecciona el rango de canales En nuestro
caso se selecciona el rango maacuteximo
bull BL_Offset(BL_ZERO) ndash asigna el offset del canal (0 en nuestro caso)
bull BL_Enable(TRUE) ndash cambia el estado del canal a habilitado
Con esto se podriacutea dar por finalizado el setup sin embargo se ha decidido configurar
tambieacuten en el open_scope el nuacutemero de muestras a leer en cada vez del BitScope (es decir
el nuacutemero de puntos) y la frecuencia de muestreo que se utiliza en el mismo
bull BL_Rate(selfMY_RATE=1000000) ndash se establece la frecuencia de muestreo a 1MHz
bull BL_Size(selfMY_SIZE=1000) ndash se reciben las muestras en bloques de 1000 (que
seraacuten los puntos con los que se representaraacute la sentildeal)
En segundo plano se pretende que el muestreador esteacute cogiendo continuamente muestras
Para ser exactos se desea obtener muestras cada 50 ms sin que esto afecte al funcionamiento
principal y visual de la aplicacioacuten Para hacer esto se ha decidido crear un hilo En dicho
hilo se inicializa un timer que llama al meacutetodo scope_acquire y que se configura para actuar
cada 50 ms El hilo se establece como secundario (daemon) y por tanto actuacutea en paralelo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
35
El hilo (thread) queda configurado de la siguiente manera
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Y la configuracioacuten del timer y llamada a scope_acquire es la siguiente
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
En el scope_acquire es donde se realizan las fases (3) y (4)
bull BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)- establece el nivel del trigger En
nuestro caso el nivel del trigger se leeraacute de una double spin box de la ventana Sin
embargo inicialmente se ha decido poner a 0 hasta que es usuario decida
cambiarlo
bull BL_Trace(01 False) ndash comienza el trace y captura la sentildeal Se puede hacer de
manera siacutencrona o asiacutencrona Se ha decidido hacerlo de manera siacutencrona con un
timeout de 100 ms En este caso se garantiza que BL_Trace regrese dentro del
tiempo especificado pero la traza puede o no haber terminado en ese tiempo
Devolveraacute TRUE si tiene y FALSE en caso contrario Si se ha completado se
podraacute mostrar el disparo capturado si no empezaraacute a disparar cada 01s que no se
haya conseguido disparo y por tanto no se mostraraacute una imagen fija si no la
consecucioacuten de disparos realizados Para que el usuario sepa en queacute situacioacuten se
encuentra de las dos se le informaraacute con una label que explicaremos maacutes adelante
como funciona
bull selfch1_data = BL_Acquire() ndash adquiere datos del dispositivo Una vez que se
ha completado el trace los datos (muestras) pueden ser adquiridos BL_Acquire
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
36
carga los datos del dispositivo de un canal a la vez En nuestro caso se devolveraacute
una list de 1000 muestras cada vez que sea llamado Sin embargo y para no saturar
la aplicacioacuten eacutestas seraacuten guardadas en una variable de clase selfch1_data para que
cuando vayan a ser utilizados (ya sea para refrescar la representacioacuten o para
cualquier otro cometido) esteacute disponible la maacutes actualizada y asiacute evitar que cada
vez que se hiciera un BL_Acquire() se interrumpiera en proceso principal
Ahora se pasa a dar funcionalidad a los botones del interfaz Para conectar los botones con
su meacutetodo se utilizaraacute la siguiente sintaxis
selfuinombre_botonclickedconnect(selfnombre_metodo)
Las funcionalidades de la ventana seraacuten
bull Representacioacuten temporal de la sentildeal original cuando los check box Show original y
Show time esteacuten seleccionadas el widget Graphics View superior estaraacute habilitado
y se mostraraacute la sentildeal entrante en color verde Los ejes X e Y representaraacuten tiempo
y tensioacuten (amplitud) respectivamente y se adaptaraacuten automaacuteticamente a los cambios
de rango de la sentildeal que sea introducida
bull Representacioacuten en frecuencia de la sentildeal original cuando los check box Show
original y Show frequency esteacuten seleccionadas el widget Graphics View inferior
estaraacute habilitado y se mostraraacute el espectro en frecuencia de la sentildeal entrante en color
verde Para pasar de tiempo a frecuencia se ha realizado la FFT de las muestras de
la sentildeal Para ello utilizando la libreriacutea numpyfft se aplica el algoritmo de la FFT a
cada una de las muestras de la sentildeal
119883119896 = sum 119909119899119890minus1198942120587119896119899119873
119873minus1
119899=0
119896 = 0hellip 119873 minus 1
Se mostraraacute el valor absoluto del resultado y exclusivamente la parte positiva en
frecuencia de los armoacutenicos (la parte de la derecha del cero) Los ejes X e Y
representaraacuten frecuencia y tensioacuten (amplitud) respectivamente y se adaptaraacuten
automaacuteticamente a los cambios de rango de la sentildeal que sea introducida
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
37
bull Filtrado
o A partir de los coeficientes del filtro que se desea aplicar Se introducen los
coeficientes de la forma [b1 b2 hellip bk] en la caja de texto de la seccioacuten
ldquoImpulse responserdquo
o A partir de las especificaciones del filtro que se desea aplicar Se introduce la
frecuencia de corte (donde se produce la caiacuteda a la mitad del valor original
de amplitud ndash 6 dB) en Hertzios ancho deseado en el paso de transicioacuten en
Hertzios y la atenuacioacuten deseada en la banda de stop en dB A partir de estas
caracteriacutesticas y utilizando la libreriacutea scipysignal se ha sido capaz de sacar
los coeficientes del filtro capaz de cumplir con lo requerido Con el meacutetodo
kaiserord se consigue disentildear una ventana Kaiser para limitar el rizado y el
ancho de transicioacuten de una regioacuten La ventana de Kaiser es una ventana wk
muy cercana a la ideal utilizada para procesamiento digital de sentildeales
definida por la foacutermula
119908119896 =
1198680 (120587120572radic1 minus (
2119896119899 minus 1)
2
)
1198680(120587120572) 0 le 119896 le 119899
0 119903119890119904119905119900
I0 = funcioacuten de Bessel de primer tipo de orden cero
α = nuacutemero real arbitrario que determina la forma de la ventana
n = nuacutemero natural que determina el tamantildeo de la ventana
Con firwin se calcula los coeficientes del filtro FIR correspondiente El filtro
tendraacute fase lineal
Una vez que se obtienen los coeficientes ambos casos se tratan de la misma manera
Para realizar el filtrado se utiliza el meacutetodo de solape y almacenamiento Este meacutetodo
permite realizar el filtrado en escenarios donde la sentildeal a filtrar es una sentildeal en
ldquostreamingrdquo es decir donde no se tiene desde un principio todas las muestras de la
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
38
sentildeal En estos se necesita hacer filtrado ldquoal vuelordquo como el que aquiacute se propone con
esta teacutecnica La idea es partir la sentildeal en trozos y aplicar la convolucioacuten circular a
cada uno de los bloques Se puede hacer ya que la convolucioacuten a trozos equivale a la
total
119910[119899] = 119909[119899] lowast ℎ[119899] = (sum119883119894[119899]
119894
) lowast ℎ[119899] = sum119909119894[119899] lowast ℎ[119899] = sum119910119894[119899]
119894119894
Siendo L el tamantildeo de los bloques y P la longitud de los coeficientes del filtro la
teacutecnica programada consiste en lo siguiente
1 Nuacutemero de bloques tamantildeo de las muestras (nordm de puntos) L-P+1
2 Filtro
a Coeficientes + (L-P) ceros al final
b Se hace la FFT del resultante
3 Se antildeaden P-1 ceros delante de los valores de las muestras de la sentildeal
4 Por cada bloque se hace
a Se cogen desde [k(L-(P-1)) k(L-(P-1))+L] siendo k el nordm de
bloque
b Se hace la FFT de cada bloque
c Se multiplica cada bloque con el filtro
d Se hace la IFFT de la sentildeal resultante
e Se almacena en una variable que se queda uacutenicamente con los
elementos [P L]
Para hacer esta explicacioacuten maacutes visual se ha decido antildeadir 2 ilustraciones En la
Ilustracioacuten 8 viene la representacioacuten de los puntos 1-4b y en la Ilustracioacuten 9 vienen
los puntos 4c-4e
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
39
Ilustracioacuten 8 Solape y almacenamiento 1
Ilustracioacuten 9 Solape y almacenamiento 2
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
40
Una vez introducidos los criterios del filtro y pulsado el botoacuten Filter si estaacuten
pulsados los check boxes Show time Show frequency y Show filtered
apareceraacute la sentildeal filtrada en tiempo y frecuencia en color rojo representada
Ademaacutes en el filtrado se dispone de la opcioacuten de ver representado en escala
logariacutetmica en dB el diagrama de Bode del filtro que vamos a introducir o
que ya hemos introducido Para esta representacioacuten se siguen los mismos
pasos que en el filtrado de la sentildeal sin embargo en vez de una vez calculado
el filtro multiplicarlo por la sentildeal de entrada se hace el 20log10(h[n]) y se
representa en una ventana a parte coacutemo podemos ver en la Ilustracioacuten 10
Ilustracioacuten 10 Diagrama de Bode del filtro
bull Control del trigger - se puede controlar el nivel del trigger que nos permite capturar
las sentildeales y representarlas de manera estaacutetica cuando se cumple la condicioacuten Para
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
41
determinar el nivel del trigger se dispone de un double spin box que permite cambiar
el nivel
Ademaacutes pulsando el botoacuten Freeze del trigger se pueden congelar las graacuteficas De
este modo se puede ampliar reducir y mover la sentildeal a nuestro gusto y asiacute ser
analizada sin que la sentildeal esteacute siendo continuamente refrescada y ajustada a su rango
Para volver a este uacuteltimo caso basta con volver a pulsar el botoacuten
Todo lo anteriormente descrito no es algo estaacutetico Esta aplicacioacuten se estaacute continuamente
refrescando En el main se establece un timer que actuacutea cada 500 ms y que conecta con la
clase Plotter para la actualizacioacuten de la ventana con la siguiente sintaxis
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfmy_plotterupdate())
selftimerstart(500)
En el update se actualiza
1 La representacioacuten en tiempo y en frecuencia tanto de la sentildeal original como de la
filtrada Se enviacutean las nuevas muestras sacadas por el muestreador
2 La representacioacuten u ocultacioacuten de las sentildeales
3 El nivel del trigger
4 El estado de trigger Triggered Armed o Frozen
Cuando se pulsa el botoacuten rojo de cerrar ventana se
bull Cierra la ventana graacutefica
bull Cierra el Bistcope (5)
o BL_Close() - Cierra todos los dispositivos abiertos (no es posible cerrar soacutelo
uno)
El resultado final de la aplicacioacuten en funcionamiento es el que se muestra en la Ilustracioacuten
11
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
SISTEMA DESARROLLADO
42
Ilustracioacuten 11 Ventana de aplicacioacuten en funcionamiento
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
43
Capiacutetulo 6 ANAacuteLISIS DE RESULTADOS
Una vez finalizado el proyecto se puede determinar que se ha conseguido el objetivo inicial
incluso se ha sido capaz de incrementar el alcance y la funcionalidad del proyecto
A continuacioacuten se mostraraacute con una Ilustracioacuten la consecucioacuten de cada objetivo
bull Representacioacuten de sentildeales digitales y analoacutegicas en tiempo y frecuencia (Ilustracioacuten
12) Se ve representada la sentildeal de entrada (senoidal de 46 KHz de frecuencia y 4 V
de amplitud) en verde Al ser la fs 1 MHz y el nuacutemero de puntos 1000 la ventana
temporal va de 0 a 1 ms En este caso se representaraacuten 46 ciclos Tambieacuten apreciamos
que la sentildeal no es seniodal pura y se ven otros valores de frecuencias y valor medio
aunque de muy baja amplitud
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
44
Ilustracioacuten 12 Representacioacuten temporal y en frecuencia de sentildeal entrante
bull Control del trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered (Ilustracioacuten 12 ndash amplitud de la sentildeal 4
V y trigger en 0 V Triggered) Armed (Ilustracioacuten 13 - amplitud de la sentildeal 4 V y
trigger en 5 V Armed) o Frozen (Ilustracioacuten 14 ndash botoacuten Freeze pulsado
Frozen)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
45
Ilustracioacuten 13 Trigger Armed
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
46
Ilustracioacuten 14 Trigger Frozen
bull Control del usuario para congelar mover y ampliar y reducir las representaciones
de las sentildeales (Ilustracioacuten 14) Una vez vuelto a pulsar el botoacuten Enabled se recupera
el autorange y se vuelve a actualizar la graacutefica con nuevas muestras entrantes
bull Representacioacuten logariacutetmica en dB de los filtros creados (Ilustracioacuten 15 e Ilustracioacuten
16) Se pueden ampliar mover y reducir de forma que si se quiere ver que caiacuteda se
tiene para cada frecuencia se puede conseguir ampliando para dicha frecuencia
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
47
Ilustracioacuten 15 Representacioacuten de filtro (especificaciones)
Ilustracioacuten 16 Representacioacuten de filtro (coeficientes)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
48
bull Filtrado de la sentildeal de entrada y representacioacuten Dados
o Los coeficientes del filtro (Ilustracioacuten 18)
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop (Ilustracioacuten 17) Primero se sacan los coeficientes y luego se
representa (solo en el caso de tener el check box Show filtrered activo)
Ilustracioacuten 17 Representacioacuten del filtrado con especificaciones
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
49
Ilustracioacuten 18 Representacioacuten del filtrado con coeficientes
Se observa en ambos casos como el filtrado con filtros FIR produce un desfase en
la salida Esto se debe a que los filtros FIR disentildeados no tienen fase lineal
bull Poder decidir representar la sentildeal con los check box en tiempo (Show time) en
frecuencia (Show frequency) la sentildeal original (Show original) la sentildeal filtrada (Show
filtered) o cualquier combinacioacuten deseada de estas cuatro (Ilustracioacuten 19)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANAacuteLISIS DE RESULTADOS
50
Ilustracioacuten 19 Eleccioacuten de representaciones
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
(Ilustracioacuten 20) Datos fuera del liacutemite de rango out of range Datos mal escritos
con letras o vaciacuteos sintax error
Ilustracioacuten 20 Validacioacuten de datos
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
51
Capiacutetulo 7 CONCLUSIONES Y TRABAJOS FUTUROS
El resultado final de este proyecto es una aplicacioacuten compatible para ser ejecutado en
cualquier sistema operativo capaz de cumplir todos los objetivos comentados al inicio del
documento y todo ello sin una complicacioacuten excesiva de hardware y sin grandes costes
Se han cubierto los siguientes objetivos
bull Representar sentildeales digitales y analoacutegicas en
o Tiempo
o Frecuencia
bull Controlar el trigger de la graacutefica de la sentildeal representada en tiempo e informacioacuten de
si nos encontramos en estado de Triggered Frozen o Armed
bull Congelar mover y ampliar y reducir las representaciones de las sentildeales
bull Sacar los coeficientes de un filtro a partir de sus especificaciones
bull Ver la representacioacuten logariacutetmica en dB de los filtros creados
bull Filtrar la sentildeal de entrada dados
o Los coeficientes del filtro
o La frecuencia de corte el ancho de banda de paso y la atenuacioacuten en la banda
de stop
bull Representacioacuten de la sentildeal filtrada
bull Poder decidir representar la sentildeal en tiempo en frecuencia la sentildeal original la sentildeal
filtrada o cualquier combinacioacuten deseada de estas cuatro
bull Validacioacuten de los datos de entrada y notificacioacuten descriptiva en caso de error
Y todo ello con un sistema sencillo barato y programable como se buscaba (basado en
BitScope)
Este programa tiene una interfaz de usuario simple de modo que cualquier usuario con
conocimientos baacutesicos pueda utilizarlo
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
52
La aplicacioacuten ya estaacute preparada para reemplazar en parte a MATLAB en praacutecticas
acadeacutemicas de laboratorio No tiene una funcionalidad completa para cubrir todo tipo de
praacutecticas y temario pero si para una parte de ello
Sin embargo la libreriacutea Bitlib nos da muchas maacutes posibilidades a explotar en este aacutembito
Se podriacutea ampliar la funcionalidad en la parte del osciloscopio
bull Antildeadiendo un botoacuten para cambiar las divisiones por segundo en la representacioacuten
temporal (modificando la frecuencia de muestreo)
bull Antildeadiendo un cuadro con las medidas (valores) de la sentildeal
En la parte de procesador digital de sentildeal se podriacutean
bull Antildeadir distintos tipos de filtro (LPF HPF BPF)
bull Se podriacutea pasar la sentildeal por distintos filtros consecutivos
bull Se podriacutea pasar la sentildeal por diezmadores e interpoladores cambiando asiacute la
frecuencia de muestreo de la sentildeal
bull Generacioacuten de sentildeales
En la Tabla 2 podemos ver todo lo que nos ofrece BitScope en comparacioacuten con otros
sistemas
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
53
BitScope Osciloscopio
Analizador de espectros
MATLAB
Octave
Programable
Trabajo sencillo con
sentildeales analoacutegicas
Funcionalidad de
procesador digital de
sentildeal
Trabajo en tiempo real
No necesaria licencia
Econoacutemico
Tabla 2 Tabla comparativa BitScope
Las conclusiones que se han podido sacar de este proyecto es que se puede ser capaz de
juntar en una sola aplicacioacuten las funcionalidades de osciloscopio analizador de espectros y
procesador digital de sentildeal gracias a BitScope y Python con sus libreriacuteas (PyQtGraph PyQt4
NumPy SciPy Math Threading Sys)
Se ha llevado a cabo un proyecto que ha juntado conceptos de sentildeal y programacioacuten Se han
abordado distintos aacutembitos de las telecomunicaciones como el Teorema de muestreo de
Nyquist-Shannon (para el muestreo de las sentildeales entrantes) la Transformada de Fourier
(para el caacutelculo del espectro en frecuencia de las sentildeales) timers (para la actualizacioacuten de la
ventana de la aplicacioacuten) hilos (para optimizar la funcionalidad de la aplicacioacuten del
BitScope ya que puede ser bloqueante) Python (para la comunicacioacuten con el BitScope y
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
CONCLUSIONES Y TRABAJOS FUTUROS
54
para la funcionalidad de la ventana) filtros FIR (para el filtrado de la sentildeal) convolucioacuten
circular y solape y almacenamiento (filtrado) punteros (para acceder de una clase a otra)
etc
Todo ello ha hecho de este proyecto un proyecto completo y enriquecedor que ha permitido
juntar conocimientos de distintas materias para distintas funciones pero con un solo fin la
creacioacuten de esta aplicacioacuten
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
55
Capiacutetulo 8 BIBLIOGRAFIacuteA
REFERENCIAS WIKIPEDIA
[1] Conversioacuten analoacutegica - digital (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiConversiC3B3n_analC3B3gica-digital
[2] Procesamiento digital de sentildeales (sf) En Wikipedia Recuperado el 13 de junio de
2017 de httpseswikipediaorgwikiProcesamiento_digital_de_seC3B1ales
[3] Osciloscopio (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiOsciloscopio
[4] Analizador de espectro (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiAnalizador_de_espectro
[5] Muestreo digital (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiMuestreo_digital
[6] Thread (sf) En Wikipedia Recuperado el 15 de junio de 2017 de
httpsenwikipediaorgwikiThread_(computing)
[7] Timer (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpsenwikipediaorgwikiTimer
[8] FFT (sf) En Wikipedia Recuperado el 13 de junio de 2017 de
httpseswikipediaorgwikiTransformada_rC3A1pida_de_Fourier
PAacuteGINAS DE PRODUCTOS OFICIALES
[9] Paacutegina Oficial BitScope - httpwwwbitscopeorg
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
56
[10] Paacutegina Oficial PyQtGraph - httpwwwpyqtgraphorg
[11] Paacutegina Oficial Qt Designer - httpswwwqtioide
[12] Paacutegina Oficial Python - httpswwwpythonorgdownloads
[13] Paacutegina Oficial MATLAB - httpsesmathworkscomproductsmatlabhtml
[14] Paacutegina Oficial GNU Octave - httpswwwgnuorgsoftwareoctave
OTRAS PAacuteGINAS DE REFERENCIA
[15] Teoria del muestreo de Nyquist (sf) Eveliux httpwwweveliuxcommxTeoria-
del-muestreo-de-Nyquisthtml
[16] Filter Design (sf)
httpwwwutdallasedu~raja1EE436120Spring2014Lecture20NotesFIR20Win
dowspdf
PROYECTOS RELACIONADOS
[17] PicBerry Oscilliscope and Function Generator with a PIC32 and Raspberry Pi -
httppeopleececornelledulandcoursesece4760FinalProjectsf2016ak634_jmw483_d
m797ak634_jmw483_dm797ak634_jmw483_dm797indexhtml
[18] Main Control System Test -
httpstwikiphrhulacuktwikipubPublicMainFilesmain_control_system_testpytxt
[19] BitScope Pilab - httpsbitbucketorgbitscopepilab
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
BIBLIOGRAFIacuteA
57
APIs
[20] BitLib - httpwwwbitscopecomsoftwarelibraryAPIhtml
[21] PyQt4 - httppyqtsourceforgenetDocsPyQt4
[22] PyQtGraph - httpwwwpyqtgraphorgdocumentationapireferencehtml
[23] NumPy - httpsdocsscipyorgdocnumpy-1120reference
[24] SciPy - httpsdocsscipyorgdocscipyreferenceapihtml
[25] Math - httpsdocspythonorg2librarymathhtml
[26] Sys - httpsdocspythonorg2librarysyshtml
[27] Threading - httpsdocspythonorg2librarythreadinghtml
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
58
ANEXO A COacuteDIGO FUENTE
filterDesign
import math
from scipy import signal
from numpy import cos sin pi absolute arange
from scipysignal import kaiserord lfilter firwin freqz
class FilterDesigner()
Pasar de especificaciones a coeficientes del filtro
staticmethod
def design(sample_ratewidthripple_dbcutoff_hz)
nyq_rate = sample_rate 20
width = widthnyq_rate
N beta = kaiserord(ripple_db width)
if Ngt=50
N=49
taps = firwin(N cutoff_hznyq_rate window=(kaiser beta))
taps = tapsmax(taps)
return taps
filtro
import math
import numpy as np
class Filtro(object)
Solape y almacenamiento
staticmethod
def filtrar(coeficientesdatatipo_filtrado)
coeficientes = npasarray(coeficientes)
data = npasarray(data)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
59
L = 100
P = len(coeficientes)
Calcular los trozos
num_trozos = mathceil(len(data)(L-(P-1)))
Filtro
h_n = npconcatenate((coeficientes npzeros(L-P)) axis=0)
H_n = npfftfft(h_n)len(h_n)
num_zeros_ult_bloq = (L-P+1-(L-P+1)(len(data)(L-P+1))100)
data_add = npconcatenate((data npzeros(num_zeros_ult_bloq)) axis=0)
Senial
x_n_pad = npconcatenate((npzeros(P-1) data_add) axis=0)
Reservar memoria para la salida
g_n=[]
Algoritmo de troceado DFT multiplicacion y almacenamiento
for k in range(0 int(num_trozos+1))
Trozo k-esimo
x_k = x_n_pad[k(L-(P-1)) k(L-(P-1))+L]
DFT
X_k = npfftfft(x_k)len(x_k)
Multiplicacion
Z_k = npmultiply(X_kH_n)
DFT inversa
z_k = npfftifft(Z_k)mathpow(len(Z_k)2)
Almacenamiento
if(k==(num_trozos))
decimal = len(data)float(L-P)-int(len(data)(L-P))
ultimo = int(decimal(L-P+1))
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1-(L-P-ultimo)] = z_k[P L-(L-
P-ultimo)]
if(len(coeficientes)gt=50)
g_n = npconcatenate((g_n(npzeros(1000-len(g_n))))axis=0)
else
g_n[k(L-(P-1)) (k+1)(L-(P-1))-1] = z_k[P L]
if(tipo_filtrado==4)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
60
a = npfftfft(h_nlen(g_n)2)
a = npabs(a[len(g_n)])
primero = a[0]
for n in range(len(a))
g_n[n] = g_n[n]primero
return npreal(g_n)
main_ui
import sys
import pyqtgraph as pg
import threading
import math
import numpy as np
import time
from PyQt4 import QtGui QtCore
from windows import VentanaFiltro
from bitlib import
from sampler import Sampler
from plotter import Plotter
from parse import Parse
from filterDesign import FilterDesigner
class Main(QtGuiQMainWindow)
def __init__(self)
Ventana inicializacion
QtGuiQMainWindow__init__(self)
selfsetFixedSize(1007 658)
selfui = VentanaFiltro()
selfuisetupUi(self)
selfsetWindowTitle(Digital Signal Processor)
Auxiliares
selfauxi_time = False
selfauxi_freq = False
selfauxi_filtrado = False
selfauxi_ori = False
selfauxi_filtered = False
selfauxi_tigger = False
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
61
selftipo_filtrado = 4
Leido
selftxt = []
selfcoeficientes = [1]
Datos que me introducirian en la ventana
selfMY_RATE = 1000000 Frecuencia de muestreo
selfMY_SIZE = 1000 Numero de puntos (tamanio)
Metodos botones
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationsclickedconnect(selfbtnSpecifications_Clicked)
selfuiradioButtonclickedconnect(selfbtnCoefficients_Clicked)
selfuicheckBox_3clickedconnect(selfcheckBox_3_Clicked)
selfuicheckBox_4clickedconnect(selfcheckBox_4_Clicked)
selfuipushButtonclickedconnect(selfpushButton_Clicked)
selfuipushButton_2clickedconnect(selfpushButton_2_Clicked)
selfuicheckBoxclickedconnect(selfcheckBox_Clicked)
selfuicheckBox_2clickedconnect(selfcheckBox_2_Clicked)
selfuipushButton_3clickedconnect(selfpushButton_3_Clicked)
selfuipushButton_5clickedconnect(selfpushButton_5_Clicked)
selfuipushButton_4clickedconnect(selfpushButton_4_Clicked)
Punteros hacia el GUI
selfmy_sampler = Sampler(selfMY_SIZE)
selfmy_samplersetUI(self)
selfmy_plotter = Plotter()
selfmy_plottersetUI(self)
selfmy_plottersetSampler(selfmy_sampler)
Abrir Bitscope
selfmy_sampleropen_scope()
Crear graficas de tiempo y frecuencia
win = pgGraphicsWindow()
winsetWindowTitle(Bitscope analysis)
pgsetConfigOptions(antialias=True background=w)
selfp6 = pgPlotWidget()
selfp7 = pgPlotWidget()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
62
selfp6setLabel(bottom Time units=sunitPrefix=None)
selfp6setLabel(left Amplitude units=VunitPrefix=None)
selfp6resize(919169)
selfp7setLabel(bottom Frequency units=HzunitPrefix=None)
selfp7setLabel(left Amplitude units=VunitPrefix=None)
selfp7resize(919169)
selfcurve = selfp6plot(pen=g name=t_original)
selfcurve3 = selfp6plot(pen=r name=t_filtered)
selfcurve2 = selfp7plot(pen=g)
selfcurve4 = selfp7plot(pen=r)
selfscene = QtGuiQGraphicsScene()
selfsceneaddWidget(selfp6)
selfscene2 = QtGuiQGraphicsScene()
selfscene2addWidget(selfp7)
Ventana filtro
selfwin3 = None
selfp_plot = None
selfcurve_plot = None
Coger muestras continuamente en otro hilo secunadario (daemon)
thread1 = threadingThread(selfmy_samplerstartAcquire())
thread1setDaemon(True)
thread1start()
thread1join()
Timer cada 05s para refrescar (update) de la ventana
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda
selfmy_plotterupdate([selfcurveselfcurve2selfcurve3selfcurve4][selfp6
selfp7]selfMY_RATEselfMY_SIZE
selfauxi_filtradoselfcoeficientesselfauxi_oriselfauxi_filteredselfauxi_t
iggerselfuidoubleSpinBoxvalue()selfuilabel_9selftipo_filtrado))
selftimerstart(500)
RadioButton especificaciones filtro
def btnSpecifications_Clicked(self)
selfuilineEditsetEnabled(True)
selfuilineEdit_2setEnabled(True)
selfuilineEdit_3setEnabled(True)
selfuiradioButtonsetChecked(False)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
63
selfuilineEdit_5setEnabled(False)
selfuilineEdit_5setText()
selfuipushButtonsetEnabled(False)
selfuipushButton_2setEnabled(True)
selfuipushButton_4setEnabled(True)
selfuipushButton_5setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
RadioButton coeficientes filtro
def btnCoefficients_Clicked(self)
selfuilineEditsetEnabled(False)
selfuilineEdit_2setEnabled(False)
selfuilineEdit_3setEnabled(False)
selfuilineEditsetText()
selfuilineEdit_2setText()
selfuilineEdit_3setText()
selfuilineEdit_5setText([b1b2 bk])
selfuibtnSpecificationssetChecked(False)
selfuilineEdit_5setEnabled(True)
selfuipushButtonsetEnabled(True)
selfuipushButton_2setEnabled(False)
selfuipushButton_4setEnabled(False)
selfuipushButton_5setEnabled(True)
CheckBox show time
def checkBox_3_Clicked(self)
if(selfauxi_time==True)
selfauxi_time = False
selfuigraphicsViewsetScene(None)
else
selfauxi_time = True
selfuigraphicsViewsetScene(selfscene)
CheckBox show frequency
def checkBox_4_Clicked(self)
if(selfauxi_freq==True)
selfauxi_freq = False
selfuigraphicsView_2setScene(None)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
64
else
selfauxi_freq = True
selfuigraphicsView_2setScene(selfscene2)
Boton filter coeficientes
def pushButton_Clicked(self)
try
selfcoeficientes =
ParseparseQStringToList(selfuilineEdit_5text())
selftipo_filtrado = 5
selfauxi_filtrado = True
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
selfuilineEdit_5setStyleSheet(color black)
Boton filter especificaciones
def pushButton_2_Clicked(self)
selfcutoff = None
selfwidth = None
selfastop = None
try
selfcutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(selfcutofflt0 or selfcutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
selfwidth = ParseparseQStringToFloat(selfuilineEdit_2text())
if(selfwidthlt0 or (selfcutoff+selfwidth)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
selfastop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(selfastoplt0 or selfastopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
selfuilineEdit_3setText(Sintax error)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
65
if(selfcutoff=None and selfwidth=None and selfastop=None)
if(not(selfcutofflt0 or selfcutoffgt500000) and not(selfwidthlt0 or
(selfcutoff+selfwidth)gt500000) and not(selfastoplt0 or selfastopgt1000))
try
selfcoeficientes =
list(FilterDesignerdesign(selfMY_RATEselfwidthselfastopselfcutoff))
selftipo_filtrado = 4
selfauxi_filtrado = True
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
CheckBox show original
def checkBox_Clicked(self)
if(selfauxi_ori==True)
selfauxi_ori = False
else
selfauxi_ori = True
CheckBox show filtered
def checkBox_2_Clicked(self)
if(selfauxi_filtered==True)
selfauxi_filtered = False
else
selfauxi_filtered = True
EnableNot enable trigger
def pushButton_3_Clicked(self)
if(selfauxi_tigger==True)
selfauxi_tigger = False
selfuipushButton_3setText(Freeze)
else
selfauxi_tigger = True
selfuipushButton_3setText(Enabled)
Plot coeficients filter
def pushButton_5_Clicked(self)
try
ParseparseQStringToList(selfuilineEdit_5text())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
66
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=r)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response units=dBunitPrefix=None)
h = ParseparseQStringToList(selfuilineEdit_5text())
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh5)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEdit_5setText(Sintaxis should be [b1b2 bk])
Plot specifications filter
def pushButton_4_Clicked(self)
cutoff = None
width = None
astop = None
try
cutoff = ParseparseQStringToFloat(selfuilineEdittext())
if(cutofflt0 or cutoffgt500000)
selfuilineEditsetText(Out of range)
except Exception as e1
selfuilineEditsetText(Sintax error)
try
width = ParseparseQStringToFloat(selfuilineEdit_2text())
if(widthlt0 or (cutoff+width)gt500000)
selfuilineEdit_2setText(Out of range)
except Exception as e2
selfuilineEdit_2setText(Sintax error)
try
astop = ParseparseQStringToFloat(selfuilineEdit_3text())
if(astoplt0 or astopgt1000)
selfuilineEdit_3setText(Out of range)
except Exception as e3
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
67
selfuilineEdit_3setText(Sintax error)
if(not(cutofflt0 or cutoffgt500000) and not(widthlt0 or
(cutoff+width)gt500000) and not(astoplt0 or astopgt1000))
try
selfwin3 = pgGraphicsWindow()
selfwin3resize(1000600)
selfwin3setWindowTitle(Filter frequency response window)
pgsetConfigOptions(antialias=True)
selfp_plot = selfwin3addPlot(title=Filter frequency response)
selfcurve_plot = selfp_plotplot(pen=b)
selfp_plotsetLabel(bottom Frequency
units=HzunitPrefix=None)
selfp_plotsetLabel(left Response
units=dBunitPrefix=None)
h = FilterDesignerdesign(selfMY_RATEwidthastopcutoff)
xfyf =
selfmy_plottercalcularFFTCoeficientes(selfMY_SIZEselfMY_RATEh4)
hn = selfmy_plotterv_to_dB(yf)
selfcurve_plotsetData(x=xfy=hnpen=b)
selfp_plotenableAutoRange(xy True)
selfwin3show()
except Exception as e
selfuilineEditsetText(Sintax error)
selfuilineEdit_2setText(Sintax error)
selfuilineEdit_3setText(Sintax error)
Boton rojo (windowClosing)
def closeEvent(selfevent)
result = QtGuiQMessageBoxquestion(self
Confirm Exit
Are you sure you want to exit
QtGuiQMessageBoxYes| QtGuiQMessageBoxNo)
eventignore()
if result == QtGuiQMessageBoxYes
eventaccept()
selfmy_samplerclose_scope()
sysexit()
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
68
if __name__ == __main__
app = QtGuiQApplication(sysargv)
windows = Main()
windowsshow()
sysexit(appexec_())
windows
from PyQt4 import QtCore QtGui
try
_fromUtf8 = QtCoreQStringfromUtf8
except AttributeError
def _fromUtf8(s)
return s
try
_encoding = QtGuiQApplicationUnicodeUTF8
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig _encoding)
except AttributeError
def _translate(context text disambig)
return QtGuiQApplicationtranslate(context text disambig)
class VentanaFiltro(object)
def setupUi(self MainWindow)
MainWindowsetObjectName(_fromUtf8(MainWindow))
MainWindowresize(1011 660)
selfcentralwidget = QtGuiQWidget(MainWindow)
selfcentralwidgetsetObjectName(_fromUtf8(centralwidget))
selfgroupBox = QtGuiQGroupBox(selfcentralwidget)
selfgroupBoxsetGeometry(QtCoreQRect(10 10 491 211))
selfgroupBoxsetTitle(_fromUtf8())
selfgroupBoxsetObjectName(_fromUtf8(groupBox))
selflabel = QtGuiQLabel(selfgroupBox)
selflabelsetGeometry(QtCoreQRect(200 20 131 16))
selflabelsetObjectName(_fromUtf8(label))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
69
selfcheckBox = QtGuiQCheckBox(selfgroupBox)
selfcheckBoxsetGeometry(QtCoreQRect(40 110 281 17))
selfcheckBoxsetObjectName(_fromUtf8(checkBox))
selfcheckBox_2 = QtGuiQCheckBox(selfgroupBox)
selfcheckBox_2setGeometry(QtCoreQRect(40 150 281 17))
selfcheckBox_2setObjectName(_fromUtf8(checkBox_2))
selfradioButton = QtGuiQRadioButton(selfgroupBox)
selfradioButtonsetGeometry(QtCoreQRect(180 20 82 17))
selfradioButtonsetText(_fromUtf8())
selfradioButtonsetChecked(True)
selfradioButtonsetAutoRepeat(False)
selfradioButtonsetObjectName(_fromUtf8(radioButton))
selfpushButton = QtGuiQPushButton(selfgroupBox)
selfpushButtonsetGeometry(QtCoreQRect(310 50 111 31))
selfpushButtonsetObjectName(_fromUtf8(pushButton))
selflineEdit_5 = QtGuiQLineEdit(selfgroupBox)
selflineEdit_5setGeometry(QtCoreQRect(20 50 281 31))
selflineEdit_5setObjectName(_fromUtf8(lineEdit_5))
selfgroupBox_4 = QtGuiQGroupBox(selfgroupBox)
selfgroupBox_4setGeometry(QtCoreQRect(240 110 251 101))
selfgroupBox_4setTitle(_fromUtf8())
selfgroupBox_4setObjectName(_fromUtf8(groupBox_4))
selflabel_8 = QtGuiQLabel(selfgroupBox_4)
selflabel_8setGeometry(QtCoreQRect(100 10 49 17))
selflabel_8setFrameShadow(QtGuiQFramePlain)
selflabel_8setObjectName(_fromUtf8(label_8))
selfdoubleSpinBox = QtGuiQDoubleSpinBox(selfgroupBox_4)
selfdoubleSpinBoxsetGeometry(QtCoreQRect(30 40 62 22))
selfdoubleSpinBoxsetObjectName(_fromUtf8(doubleSpinBox))
selfpushButton_3 = QtGuiQPushButton(selfgroupBox_4)
selfpushButton_3setGeometry(QtCoreQRect(140 40 91 21))
selfpushButton_3setObjectName(_fromUtf8(pushButton_3))
selflabel_9 = QtGuiQLabel(selfgroupBox_4)
selflabel_9setGeometry(QtCoreQRect(120 70 121 20))
selflabel_9setObjectName(_fromUtf8(label_9))
selfpushButton_5 = QtGuiQPushButton(selfgroupBox)
selfpushButton_5setGeometry(QtCoreQRect(430 50 51 31))
selfpushButton_5setObjectName(_fromUtf8(pushButton_5))
selfgroupBox_2 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_2setEnabled(True)
selfgroupBox_2setGeometry(QtCoreQRect(500 10 491 211))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
70
selfgroupBox_2setTitle(_fromUtf8())
selfgroupBox_2setObjectName(_fromUtf8(groupBox_2))
selflabel_2 = QtGuiQLabel(selfgroupBox_2)
selflabel_2setGeometry(QtCoreQRect(200 20 131 16))
selflabel_2setObjectName(_fromUtf8(label_2))
selflabel_3 = QtGuiQLabel(selfgroupBox_2)
selflabel_3setGeometry(QtCoreQRect(110 50 91 16))
selflabel_3setObjectName(_fromUtf8(label_3))
selflabel_4 = QtGuiQLabel(selfgroupBox_2)
selflabel_4setGeometry(QtCoreQRect(110 90 91 16))
selflabel_4setObjectName(_fromUtf8(label_4))
selflabel_5 = QtGuiQLabel(selfgroupBox_2)
selflabel_5setGeometry(QtCoreQRect(110 130 91 16))
selflabel_5setObjectName(_fromUtf8(label_5))
selflineEdit = QtGuiQLineEdit(selfgroupBox_2)
selflineEditsetEnabled(False)
selflineEditsetGeometry(QtCoreQRect(205 50 216 20))
selflineEditsetObjectName(_fromUtf8(lineEdit))
selflineEdit_2 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_2setEnabled(False)
selflineEdit_2setGeometry(QtCoreQRect(205 90 216 20))
selflineEdit_2setObjectName(_fromUtf8(lineEdit_2))
selflineEdit_3 = QtGuiQLineEdit(selfgroupBox_2)
selflineEdit_3setEnabled(False)
selflineEdit_3setGeometry(QtCoreQRect(205 130 216 20))
selflineEdit_3setObjectName(_fromUtf8(lineEdit_3))
selfbtnSpecifications = QtGuiQRadioButton(selfgroupBox_2)
selfbtnSpecificationssetGeometry(QtCoreQRect(180 20 82 17))
selfbtnSpecificationssetText(_fromUtf8())
selfbtnSpecificationssetObjectName(_fromUtf8(btnSpecifications))
selfpushButton_2 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_2setEnabled(False)
selfpushButton_2setGeometry(QtCoreQRect(180 160 131 31))
selfpushButton_2setObjectName(_fromUtf8(pushButton_2))
selfpushButton_4 = QtGuiQPushButton(selfgroupBox_2)
selfpushButton_4setEnabled(False)
selfpushButton_4setGeometry(QtCoreQRect(320 160 51 31))
selfpushButton_4setObjectName(_fromUtf8(pushButton_4))
selfgroupBox_3 = QtGuiQGroupBox(selfcentralwidget)
selfgroupBox_3setGeometry(QtCoreQRect(10 220 981 411))
selfgroupBox_3setTitle(_fromUtf8())
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
71
selfgroupBox_3setObjectName(_fromUtf8(groupBox_3))
selflabel_7 = QtGuiQLabel(selfgroupBox_3)
selflabel_7setGeometry(QtCoreQRect(430 0 131 31))
selflabel_7setObjectName(_fromUtf8(label_7))
selfcheckBox_3 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_3setGeometry(QtCoreQRect(390 380 181 17))
selfcheckBox_3setObjectName(_fromUtf8(checkBox_3))
selfcheckBox_4 = QtGuiQCheckBox(selfgroupBox_3)
selfcheckBox_4setGeometry(QtCoreQRect(550 380 281 17))
selfcheckBox_4setObjectName(_fromUtf8(checkBox_4))
selfgraphicsView = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsViewsetGeometry(QtCoreQRect(20 30 941 171))
selfgraphicsViewsetObjectName(_fromUtf8(graphicsView))
selfgraphicsView_2 = QtGuiQGraphicsView(selfgroupBox_3)
selfgraphicsView_2setGeometry(QtCoreQRect(20 200 941 171))
selfgraphicsView_2setObjectName(_fromUtf8(graphicsView_2))
MainWindowsetCentralWidget(selfcentralwidget)
selfmenubar = QtGuiQMenuBar(MainWindow)
selfmenubarsetGeometry(QtCoreQRect(0 0 1011 21))
selfmenubarsetObjectName(_fromUtf8(menubar))
MainWindowsetMenuBar(selfmenubar)
selfretranslateUi(MainWindow)
QtCoreQMetaObjectconnectSlotsByName(MainWindow)
def retranslateUi(self MainWindow)
MainWindowsetWindowTitle(_translate(MainWindow MainWindow None))
selflabelsetText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtImpulse
responseltspangtltpgtltbodygtlthtmlgt None))
selfcheckBoxsetText(_translate(MainWindow Show original None))
selfcheckBox_2setText(_translate(MainWindow Show filtered None))
selfpushButtonsetText(_translate(MainWindow Filter None))
selflabel_8setText(_translate(MainWindow
lthtmlgtltheadgtltbodygtltpgtltspan style= font-size10pt font-
weight600gtTriggerltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_3setText(_translate(MainWindow Freeze None))
selflabel_9setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size9pt colorf80d04gtHa salido del
bloqueoltspangtltpgtltbodygtlthtmlgt None))
selfpushButton_5setText(_translate(MainWindow Plot None))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
72
selflabel_2setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size10pt font-weight600gtFilter
Specificationsltspangtltpgtltbodygtlthtmlgt None))
selflabel_3setText(_translate(MainWindow Cutoff f(Hz) None))
selflabel_4setText(_translate(MainWindow W trans(Hz) None))
selflabel_5setText(_translate(MainWindow A stop(dB) None))
selfpushButton_2setText(_translate(MainWindow Filter None))
selfpushButton_4setText(_translate(MainWindow Plot None))
selflabel_7setText(_translate(MainWindow lthtmlgtltheadgtltbodygtltp
align=centergtltspan style= font-size12pt font-weight600gtSignal
Plotltspangtltpgtltbodygtlthtmlgt None))
selfcheckBox_3setText(_translate(MainWindow Show time None))
selfcheckBox_4setText(_translate(MainWindow Show frequency None))
parse
class Parse(object)
staticmethod
def parseQStringToList(qstring)
qstring = str(qstring)
qstring = qstring[1-1]
qstring = qstringsplit()
qstring = list(qstring)
qstring = map(floatqstring)
return qstring
staticmethod
def parseQStringToFloat(qstring)
qstring = str(qstring)
qstring = float(qstring)
return qstring
plotter
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
73
import numpy as np
from filtro import Filtro
import pyqtgraph as pg
import math
class Plotter(object)
def __init__(self)
selffirst = True
selflastTriggerValue = 0
Refrescar grafica
def
update(selfcurvespsMY_RATEMY_SIZEfiltrarcoeficientesauxi_oriauxi_filtered
auxi_tiggertrigger_valuelabeltipo_filtrado)
p6 = ps[0]
data = selfsamplergetLastSample()
labelsetObjectName(label_t)
if(selffirst)
selffirst = False
selflastTriggerValue = trigger_value
if(selflastTriggerValue=trigger_value)
selfsamplersetTiggerValue(trigger_value)
selflastTriggerValue = trigger_value
if(selflastTriggerValuegtmax(data))
labelsetText(Armed)
labelsetStyleSheet(QLabellabel_t color red)
elif(auxi_tigger)
labelsetText(Not triggered)
labelsetStyleSheet(QLabellabel_t color black)
else
labelsetText(Triggered)
labelsetStyleSheet(QLabellabel_t color black)
curve = curves[0]
xData = nparange(MY_SIZE)float(MY_RATE)
if(auxi_ori)
if(auxi_tigger)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
74
curvesetData(x=xDatay=None pen=g)
p6enableAutoRange(xy False)
else
curvesetData(x=xDatay=data pen=g)
p6enableAutoRange(xy True)
else
curvesetData(x=xDatay=data pen=pgmkPen(width=0001 color=g))
p6enableAutoRange(xy True)
curve2 = curves[1]
p7 = ps[1]
xfyf = selfcalcularFFT(MY_SIZEMY_RATEnpasarray(data))
if(auxi_ori)
if(auxi_tigger)
curve2setData(x=xfy=None pen=g)
p7enableAutoRange(xy False)
else
curve2setData(x=xfy=yf pen=g)
p7enableAutoRange(xy True)
else
curve2setData(x=xfy=yf pen=pgmkPen(width=0001 color=g))
p7enableAutoRange(xy True)
if(filtrar)
filtered = Filtrofiltrar(coeficientesdatatipo_filtrado)
curve3 = curves[2]
if(auxi_filtered)
if(auxi_tigger)
curve3setData(x=xDatay=Nonepen=r)
else
curve3setData(x=xDatay=filteredpen=r)
else
curve3setData(x=xDatay=filteredpen=pgmkPen(width=0001
color=r))
filtered_freq = selfcalcularFFT(MY_SIZEMY_RATEfiltered)
curve4 = curves[3]
if(auxi_filtered)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
75
if(auxi_tigger)
curve4setData(x=xfy=Nonepen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=r)
else
curve4setData(x=xfy=filtered_freq[1]pen=pgmkPen(width=0001
color=r))
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Puntero hacia sampler
def setSampler(selfsampler)
selfsampler = sampler
FFT
def calcularFFT(selfMY_SIZEMY_RATEy)
T = 1float(MY_RATE)
yf = npfftfft(yMY_SIZE)
yf = 10(MY_SIZE)npabs(yf[MY_SIZE2])
xf = nplinspace(00 10(20T) MY_SIZE2) Llega hasta fs2 -gt mas
seria aliasing
return xfyf
def calcularFFTCoeficientes(selfMY_SIZEMY_RATEhnum)
T = 1float(MY_RATE)
yf = npfftfft(hMY_SIZE)
yf = npabs(yf[MY_SIZE2])
primero = yf[0]
if (num==4)
for n in range(len(yf))
yf[n] = yf[n]primero
xf = nplinspace(00 10(20T) MY_SIZE2)
return xfyf
def v_to_dB(selfyf)
hn = []
for n in range(len(yf))
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
76
hnappend(20(mathlog10(yf[n])))
hn = npasarray(hn)
return hn
sampler
from bitlib import
from PyQt4 import QtCore
import numpy as np
class Sampler(object)
def __init__(selfMY_SIZE)
selffirst = True
selfch1_data = npzeros(MY_SIZE)
selfMY_RATE = 1000000
selfMY_SIZE = MY_SIZE
selfTRIGGER_VALUE = 0
Abrir bitscope
def open_scope(self)
print Attempting to open the BitScope
if BL_Open( 1)
print Bitscope is opened
MY_DEVICE = 0 one open device only
MY_CHANNEL = 0 channel to capture and display
MY_PROBE_FILE = default probe file if unspecified
MY_MODE = BL_MODE_FAST preferred trace mode
TRUE = 1
MODES = (FASTDUALMIXEDLOGICSTREAM)
SOURCES = (PODBNCX10X20X50ALTGND)
print Library s (s) (
BL_Version(BL_VERSION_LIBRARY)
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
77
BL_Version(BL_VERSION_BINDING))
BL_Select(BL_SELECT_DEVICEMY_DEVICE)
print Link s BL_Name(0)
print BitScope s (s) (BL_Version(BL_VERSION_DEVICE)BL_ID())
print Channels d (d analog + d logic) (
BL_Count(BL_COUNT_ANALOG)+BL_Count(BL_COUNT_LOGIC)
BL_Count(BL_COUNT_ANALOG)BL_Count(BL_COUNT_LOGIC))
print Modes + join([s (
( + MODES[i]) if i == BL_Mode(i) else ) for i in
range(len(MODES))])
BL_Mode(BL_MODE_LOGIC) == BL_MODE_LOGIC or BL_Mode(BL_MODE_FAST)
BL_Range(BL_Count(BL_COUNT_RANGE))
if BL_Offset(-1000) = BL_Offset(1000)
print Offset +4gV to +4gV ( BL_Offset(1000)
BL_Offset(-1000))
for i in range(len(SOURCES))
if i == BL_Select(2i)
print s SOURCES[i] + join([52fV
BL_Range(n) for n in range(BL_Count(3)-1-1-1)])
BL_Mode(MY_MODE) prefered trace mode
BL_Intro(BL_ZERO) optional default BL_ZERO
BL_Delay(BL_ZERO) optional default BL_ZERO
BL_Rate(selfMY_RATE) optional default BL_MAX_RATE
BL_Size(selfMY_SIZE) optional default BL_MAX_SIZE
BL_Select(BL_SELECT_CHANNELMY_CHANNEL) choose the channel
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE) optional when
untriggered
BL_Select(BL_SELECT_SOURCEBL_SOURCE_POD) use the POD input
BL_Range(BL_Count(BL_COUNT_RANGE)) maximum range
BL_Offset(BL_ZERO) optional default 0
BL_Enable(TRUE) at least one channel must be initialised
BL_Trace()
print Complete trace and acquisition complete Dump the logn
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
78
return
Cerrar bitscope
def close_scope(self)
BL_Close()
print Bitscope is closed
return
Coger muestras
def scope_acquire(self)
BL_Trigger(selfTRIGGER_VALUEBL_TRIG_RISE)
BL_Trace(001 False)
selfch1_data = BL_Acquire()
Coger array de las ultimas muestras guardadas
def getLastSample(self)
return npasarray(selfch1_data)
Puntero a UI
def setUI(selfUIpointer)
selfUIpointer = UIpointer
Inicializar timer en hilo secundario -gt coger muestras
def startAcquire(self)
selftimer = QtCoreQTimer()
selftimertimeoutconnect(lambda selfscope_acquire())
selftimerstart(50)
Cambiar numero de puntos
def setSize(selfSIZE)
selfMY_SIZE = SIZE
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TEacuteCNICA SUPERIOR DE INGENIERIacuteA (ICAI) GRADO EN INGENIERIacuteA TELEMAacuteTICA
ANEXO A COacuteDIGO FUENTE
79
Cambiar frecuencia de muestreo
def setRate(selfrate)
selfMY_RATE = rate
Devuelve la frecuencia de muestreo
def getRate(self)
return selfMY_RATE
Cambiar nivel del trigger
def setTiggerValue(self triggerValue)
selfTRIGGER_VALUE = float(triggerValue)
Devuelve el nivel del trigger
def getTiggerValue(self)
return selfTRIGGER_VALUE