IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

97
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) GRADO EN INGENIERÍA TELEMÁTICA IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL CON BITSCOPE Autor: Javier de la Paz Garcillán Directores: Javier Matanza Domingo, Gregorio López López Madrid Julio 2017

Transcript of IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

Page 1: 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

Page 2: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 3: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 4: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 5: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 6: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 7: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 8: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 9: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 10: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 11: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 12: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 13: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 14: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 15: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 16: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …

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

Page 17: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 18: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 19: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 20: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 21: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 22: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 23: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 24: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 25: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 26: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 27: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 28: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 29: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 30: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 31: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 32: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 33: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 34: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 35: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 36: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 37: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 38: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 39: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 40: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 41: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 42: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 43: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 44: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 45: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 46: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 47: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 48: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 49: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 50: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 51: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 52: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 53: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 54: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 55: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 56: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 57: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 58: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 59: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 60: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 61: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 62: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 63: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 64: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 65: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 66: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 67: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 68: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 69: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 70: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 71: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 72: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 73: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 74: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 75: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 76: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 77: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 78: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 79: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 80: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 81: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 82: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 83: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 84: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 85: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 86: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 87: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 88: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 89: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 90: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 91: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …
Page 92: IMPLEMENTACIÓN DE UN PROCESADOR DIGITAL DE SEÑAL …