metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos ›...

184
Metodología de medida de gasto energético para códecs de VoIP en dispositivos móviles Autor: Pablo Isidoro Carrillo Alvarez Tutor: Antonio Estepa Alonso DEPARTAMENTO DE INGENIERÍA TELEMÁTICA Proyecto Fin de Carrera 10 de septiembre de 2013

Upload: others

Post on 30-May-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Metodología de medida de gasto energético para

códecs de VoIP en dispositivos móviles

Autor: Pablo Isidoro Carrillo AlvarezTutor: Antonio Estepa Alonso

DEPARTAMENTO DE INGENIERÍA TELEMÁTICAProyecto Fin de Carrera

10 de septiembre de 2013

Page 2: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Resumen

Este proyecto tiene por objetivo ver el impacto en el consumo energético delos códecs de VoIP más utilizados: G.711, G.723, G.729, iLBC y AMR, así co-mo hallar una metodología de medida de fácil implementación para el consumoenergético. El estudio se centra en el consumo originado por la CPU debido alas tareas de codificación y descodificación.

Los resultados del estudio muestran que la elección del códec es muy im-portante desde el punto de vista energético y del rendimiento. Algunos códecsrequieren una cantidad de tiempo de proceso mucho mayor que otros, e inclusoalguno de estos códecs no es posible usarlos en determinados dispositivos porfalta de potencia de proceso, por otra parte y cómo se muestra en el estudio elgasto energético está directamente y de forma lineal relacionado con el tiempode proceso.

Palabras clave : VoIP, códec, móvil, energía

Page 3: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Índice general

1. Introducción 11.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2. Aspectos teóricos de la codificación vocal 42.1. Muestreo y cuantificación digitales . . . . . . . . . . . . . . . . . 5

2.1.1. Muestreo digital . . . . . . . . . . . . . . . . . . . . . . . 52.1.2. Cuantificación digital . . . . . . . . . . . . . . . . . . . . 6

2.2. Codificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3. Métodos de optimización en códecs . . . . . . . . . . . . . . . . . 72.4. Códecs VoIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4.1. AMR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4.2. iLBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4.3. G.711 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4.4. G.723.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4.5. G.729 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4.6. Resumen de características de los códecs . . . . . . . . . . 10

3. Consumo energético en códecs, test y medida 123.1. Qué medir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2. Plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.2.1. Sistema Operativo iOS . . . . . . . . . . . . . . . . . . . . 133.3. Cómo medir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.1. Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . 153.3.2. Código fuente de los códecs . . . . . . . . . . . . . . . . . 163.3.3. Arquitectura de las aplicaciones de medida desarrolladas . 17

3.3.3.1. Medidas de rendimiento: . . . . . . . . . . . . . 173.3.3.2. Medidas de energía. . . . . . . . . . . . . . . . . 18

3.3.4. Proceso de toma de medida . . . . . . . . . . . . . . . . . 193.3.4.1. Medidas de rendimiento . . . . . . . . . . . . . . 193.3.4.2. Medidas de gasto energético . . . . . . . . . . . 23

4. Resultados 284.1. Rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.2. Gasto energético . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

i

Page 4: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

5. Discusión 415.1. Rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.2. Gasto energético . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6. Conclusiones y direcciones de avance 456.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.2. Direcciones de avance . . . . . . . . . . . . . . . . . . . . . . . . 45

Bibliografía 46

A. Instrucciones de instalación 49A.1. Pasos de instalación . . . . . . . . . . . . . . . . . . . . . . . . . 49

B. Código para la medida de rendimiento - función getrusage 52B.1. getrusage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52B.2. Código consumo . . . . . . . . . . . . . . . . . . . . . . . . . . . 53B.3. Código modificado de los códecs . . . . . . . . . . . . . . . . . . 55

B.3.1. Clase Codec . . . . . . . . . . . . . . . . . . . . . . . . . . 55B.3.2. Códec AMR . . . . . . . . . . . . . . . . . . . . . . . . . . 57B.3.3. Códec iLBC . . . . . . . . . . . . . . . . . . . . . . . . . . 78B.3.4. Códec G.723.1 . . . . . . . . . . . . . . . . . . . . . . . . 95B.3.5. Códec G.729 . . . . . . . . . . . . . . . . . . . . . . . . . 106

B.3.5.1. Versión normal . . . . . . . . . . . . . . . . . . . 106B.3.5.2. Versión simplificada . . . . . . . . . . . . . . . . 116

C. Código para la medida de gasto energético 126C.1. Registro de la capacidad de batería . . . . . . . . . . . . . . . . . 126C.2. Código modificado de los códecs . . . . . . . . . . . . . . . . . . 127

C.2.1. Códec AMR . . . . . . . . . . . . . . . . . . . . . . . . . . 127C.2.2. Códec iLBC . . . . . . . . . . . . . . . . . . . . . . . . . . 143C.2.3. Códec G.723.1 . . . . . . . . . . . . . . . . . . . . . . . . 156C.2.4. Códec G.729 . . . . . . . . . . . . . . . . . . . . . . . . . 163

C.2.4.1. Versión normal . . . . . . . . . . . . . . . . . . . 163C.2.4.2. Versión simplificada . . . . . . . . . . . . . . . . 171

ii

Page 5: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Índice de figuras

1.1.1.Previsión de ventas de dispositivos móviles y PCs según IDC . . 2

2.0.1.Esquema de una comunicación de VoIP . . . . . . . . . . . . . . 52.1.1.Muestreo de una señal . . . . . . . . . . . . . . . . . . . . . . . . 62.1.2.Cuantificación y ruido de cuantificación . . . . . . . . . . . . . . 6

3.2.1.Capas de iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3.1.Elección de conversaciones . . . . . . . . . . . . . . . . . . . . . . 193.3.2.Elección de códecs . . . . . . . . . . . . . . . . . . . . . . . . . . 203.3.3.Número de repeticiones . . . . . . . . . . . . . . . . . . . . . . . 213.3.4.Vista de ejecución - Ejecución . . . . . . . . . . . . . . . . . . . . 213.3.5.Vista de ejecución - Resultados mostrados . . . . . . . . . . . . 223.3.6.Vista de ejecución - Envío . . . . . . . . . . . . . . . . . . . . . . 223.3.7.Vista de ejecución - Enviado . . . . . . . . . . . . . . . . . . . . 233.3.8.Elección de códecs . . . . . . . . . . . . . . . . . . . . . . . . . . 243.3.9.Elección de iteraciones . . . . . . . . . . . . . . . . . . . . . . . . 243.3.10.Vista de ejecución - Log . . . . . . . . . . . . . . . . . . . . . . . 253.3.11.Vista de ejecución - Codificación / Descodificación . . . . . . . . 263.3.12.Vista de ejecución - Envío . . . . . . . . . . . . . . . . . . . . . . 26

4.1.1.Gráfico de rendimiento . . . . . . . . . . . . . . . . . . . . . . . . 324.2.1.Descarga en Reposo . . . . . . . . . . . . . . . . . . . . . . . . . 344.2.2.Tiempo de descarga en codificación . . . . . . . . . . . . . . . . . 374.2.3.Tiempo de descarga en descodificación . . . . . . . . . . . . . . . 40

A.1.1.Captura de XCode . . . . . . . . . . . . . . . . . . . . . . . . . . 50

iii

Page 6: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Índice de cuadros

2.4.1.Principales características de los códecs de VoIP. . . . . . . . . . 11

3.3.1.Código fuente de los códecs utilizados . . . . . . . . . . . . . . . 16

4.1.1.Rendimiento en codificación . . . . . . . . . . . . . . . . . . . . . 294.1.2.Rendimiento en descodificación . . . . . . . . . . . . . . . . . . . 304.1.3.Rendimiento de los códecs . . . . . . . . . . . . . . . . . . . . . . 314.2.1.Tabla de tiempos de la descarga en reposo . . . . . . . . . . . . . 334.2.2.Datos estadísticos de descarga en reposo . . . . . . . . . . . . . . 344.2.3.Descarga durante la codificación . . . . . . . . . . . . . . . . . . 354.2.4.Descarga durante la codificación . . . . . . . . . . . . . . . . . . 364.2.5.Descarga durante la descodificación . . . . . . . . . . . . . . . . . 384.2.6.Descarga durante la descodificación . . . . . . . . . . . . . . . . . 39

5.2.1.Autonomía del dispositivo móvil . . . . . . . . . . . . . . . . . . 43

A.1.1.Programas de medida de rendimiento . . . . . . . . . . . . . . . . 49A.1.2.Programas de medida de gasto energético . . . . . . . . . . . . . 50

iv

Page 7: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Capítulo 1

Introducción

1.1. MotivaciónEn la actualidad, los dispositivos móviles ofrecen cada vez más posibilidades

con procesadores más potentes y mayor capacidad de comunicación inalámbri-ca. Estudios de mercado de IDC[1], reflejado en la figura 1.1.1, señalan que lasventas de estos dispositivos es varias veces mayor que las de ordenadores per-sonales y que seguirán creciendo, así mismo hablan de estos dispositivos comopost-PC. Los dispositivos post-PC tienen por norma general pantallas táctilesy sistemas operativos orientados a la movilidad, usando procesadores de muybajo consumo, principalmente con arquitectura ARM.

Debido a la potencia y flexibilidad de esta nueva generación de dispositivosmóviles, ha surgido un amplio abanico de aplicaciones de VoIP disponibles paralos usuarios con aplicaciones como Skype, Viber, Line o Hangouts; de formaque tienen un alto crecimiento en el número de usuarios[2, 3]. Sin embargo, alser todos estos dispositivos móviles, se debe tener en cuenta el gasto energéticoe intentar minimizarlo para que el usuario pueda usar el dispositivo durantemás tiempo. Por estos motivos, un estudio de cual es la mejor elección, desde elpunto de vista energético, para codificar una conversación en una aplicación deVoIP en movilidad es muy interesante.

Dado que hay estudios anteriores donde podemos ver el impacto que tienenlos distintos componentes en el consumo, en los que se aprecia que una parteimportante es destinada a la interfaz WiFi[4] y a continuación otros en los quese pone de manifiesto como el uso de diferentes técnicas de ahorro energéticopuede reducir hasta en un 80 % el consumo de la misma[5, 6], podemos ver co-mo el estudio de uso de la CPU se torna en un parámetro muy relevante en laelección del códec. Por otra parte, el estudio aislado de la CPU nos permitirá co-nocer cual es el mejor códec tanto en rendimiento como en el aspecto energéticoindependientemente de la interfaz inalámbrica usada.

1

Page 8: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 1.1.1: Previsión de ventas de dispositivos móviles y PCs según IDC

1.2. ObjetivosEl objetivo del trabajo propuesto es plantear una metodología de medida,

simple y de fácil aplicación, de la energía empleada por la CPU en las tareas decodificación y descodificación que pueda usarse en un amplio rango de dispo-sitivos móviles, así como obtener una clasificación cualitativa de cuales son losmejores códecs para su uso en dispositivos móviles centrada en el consumo delprocesador.

El estudio persigue una clasificación cualitativa porque, dado el rápido avan-ce en el desarrollo de los procesadores para dispositivos móviles, códecs que hoyno se podrían usar para aplicaciones de VoIP será posible usarlos en un futu-ro, además la medida cuantitativa puede verse afectada en nuevos dispositivos,configuraciones o versiones, perdiendo relevancia con el tiempo.

La presente memoria está organizada de la siguiente forma: El capítulo 2sienta las bases teóricas de necesarias para la codificación, las técnicas de op-timización usadas por los códecs y una descripción de los mismos. El capítulo3 describe qué parámetros debemos medir, la plataforma utilizada y como sellevan a cabo las medidas. En el capítulo 4 se muestra un resumen de los re-sultados obtenidos. En el capítulo 5 se analizan los resultados obtenidos y porúltimo en el capítulo 6 se muestran las conclusiones del estudio y las futuraslineas de investigación.

2

Page 9: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

1.3. AntecedentesEste trabajo avanza en los temas propuestos por un estudio similar que

se llevo a cabo sobre un portátil y con un sistema operativo de escritoriotradicional[7].

En el estudio de la CPU la metodología seguida consiste en modificar elcódigo fuente de los códecs para recoger el tiempo de CPU empleado en codificary descodificar cada muestra de sonido de un archivo. A continuación se halla larelación entre tiempo y energía consumida a través de una curva de descargade la batería. Con los datos anteriores se deducen los patrones de consumo decada códec.

El artículo anterior cubre otros ámbitos como el consumo WiFi y la cali-dad de sonido que proporcionan los códecs. En este estudio sin embargo noscentraremos sólo en la CPU ya que estos datos son fácilmente trasladados aplataformas móviles desde el estudio anterior.

3

Page 10: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Capítulo 2

Aspectos teóricos de lacodificación vocal

La palabra “códec” proviene del juego de palabras “codificación-descodificación”(COde-DECode en inglés ). Un códec es un método capaz de comprimir y/o des-comprimir una señal digital a través de un software o de un circuito impreso.

En una comunicación de VoIP tenemos varios componentes involucrados enel flujo de la comunicación en cada extremo, repitiéndose el mismo esquemaen cada sentido. La tarjeta de sonido del dispositivo genera periódicamentemuestras digitales (PCM 16 bits) del sonido percibido por el micrófono, queincluye ruido de fondo. Estas muestras son procesadas por el códec, componenteclave del proceso de aplicación. El códec, en su modo de operación básico, operasobre un grupo de muestras generando un bloque de datos llamado trama aintervalos periódicos. Tanto el tamaño de la trama generada como el tiemponecesario para generar una nueva trama dependen del algoritmo de codificaciónparticular de cada códec. Las tramas generadas son posteriormente encapsuladaspara su envío hacia el otro extremo donde serán descodificadas. El proceso deencapsulado incluye el uso de los protocolos RTP, UDP e IP. Para mejorar laeficiencia es posible encapsular varias tramas en un mismo paquete IP, aunquela mayoría de aplicaciones suelen usar un intervalo de generación de paquetes de20 ms tal y como sugiere el perfil RTP de la mayoría de códecs [8]. Los paquetesIP son finalmente enviados a través de la interfaz de comunicación (WiFi ennuestro estudio) del dispositivo. En el otro extremo, los paquetes IP recibidospor la tarjeta de red se almacenan temporalmente en un buffer gestionado porla aplicación de VoIP, que permite compensar fluctuaciones de retardo (jitter)en la red. Una vez esperado un tiempo inicial para el llenado de este buffer,la aplicación de VoIP comienza a extraer tramas de forma periódica para sudescodificación. Después de la descodificación se obtienen de nuevo un conjuntode muestras PCM de 16 bits que reconstruyen la señal original con una ciertadistorsión. Este proceso se ilustra en la figura 2.0.1.

La existencia de varios códecs para este propósito proviene de la necesidadde cumplir con distintas especificaciones dependiendo de cuales sean los pará-metros determinantes en cada caso: calidad de la señal, tiempos de compresión

4

Page 11: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 2.0.1: Esquema de una comunicación de VoIP

y descompresión, complejidad algorítmica o el ancho de banda disponible.

Para el estudio en este proyecto se han tenido en cuenta exclusivamentelos códecs más utilizados en VoIP (G.711, G.723.1, G.729, AMR e iLBC). Acontinuación se describen los procesos necesarios para el uso de los códecs, elmuestreo y la codificación, seguidamente se comenta en qué consiste la codifi-cación y se detalla el funcionamiento de un esquema de compresión de silenciopara finalizar con una descripción de las características de los códecs usados enel estudio.

2.1. Muestreo y cuantificación digitalesEn los sistemas de comunicación digital es necesario que la señal de audio sea

digitalizada para que el códec pueda procesarla. La digitalización se componede dos pasos conceptuales el muestreo digital y la cuantificación digital.

2.1.1. Muestreo digitalConsiste en tomar muestras de la señal a una frecuencia constante como ilus-

tra la figura 2.1.1. La frecuencia de muestreo para digitalizar una señal analógicaestá determinada por el Teorema de Nyquist. Según este teorema para una re-construcción de la señal original sin distorsión, la tasa de muestreo debe serigual o superior al doble de la mayor frecuencia de la fuente analógica[9].

5

Page 12: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 2.1.1: Muestreo de una señal

Figura 2.1.2: Cuantificación y ruido de cuantificación

La voz humana tiene un frecuencia de entre 300 Hz y 3400 Hz, lo que haríaque la frecuencia mínima de muestreo fuera 6.8KHz, sin embargo es una prácticaadoptada suponer 4 kHz lo que hace que podemos conseguir una señal vocaldigitalizada de alta calidad si tomamos muestras a una frecuencia de 8 kHz, esdecir, una muestra cada 125ms.

2.1.2. Cuantificación digitalLa cuantización es el paso posterior al muestreo. Debido a que una represen-

tación exacta de los valores de las muestras en bits tendrían longitud infinita setiene la necesidad de aproximar los valores anteriores a un conjunto de valorespredefinidos según la cantidad de bits con la que se representa la muestra. A ladiferencia entre el valor real analógico y el valor cuantificado se le conoce comoruido o error de cuantificación, e interesa que este ruido sea lo más bajo posible.En la figura 2.1.2 se ilustra los conceptos anteriores.

Existen diferentes tipos de cuantificadores para según el tipo de aplicaciónminimizar el error de cuantificación, los principales son:

Cuantificador uniforme: el paso de cuantificación es constante. No hace su-posición alguna acerca de la señal a cuantificar. Por ello, es el tipo másfácil y económico de implementar.

Cuantificador no uniforme: en este caso el paso de cuantificación es variabley puede ser ajustado conforme a la amplitud de la señal con el objetivode disminuir el error.

6

Page 13: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Cuantificador logarítmico: la señal pasa por un compresor logarítmico an-tes de ser cuantificada uniformemente. La resolución del cuantificador esmayor en las partes de la señal en que presenta menor amplitud, esto setraduce en un incremento de la distancia entre los niveles de reconstrucciónconforme aumenta la amplitud de la señal. A la salida, la señal resultantedebe pasar por un expansor antes de ser reproducida.

Cuantificador vectorial: las muestras se cuantifican en bloques de N mues-tras. Es el que menor error de cuantificación presenta, en cambio es menosrobusto frente a errores de transmisión y el más complejo de implementar.

2.2. CodificaciónLa codificación es la aplicación de un algoritmo sobre los valores cuantifi-

cados, estos algoritmos producen representaciones binarias de la señal con dis-tintas cualidades. Es posible distinguir tres grandes grupos de codificadores devoz, dependiendo del método de codificación utilizado:

Codificadores de forma de onda: Usan una tasa de bits alta (32 o 64 kbps)y utilizan una aproximación no lineal de la forma de onda de la señal ori-ginal. Algunos algoritmos de codificación que pertenecen a este grupo sonPCM (Pulse Code Modulation) o ADPCM (Adaptive Differential PCM ).

Vocoders: Usan una tasa de bits baja pero a cambio no tienen una buenacalidad de la señal producida. En el transmisor se analiza la voz y seenvían parámetros que la definen para que sea sintetizada en el receptor.Un ejemplo lo tenemos en el algoritmo LPC (Linear Predictive Coder),utilizado frecuentemente para mitigar las pérdidas producidas entre latransmisión y la recepción de las muestras vocales.

Codificadores híbridos: Estos codificadores pretenden conseguir alta calidadde sonido a tasas de bits contenidas, para ello combina técnicas de las dosfamilias anteriores. En este grupo las muestras se agrupan en bloques quese procesan juntos. Además se lleva a cabo una representación paramétri-ca de la señal para que la señal sintetizada sea más parecida a la señaloriginal. Entre los representantes de esta familia de codificadores tene-mos, CELP (Code-Excited Linear Prediction), ACELP (Algebraic CELP)y CS-ACELP (Conjugated Structure ACELP).

2.3. Métodos de optimización en códecsPara mejorar la eficiencia energética y disminuir el ancho de banda necesa-

rio varios códecs permiten configuraciones en las que la transmisión de datosdurante los periodos de silencio se hace nula o muy baja.

Dos módulos se encargan de administrar esta funcionalidad:

El módulo de detección de actividad vocal, VAD (del inglés, Voice ActivityDetection), que se encarga de detectar la ausencia o presencia de actividadvocal en la señal de entrada.

7

Page 14: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

El módulo de transmisión discontinua, DTX (del inglés, DiscontinuousTransmission), que gestiona el envío o no de tramas en función de lainformación proporcionada por el VAD.

Un tercer módulo, el generador de ruido de confort (CNG, Comfort Noise Gene-rator) es necesario que opere en el otro extremo de la comunicación. Durante losperiodos de silencio generara un ruido artificial de fondo que evita que resultedesagradable la ausencia total de sonido en una conversación. Para generar elruido de fondo se usan los parámetros enviados a través de tramas SID (SilenceInsertion Descriptor) por el emisor.

2.4. Códecs VoIPDurante la evolución de la tecnología y respondiendo a distintas necesidades

organismos internacionales, como la ITU-T (Unión Internacional de Telecomu-nicaciones) [10], el 3GPP (3rd Generation Partnership Project)[11] y la IETF(Internet Engineering Task Force)[12], han propuesto diferentes técnicas de co-dificación. Los códecs más usados para VoIP son G.711, G.723.1, G.729, iLBC yAMR y a continuación se enumeran sus principales características y finalmentese expondrá un pequeño resumen.

2.4.1. AMRPublicado por el 3GPP [13]. El códec AMR (Adaptative Multi-Rate) es am-

pliamente usado en las comunicaciones móviles. Como indica su nombre es posi-ble configurarlo con diferentes tasas de transmisión, 4,70, 4,75, 5,15, 5,90, 7,40,7,95, 10,2 y 12,2 kbps, manteniendo siempre la duración de trama en 20 msdando por tanto bloques de 95, 103, 118, 134, 148, 159, 204 y 244 bits.

ARM utiliza un codificador de tipo híbrido ACELP, el retraso de empaque-tado es de 20 ms más 5 ms de retardo de anticipación para todos los modosexcepto para el de 12,2 kbps. La entrada del códec deben ser muestras PCM de16 bits tomadas a una frecuencia de 8 kHz.

Otra de las ventajas del códec AMR es que permite el uso de algoritmos deoptimización basados en VAD, DTX y CNG para reducir el ancho de banda.

2.4.2. iLBCPublicado en la RFC3951 por la IETF [14]. Basado en el algoritmo LPC

(Linear-Predective Coding), el iLBC (Internet Low Britrate Codec) puede tra-bajar a dos tasas diferentes, a 15,2 y 13,33 kbps, dando lugar a dos duracionesde trama 20 ms y 30 ms, respectivamente.

Entre sus ventajas se destaca una gran calidad comparable con la ofrecidapor el códec G.711 pero con un 25% del ancho de banda que usa éste, ade-más aunque no ofrece un mecanismo para evitar los efectos ocasionados porla pérdida de paquetes ( mecanismo de Packet Loss Concealment), es relativa-mente simple implementar uno interpolando las tramas anterior y siguiente ala perdida para generar un paquete sustituto, haciendo que sea un códec muyrobusto frente a pérdidas o retrasos. Por estas razones es uno de los códecs más

8

Page 15: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

usados en comunicaciones de tiempo real como la videoconferencia o la telefonía.

El retraso de anticipación varía según la duración de trama elegida, con 5ms de retardo en el caso de tramas de 20 ms y 10 ms de retardo en el caso detramas de 30 ms. Por otra parte la entrada del códec debe ser una señal PCMde 16 bits muestreada a 8 kHz.

2.4.3. G.711Publicado por la ITU-T [15], es el estándar usado en las redes de telefonía

conmutadas y también se usa en aplicaciones de VoIP.Se basa en una modulación por impulsos modificados (PCM, Pulse Code

Modulation) logarítmica de muestras de voz a una frecuencia de 8 kHz. Se usandos algoritmos de compresión:

Ley-A, utilizado en Europa.

Ley-m, utilizado en América del Norte y en Japón.

Los algoritmos de la Ley-m y de la Ley-A codifican las muestras de 14 y 13 bitsrespectivamente en otras de 8 bits. La tasa de bits del códec G.711 es de 64kbps. Ambos algoritmos están basados en una cuantización logarítmica, lo queimplica que la densidad de niveles de cuantización es mayor alrededor del nivelcero de amplitud. La principal diferencia entre ellos radica en que los bits del 2al 8 están invertidos de uno con respecto al otro. El bit 1, el que está más a laizquierda, es en ambos el que representa el signo, y es 1 para valores positivosy 0 para negativos.

Proporciona una gran calidad de audio a cambio de un mayor ancho debanda.

2.4.4. G.723.1Publicado por la ITU-T [16]. Es un códec muy usado en aplicaciones VoIP

debido al bajo ancho de banda necesario de 5,3 o 6,3 kbps, según la modali-dad utilizada y su calidad. Entre sus desventajas está el tener un retardo decodificación 37,5 ms.

El estándar define el uso de dos algoritmos distintos que dan lugar a tasasde transmisión diferentes:

6,3 kbps con tramas de 24 bytes utilizando el algoritmo MPC-MLQ.

5,3 kbps con tramas de 20 bytes utilizando el algoritmo de codificaciónACELP.

El Anexo A del estándar es una variante que utiliza la técnicas de optimizaciónusando VAD, DTX y CNG, el uso de estas técnicas permite reducir el ancho debanda utilizado.

2.4.5. G.729Publicado por la ITU-T [17]. Ofrece una alta calidad pero a costa de una

mayor complejidad en su algoritmo. Este códec hace uso de un algoritmo de com-presión mediante predicción lineal con excitación por código algebraico de es-tructura conjugada (CS-ACELP - Conjugate-Structure Algebraic-Code-Excited

9

Page 16: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Linear Prediction) a 8 kbps como esquema de codificación. Además posee unretardo de 15 ms.

Su uso en VoIP está muy extendido debido al reducido ancho de bandanecesario para su uso, de solo 8 kbps.

Al estar basado en un codificador CELP (Code-Exited Linear Prediction),cada segmento de 80 bits producido contiene los coeficientes de predicción lineal,los indices de excitación y los parámetros de ganancia que serán usados en eldescodificador para reproducir la señal de voz recibida. Las entradas y salidas deeste algoritmo son muestras PCM de 16 bits que se convertirán a/de muestrasde 8 bits.

Existen diferentes extensiones de la norma que hacen que varíen las caracte-rísticas de calidad y ancho de banda, a continuación vemos las principales, queserán utilizadas en el estudio:

G.729A: Esta variante tiene una menor complejidad, al simplificar diversasrutinas del algoritmo, como contrapartida tenemos un empeoramiento enla calidad de voz.

G.729B: Esta variante hace uso de las técnicas de optimización descritas ba-sadas en VAD, DTX y CNG, permitiendo disminuir el ancho de banda siafectar a la calidad del sonido.

G.729AB: Se trata del uso de las técnicas de optimización sobre la variantesimplificada G.729A.

2.4.6. Resumen de características de los códecsEn el cuadro 2.4.1 tenemos un resumen de las características de los códecs

presentes en el estudio. Además todas los códecs usados utilizan como entradamuestras PCM de 16 bits tomadas a 8 kHz.

10

Page 17: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Cód

ecTas

ade

mue

stre

o(k

Hz)

Tas

ade

bits

(Kbi

t/s)

Tam

año

detr

ama

(ms)

Bit

spor

tram

ade

voz

Bit

spor

tram

aSI

D

Alg

orit

mos

deco

difi-

caci

ónD

TX

MO

S

G.7

118

64-

640

-P

CM

No

4.39

G.7

23.1

86.

330

192

32M

P-M

LQY

es3.

695.

316

0A

CE

LP3.

49G

.729

88

1080

-C

S-A

CE

LPN

o3.

75G

.729

a8

810

80-

CS-

AC

ELP

No

3.67

G.7

29b

88

1080

10C

S-A

CE

LPYes

3.51

G.7

29ab

88

1080

10C

S-A

CE

LPYes

3.55

AM

R8

12.2

20

244

39M

R-A

CE

LPY

es

3.97

10.2

204

3.93

7.95

159

3.69

7.4

148

3.71

6.7

134

3.64

5.9

118

3.55

5.15

103

3.44

4.75

953.

39

iLB

C8

15.2

2030

3-

iLB

CN

o3.

8613

.330

399

-3.

82

Cua

dro

2.4.

1:P

rinc

ipal

esca

ract

erís

tica

sde

los

códe

csde

VoI

P.

11

Page 18: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Capítulo 3

Consumo energético encódecs, test y medida

El consumo energético debido a ejecutar aplicaciones de VoIP se debe princi-palmente a tres factores, la interfaz radio, el procesado de la señal y la memoriausada. En el caso de la memoria su gasto es similar entre códecs y además el usoes bastante bajo con las implementaciones estándar de los mismos. En cuanto ala interfaz radio podemos encontrarnos con dos situaciones, bien que se uso unmodo de gestión de energía inteligente, con lo cual, debido al ancho de bandadisponible en estas comunicaciones y las tasas binarias de los códecs tendremosque la interfaz estará la mayoría del tiempo en estado inactivo y por tanto apor-tando muy poco gasto energético, aunque en este caso el gasto si varía entrecódecs, o bien la interfaz no hace uso de la gestión de energía y gasta la mis-ma cantidad de energía por unidad de tiempo en todos los códecs. Por últimotenemos el gasto energético debido al procesado, en este caso el gasto variaráde un códec a otro dependiendo de su complejidad algorítmica y el tiempo quenecesite para procesar las tramas.

Por tanto, aunque el modo de operación de la interfaz radio es determinantepara el gasto energético, el gasto debido al uso del procesador también ha detenerse en cuenta pues puede provocar diferencias notables; sobre todo en elcaso de usarse una gestión inteligente de la energía ya que el gasto debido alprocesado afectará en mayor medida a la autonomía del terminal.

3.1. Qué medirEl presente estudio se centra en medir el uso del procesador y el gasto energé-

tico que provoca el uso de cada códec por unidad de tiempo, teniendo en cuentaque, en una situación de uso real, una aplicación de VoIP debe codificar audioen un sentido de la comunicación y descodificarlo en el otro al mismo tiempo.Por tanto será necesario que el terminal sea capaz de ejecutar las dos tareas ala vez y en tiempo real para no producir retrasos o cortes en la comunicación,sino fuese así el terminal no sería apto para usarse con ese códec.

También se quiere medir el impacto energético de los procesos de codificacióny descodificación para saber que códecs son más eficientes y si hay diferencias

12

Page 19: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.2.1: Capas de iOS

en el rendimiento energético entre códecs.

3.2. PlataformaPara llevar a cabo los experimentos necesarios para el estudio ha sido ne-

cesario un conjunto de herramientas, por una parte un terminal móvil iPhone4S1 y por otro las herramientas de desarrollo necesarias para desarrollar e ins-talar los programas necesarios en el terminal. En concreto, para desarrollar losprogramas necesarios se ha hecho uso de un sistema portátil MacBook con sis-tema operativo Mac OSX 10.7 Lion y el SDK (Software Development Kit) quese provee con XCode 4.3. Por otra parte la versión del sistema instalada en eldispositivo móvil y que se ha usado durante todos los test es iOS 52.

3.2.1. Sistema Operativo iOSEl sistema operativo iOS[19] es el utilizado por Apple Inc. en sus platafor-

mas móviles, está basado en BSD, una de las variantes de UNIX. Entre lascaracterísticas de este sistema está el ejecutar aplicaciones de forma nativa o através de web apps. Para el desarrollo de aplicaciones nativas es necesario el usodel iOS Software Development Kit (iOS SDK), que contiene las herramientase interfaces necesarias. Las aplicaciones nativas son instaladas directamente ypueden ejecutar código en el dispositivo sin necesidad de estar conectadas a lared, a diferencia de las web apps.

En cuanto a la arquitectura de iOS, podemos ver que se estructura en capas,actuando el sistema como una capa intermedia entre las aplicaciones y el hard-ware que controla. En la siguiente figura 3.2.1 podemos ver como se estructurael sistema.

1Uno de los móviles más potentes en el momento de su salida al mercado y con una ampliacuota de mercado[18] lo que hace que sea interesante su uso en el estudio.

2Los cambios en las futuras versiones del sistema no deberían afectar al funcionamiento dela herramienta pero pueden hacer que los resultados cuantitativos varíen de los aquí reflejadosdebido a cambios en las APIs, arquitectura u optimizaciones.

13

Page 20: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Esta arquitectura hace que sea más sencillo escribir programas para la pla-taforma de forma independiente al hardware usando frameworks de alto nivel,aunque los frameworks de bajo nivel siguen estando disponibles para permitirun acceso más directo a características hardware si el desarrollador lo desea.

Si analizamos con más detalle las diferentes capas tenemos:

Cocoa Touch Layer: Esta capa contiene los elementos clave para las aplica-ciones de iOS. Define la infraestructura básica y las tecnologías clave comola multitarea, la entrada táctil, notificaciones push y otros servicios de altonível.

Media Layer: Contiene las tecnologías que facilitan el uso de elementos mul-timedia como imágenes, video y sonido.

Core Service Layer: Contiene los servicios fundamentales que usan todas lasaplicaciones, aunque no se usen directamente otras partes del sistema estánconstruidas sobre ellas.

Core OS Layer: Contiene las características de bajo nivel sobre las que seconstruyen las otras tecnologías.

Estas Tecnologías se empaquetan como frameworks, los frameworks son di-rectorios que contienen una librería compartida con los recursos necesarios deésta. Al añadir un framework se tiene acceso a las características que soporta.iOS y OS X comparten muchos de los frameworks y sus funciones, las mayo-res diferencias entre los dos sistemas se encuentran en la interfaz de la aplicación.

Para desarrollar aplicaciones para iOS se usa XCode como plataforma dedesarrollo, XCode permite desarrollar, depurar y testar las aplicaciones en elsimulador y en dispositivos iOS. XCode sólo puede instalarse en sistemas OS Xy para instalar aplicaciones en un dispositivo iOS es necesario unirse al programade desarrolladores de Apple3.

3.3. Cómo medirDado que en estos sistemas se está ejecutando diversos servicios de forma

continua, al igual que en un computador, la estrategia adoptada para hacer lasmedidas consiste en crear un entorno controlado sobre el sistema en cuestión.Para ello se usará una instalación limpia y recién arrancada para, a continua-ción, desactivar la interfaz radio utilizando el modo avión del dispositivo, deforma que cambios en la conectividad no afecten al sistema. Este método tienela ventaja de ser extrapolable entre sistemas además de permitir que las pruebasse hagan de forma rápida puesto que el dispositivo no tiene que ser modificadode ninguna forma. Por último da también información en un uso más cercanoal real puesto que se ejecuta dentro del sistema en sí, con las ventajas y restric-ciones que tendrá en un entorno real.

3Para obtener más información sobre las posibilidades de desarrollo en la plataforma visitela página del programa de desarrolladores de Apple[20]

14

Page 21: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Para medir el rendimiento del dispositivo al ejecutar los códecs se medirá dela forma antes comentada, mientras que para la medición de la energía consumi-da se tomará un enfoque de medida indirecto. Dado que algunos dispositivos noproveen la capacidad de dar lecturas absolutas de la energía, así como la medidade la energía que gasta el sistema también debe ser tenida en cuenta y evitar susfluctuaciones, como sería el caso si la pantalla variara el brillo mientras tienenlugar las pruebas, por último las pruebas deben ser lo suficientemente extensaspara asegurar si hay linealidad o no en el consumo de la energía y modelarlode forma adecuada. Para todo ello se tomarán medidas del sistema en idle conla pantalla encendida al máximo de brillo desde el 100 % hasta que se apague,y luego se tomará medidas de los códecs poniéndose una restricción mínima deun gasto mayor al 60 %.

Por último, en el caso de la medida de energía, debido a que hay códecsque son capaces de codificar mucho más datos por segundo que otros y portanto escribirían y leerían muchos más datos desde memoria, se desactivarála salida a archivo para que el proceso de escritura que es el que más penalizaenergéticamente no tenga lugar, de forma que sea más igualitario, no suponiendoesto merma en la imparcialidad de las medidas puesto que en un caso real losdatos irían directamente a memoria desde la tarjeta de red o de sonido, siendoel gasto mucho menor.

3.3.1. MetodologíaSe ha diseñado un experimento software para tener la ventaja de crear una

aplicación que sea fácilmente instalable en un amplio número de equipos, en con-creto se usará un iPhone 4S. Sobre este sistema se harán pruebas de codificacióny descodificación de todos los códecs, y sus variantes, objetos de estudio con unaserie de conversaciones. Estas conversaciones han sido obtenidas de un banco deconversaciones de referencia internacional, Linguistic Data Consortium [21]. Enparticular hemos usado el CR-ROM LDC 97S42 que incluye 120 conversacionestelefónicas en inglés americano. Cada conversación tiene una duración entre 15min y 30 min, y se encuentra compuesta por dos canales (uno en cada sentidode la conversación) de manera que, separando ambos canales, es posible obtenerel audio que se recibiría (descodificaría) y transmitiría (codificaría) en cada ex-tremo de la conversación. De todas las conversaciones disponibles se han usado5, que, en su conjunto, cuentan con una duración aproximada de 2 horas, noencontrando diferencias en los resultados al añadir nuevas conversaciones quealargasen más el proceso4.

¿Qué se mide?

La estrategia que seguiremos para el estudio de la energía consumida por elprocesador es la medida del tiempo que el procesador de un terminal es utilizadodurante la codificación y descodificación de conversaciones reales. El tiempo deuso puede ser traducido a energía utilizando datos de potencia de la circuiteríadel dispositivo en particular. Es decir, asumiremos una ecuación lineal simplecomo modelo de la energía consumida por el procesador:

4Tampoco se han encontrado diferencias de rendimiento entre conversaciones más allá delas debidas al uso de VAD pues los periodos de silencio varían entre conversaciones.

15

Page 22: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Códec Código fuente C disponible en

G.711 http://www.itu.int/rec/T-REC-G.711/es [15]G.723.1 http://www.itu.int/rec/T-REC-G.723.1/es [16]G.729 http://www.itu.int/rec/T-REC-G.729/es [17]AMR http://www.3gpp.org/ftp/Specs/html-info/26073.htm [13]iLBC http://www.ietf.org/rfc/rfc3951.txt [14]

Cuadro 3.3.1: Código fuente de los códecs utilizados

EnergıaCPU = PHW · t

donde PHW es una constante de potencia que dependerá de un procesador parti-cular (del hardware) y t es el tiempo de ejecución de una tarea (p.e. codificacióno descodificación de las tramas de una conversación) para un códec particular.t dependerá del número de operaciones requeridas para completar la tarea asícomo de las prestaciones del procesador (p.e. Gigaflops). Si asumimos que laconstante PHW no depende del códec, entonces podríamos comparar diferentescódecs midiendo el tiempo que tardan en completar una misma tarea. Aunqueexisten otros modelos mas complejos en la literatura, creemos que este mode-lo lineal es suficiente para cubrir los propósitos del estudio de comparar lasdiferencias entre códecs.

Para determinar el consumo de energía también vamos a medir el gasto enla batería del teléfono por unidad de tiempo, lo que nos dará una pendiente dedescarga de batería equivalente a nuestra constante PHW, esta medida se harácon el dispositivo tanto en reposo como durante la ejecución de los códecs paraque se pueda obtener por la diferencia de las dos medidas el gasto atribuiblesólo al procesador. Los resultados obtenidos podrían ser trasladados a otrosdispositivos siempre que conozcamos el valor de PHW en el nuevo dispositivoy la relación entre la prestación de su procesador y el procesador utilizado ennuestro experimento5.

3.3.2. Código fuente de los códecsLas implementaciones en código C de los códecs utilizados son las proporcio-

nadas como referencia por los mismos organismos oficiales que los estandarizan,en la tabla 3.3.1 se presentan las fuentes para obtener dichas implementaciones.Sobre el código de ejemplo se han efectuado una serie de modificaciones paraadaptarlo a la ejecución sobre un sistema iOS y facilitar la toma de medidas. Elcódigo modificado puede revisarse para cada programa en los anexos B y C.

Las modificaciones efectuadas sobre el código pueden agruparse en:

Modificación de la interfaz de ejecución de los programas de ejemplo (de-mo) para adaptarlos a métodos de una clase de Objective-C, esta clasehereda de una clase Codec que proporciona una interfaz común para los

5Las prestaciones del procesador (p.e. Gigaflops) pueden ser obtenidas en las especificacio-nes técnicas.

16

Page 23: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

códecs. De esta forma la aplicación puede llamar a cualquier códec o va-riante del mismo a través de la interfaz gráfica de la misma forma. Losmétodos son los mismos en todos los códecs tanto para codificar cómopara descodificar.

Introducción del comando getrusage6 de C para las medidas de rendi-miento, este comando se usa tras la inicialización del códec y antes deque comience el bucle de procesado, por último se usa otra vez al final,de forma que se obtiene el tiempo de uso que se hace del procesador yla cantidad de audio procesado (número de tramas). El comando se sitúaantes y después de los bucles de procesado en los dos casos, es decir tantoen la codificación como en la descodificación.

Para las medidas de consumo de energía se ha eliminado la parte del códigoque hacía la escritura desde memoria a disco del audio codificado/desco-dificado, de forma general este código se encontraba dentro de los buclesde codificación/descodificación.

Gracias a las modificaciones, los códecs poseen una interfaz común facilitandoque puedan integrarse diferentes códecs sobre la misma arquitectura aprove-chando la misma interfaz gráfica y el mismo método de recolección y envío dedatos. Esta arquitectura también hace posible que la aplicación pueda ejecutarseen cualquier dispositivo iOS sin necesidad de nuevas modificaciones.

3.3.3. Arquitectura de las aplicaciones de medida desarro-lladas

Se ha realizado un programa por cada tipo de códec y tipo de medida7, es de-cir una aplicación para medir rendimiento y otra para medir el gasto energéticode cada tipo de códec.

3.3.3.1. Medidas de rendimiento:

Interfaz dividida en cuatro pestañas, cada una con una de las siguientesfunciones:

• Selección de conversaciones, permite elegir sobre que conversacionesqueremos que operen los códecs seleccionados.

• Selección de códecs y variantes, permite elegir el códec y la modalidaddel mismo que se quiere estudiar.

• Selección de número de iteraciones, permite elegir el número de re-peticiones de la tarea asignada.

6Este comando pertenece a la librería estándar de C y permite saber el tiempo de uso deprocesador de un determinado proceso. para más información puede consultar la referencia[22]

7Debido a la arquitectura de iOS y a los diferentes requisitos que Apple impone para eldesarrollo de las aplicaciones se ha tomado la decisión de hacer un programa para evaluarcada códec con sus variantes, teniendo por tanto set de aplicaciones para las medidas derendimiento y otro set para las medidas de consumo energético.

17

Page 24: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

• Ejecución y envío de resultados, esta pestaña permite comenzar laejecución de las tareas y muestra los resultados de forma resumidaen un cuadro, además una vez terminadas las tareas permite el envíopor correo electrónico de los archivos que recogen todos los datos deltest.

Para la toma de las medidas de rendimiento se usa una llamada estándara la clase del códec a la que se le pasa los parámetros necesarios teniendoen cuenta que debe de usarse el códec para codificar y descodificar cadaextremo de la conversación en un orden coherente. Por tanto primero secodifican los dos extremos el número de veces que indique el número de ite-raciones permaneciendo sólo un archivo temporal y a continuación se usaeste archivo como entrada del descodificador y se ejecuta el mismo númerode iteraciones creando un archivo de salida PCM de 16 bits, finalmente seeliminan los archivos temporales.

Un código para calcular el uso de CPU y el número de tramas llamadoconsumo.m con una cabecera consumo.h.

3.3.3.2. Medidas de energía.

Interfaz dividida en cuatro pestañas, cada una con una de las siguientesfunciones:

• Selección de códecs y variantes, permite elegir el códec y la modalidaddel mismo que se quiere estudiar.

• Selección de número de iteraciones, permite elegir el número de re-peticiones de la tarea asignada. De forma independiente para la co-dificación y la descodificación.

• Ejecución y envío de resultados, esta pestaña es similar a la del casode rendimiento aunque con botones específicos para empezar la sus-cripción a las notificaciones de la batería (log), y empezar las tareasde codificación o descodificación. Además de un botón que crea uncorreo electrónico y envía los archivos creados durante los test.

En el caso de las medidas de energía las llamada a la clase del códec,modificado específicamente para este tipo de medida, se toma siempreuna misma cadena de sonido y sólo se varía el número de iteraciones,teniendo en cuenta que se tiene esa cadena de sonido tanto en su formaoriginal del formato PCM de 16 bits como en su forma codificada por elcódec para que sirva de entrada cuando se mide la energía consumida enla descodificación.

Para la medida del gasto energético se usa un código que hace que laaplicación registre cada salto del 5% en la carga de la batería de formaautomática junto con el momento de comienzo y fin de la ejecución de lastareas.

18

Page 25: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.1: Elección de conversaciones

3.3.4. Proceso de toma de medidaEn este punto se detalla como se lleva a cabo la toma de las medidas con los

programas desarrollados anteriormente y se muestra archivos de ejemplo de lasmedidas obtenidas con el formato obtenido del programa.

3.3.4.1. Medidas de rendimiento

Durante estas medidas el dispositivo está constantemente conectado a laalimentación, se encuentra en modo avión8 y sólo se está ejecutando el progra-ma de medida correspondiente. Además entre cada medida el sistema se reinicia.

Al arrancar la aplicación aparece la primera pestaña que puede verse enla figura 3.3.1, donde podremos elegir sobre que conversaciones se ejecutan laspruebas, pueden seleccionarse todas o sólo algunas de ellas. En las pruebas entotal se han elegido todas las conversaciones para todos los códecs 2 veces.

En la siguiente pestaña, vista en la figura 3.3.2, se debe elegir con que con-figuración queremos ejecutar las pruebas, pudiendo elegirse una o más configu-raciones. Para que el programa se ejecute correctamente debe elegirse al menosuna configuración de códec y una conversación.

El siguiente paso es pasar a la siguiente pestaña y elegir el número de ite-raciones que tendrá la prueba, se puede ver en la figura 3.3.3. Como mínimo el

8Es decir tiene todas las interfaces de comunicación inalámbrica deshabilitadas

19

Page 26: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.2: Elección de códecs

número de repeticiones será uno.

Por último, llegamos a la pestaña de ejecución de las pruebas, en esta vistael usuario sólo debe pulsar el botón Run, figura 3.3.4, y esperar a que el dis-positivo le avise que la ejecución ha terminado, cuando esto suceda sonará unaalarma y aparecerán en la pantalla diversos datos de la prueba, figura 3.3.5.En este momento, si el usuario pulsa en el botón e-mail se generará un correoelectrónico con los datos mostrados en pantalla como cuerpo del mensaje y losdatos recogidos durante las pruebas en archivos adjuntos para su posterior pro-cesamiento y estudio, figuras 3.3.6 y 3.3.7.

Los archivos generados, para cada códec y extremo de cada conversación,tienen el formato del archivo mostrado a continuación. En particular este es elarchivo obtenido para el códec AMR sin VAD a un bitrate de 4.75 kbit/s. en elextremo uno de la primera conversación.

Nombre de archivo: AMR4.75Conversacion1t1.dat

iter. modo tiempoCPU muestras segundos de sonido por segundos deCPU

1 c 765.944763 44982 1.1745492 c 765.833679 44982 1.174720iter. modo tiempoCPU muestras segundos de sonido por segundos de

20

Page 27: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.3: Número de repeticiones

Figura 3.3.4: Vista de ejecución - Ejecución

21

Page 28: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.5: Vista de ejecución - Resultados mostrados

Figura 3.3.6: Vista de ejecución - Envío

22

Page 29: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.7: Vista de ejecución - Enviado

CPU1 d 116.778297 44982 7.7038282 d 116.737350 44982 7.706531

3.3.4.2. Medidas de gasto energético

En este caso el dispositivo también está en modo avión y sólo se ejecutael programa de medida, en cuanto a la alimentación estará conectada hasta elmomento de comenzar las medidas. Al igual que en el caso anterior las medidasse ejecutan tras reiniciar el dispositivo móvil.

Al abrir la aplicación la primera pestaña mostrada nos permite seleccionarel códec para el que se realizarán las medidas, en este caso sólo puede elegirseun códec de los posibles. En la figura 3.3.8 se muestra la primera pestaña.

En la siguiente pestaña elegimos el número de iteraciones que tendrá la prue-ba, de forma independiente para la codificación y la descodificación. En la figura3.3.9 vemos una captura de la aplicación.

Por último, en la tercera pestaña tenemos los controles para empezar la me-dida. Primero debemos activar el log que es un archivo donde se registra conuna marca de tiempo los cambios de nivel y estado de la batería, figura 3.3.10.A continuación se debe desconectar el terminal de la alimentación y pulsar uno

23

Page 30: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.8: Elección de códecs

Figura 3.3.9: Elección de iteraciones

24

Page 31: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.10: Vista de ejecución - Log

de los dos botones que comienzan las pruebas, codificación o descodificación, fi-gura 3.3.11. Finalmente una vez obtenidos los resultados estos se pueden enviarpor correo electrónico en dos archivos que recogen los cambios de la batería ycuando han empezado y terminado las pruebas, figura 3.3.12.

A continuación se muestra un ejemplo de los archivos generados por la apli-cación. En este caso para el códec AMR sin VAD a 4.75 kbit/s en el proceso decodificación.

Nombre de archivo: bateria.txt

Comienzo del log de bateria 2012-04-18 10:13:15 +0000El estado de batería es: 1 2012-04-18 10:13:18 +0000El nivel de batería es: 0.95 2012-04-18 10:26:44 +0000El nivel de batería es: 0.9 2012-04-18 10:39:10 +0000El nivel de batería es: 0.85 2012-04-18 10:51:15 +0000El nivel de batería es: 0.8 2012-04-18 11:03:40 +0000El nivel de batería es: 0.75 2012-04-18 11:16:06 +0000El nivel de batería es: 0.7 2012-04-18 11:28:11 +0000El nivel de batería es: 0.65 2012-04-18 11:40:16 +0000El nivel de batería es: 0.6 2012-04-18 11:52:02 +0000El nivel de batería es: 0.55 2012-04-18 12:03:47 +0000El nivel de batería es: 0.5 2012-04-18 12:15:52 +0000

25

Page 32: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 3.3.11: Vista de ejecución - Codificación / Descodificación

Figura 3.3.12: Vista de ejecución - Envío

26

Page 33: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

El nivel de batería es: 0.45 2012-04-18 12:27:37 +0000El nivel de batería es: 0.4 2012-04-18 12:39:23 +0000El nivel de batería es: 0.35 2012-04-18 12:49:47 +0000El nivel de batería es: 0.3 2012-04-18 13:01:32 +0000El nivel de batería es: 0.25 2012-04-18 13:14:18 +0000El nivel de batería es: 0.2 2012-04-18 13:26:43 +0000El nivel de batería es: 0.15 2012-04-18 13:47:52 +0000El nivel de batería es: 0.1 2012-04-18 14:10:22 +0000El nivel de batería es: 0.05 2012-04-18 14:28:51 +0000El nivel de batería es: 0 2012-04-18 14:53:24 +0000

Nombre de archivo: bateria2.txt

El codec usado durante el proceso es: AMR4.75La plataforma es: iPhone4,1Comienzo de la codificación 2012-04-18 10:13:19 +0000El codec usado durante el proceso es: AMR4.75La plataforma es: iPhone4,1Fin de la codificación 2012-04-18 13:24:18 +0000

Las instrucciones necesarias para instalar y compilar las herramientas demedida se encuentran en el anexo A.

27

Page 34: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Capítulo 4

Resultados

En este apartado se muestran los resultados de las pruebas realizadas segúnlas especificaciones del capítulo 3. Al igual que las pruebas realizadas, los datosse presentan en dos apartados, rendimiento y gasto energético. Las tablas yfiguras del capítulo recogen y condensan la información obtenida durante losexperimentos.

4.1. RendimientoPara las pruebas de rendimiento se han hecho dos iteraciones de todas las

conversaciones para cada códec y variante, lo que nos da 20 medidas diferen-tes1. Los resultados recogidos se han tratado estadísticamente para obtener lainformación mostrada a continuación.

En el cuadro 4.1.1 se muestra el resultado de las medidas en la codificaciónde las conversaciones para cada códec y variante.

En el cuadro 4.1.2 se muestra el resultado de las medidas en la descodifica-ción de las conversaciones para cada códec y variante.

Como se discutió en la capítulo 3 para que un dispositivo pueda utilizar uncódec en una aplicación de VoIP en tiempo real debe ser capaz de ejecutar ala vez los procesos de codificación y descodificación, esta tabla nos muestra quecódecs pueden usarse en el dispositivo móvil del estudio y cuales no.

En la figura 4.1.1 se muestran los resultados de las tablas 4.2.4 4.2.6 4.1.3de forma condensada, atendiendo a las medias de tiempo de audio codificado/-descodificado y mostrando el tiempo de procesador acumulado para cada tarea,permitiendo ver si es posible usar un códec determinado o no al pasar un se-gundo de proceso por segundo de audio procesado en cada sentido.

15 Conversaciones x 2 Canales x 2 Iteraciones

28

Page 35: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

CódecMedia de

codificaciónseg audio

seg CPU

Intervalo deConfianza 95 %

Variación %intervalo confianza

AMR 4.75 1.1760619 0,0009592408 0,0815638038AMR 7.4 1.2047221 0,0009570168 0,0794387982AMR 12.2 1,1132675 0,0008550941 0,0768093996

AMR 4.75 VAD 1,5816908 0,0643953333 4,0712972039AMR 7.4 VAD 1,61172595 0,0638037916 3,9587245977AMR 12.2 VAD 1,46745135 0,0546551214 3,7244929048

G.729 1,0650189 0,0011112069 0,1043368285G.729b 1,5269915 0,0534129596 3,4979212162G.729a 1,81811125 0,0010696579 0,0588334657G.729ab 2,3791872 0,0616307063 2,590410134G.723 5.3 0,8985084 0,001343638 0,1495409485G.723 6.3 0,67330565 0,0022399295 0,3326764773

G.723 5.3 VAD 1,2162418 0,0473987498 3,897148563G.723 6.3 VAD 0,93130565 0,0434156726 4,6618070626

iLBC 15.2 6,69784545 0,0010704197 0,0159815522iLBC 13.33 5,7163626 0,0010225189 0,0178875799

Cuadro 4.1.1: Rendimiento en codificación

29

Page 36: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

CódecMedia de

descodificaciónseg audio

seg CPU

Intervalo deConfianza 95 %

Variación %intervalo confianza

AMR 4.75 7,7463343 0,0094600544 0,122122981AMR 7.4 7,92790515 0,00325231 0,0410235738AMR 12.2 7,7617396 0,0051735467 0,0666544742

AMR 4.75 VAD 9,0362807 0,1683620648 1,863178783AMR 7.4 VAD 9,14910655 0,1561918419 1,707181363AMR 12.2 VAD 8,92440705 0,1518197683 1,7011748504

G.729 5,20536965 0,0127892634 0,2456936638G.729b 5,81118165 0,0686124707 1,1806974012G.729a 8,2515425 0,0051007214 0,0618153686G.729ab 7,8689684 0,0264587193 0,3362412699G.723 5.3 9,8823105 0,0074405467 0,0752915693G.723 6.3 9,89446855 0,0068016988 0,0687424369

G.723 5.3 VAD 11,0495991 0,0074405467 0,0673377069G.723 6.3 VAD 11,0636786 0,1436614353 1,2984961013

iLBC 15.2 16,3897489 0,0300987959 0,1836440329iLBC 13.33 15,64732395 0,0260178325 0,1662765634

Cuadro 4.1.2: Rendimiento en descodificación

30

Page 37: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Códec

Media deprocesadoseg CPU

seg conversacion

AMR 4.75 0,9793886982AMR 7.4 0,9562036768AMR 12.2 1,0270938056

AMR 4.75 VAD 0,7428998207AMR 7.4 VAD 0,7297531655AMR 12.2 VAD 0,7935058587

G.729 1,1310597885G.729b 0,826964534G.729a 0,6712108102G.729ab 0,5473930698G.723 5.3 1,2141465604G.723 6.3 1,5862761477

G.723 5.3 VAD 0,9127059477G.723 6.3 VAD 1,1641471876

iLBC 15.2 0,2103154904iLBC 13.33 0,23884511

Cuadro 4.1.3: Rendimiento de los códecs

31

Page 38: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 4.1.1: Gráfico de rendimiento

32

Page 39: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Carga batería Tiempo

Diferencia detiempo con la

medida anterior(minutos)

100 00:00:0095 00:22:40 22,666666666790 00:44:30 21,833333333385 01:06:40 22,166666666780 01:28:50 22,166666666775 01:52:00 23,166666666770 02:14:30 22,565 02:37:00 22,560 26:59:30 22,555 27:21:40 22,166666666750 03:43:10 21,545 04:04:59 21,816666666740 04:26:29 21,535 04:48:59 22,530 05:10:29 21,525 05:31:58 21,483333333320 05:53:08 21,166666666715 06:14:57 21,816666666710 06:37:07 22,16666666675 06:58:57 21,83333333330 07:20:09 21,2

Cuadro 4.2.1: Tabla de tiempos de la descarga en reposo

4.2. Gasto energéticoPara las pruebas de descarga de batería primero se hace un test con el dis-

positivo en reposo, en modo avión y con la pantalla al máximo de brillo. Éstamedida servirá como patrón del gasto de batería en estado de reposo y su valorse restará del valor de las medidas en los casos de codificación y descodificaciónpara obtener el gasto debido al procesador. Podemos ver las diferencias de tiem-po entre saltos del 5 % recogidos durante la descarga en el cuadro 4.2.1.

En el cuadro 4.2.2 tenemos los datos estadísticos obtenidos de la tabla an-terior.

En la figura 4.2.1 podemos ver una representación de la pendiente de des-carga en estado de reposo según los datos de la tabla 4.2.1.

33

Page 40: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Media Salto 5% 22,0075 minutosVarianza Salto 5 % 0,2836688596 minutos2

Desviación estándar 0,5326057263 minutosIntervalo de confianza 90% 0,195892627 minutos

Pendiente media 0,2271952743porcentaje dedescarga por

minuto

Cuadro 4.2.2: Datos estadísticos de descarga en reposo

Figura 4.2.1: Descarga en Reposo

34

Page 41: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Códec Bateríainicial ( %)

Batería final( %)

Tiempotranscurrido

Bateríaconsumida

AMR 4.75 95 25 02:47:34 70AMR 7.4 95 25 02:46:54 70AMR 12.2 95 15 03:10:24 80

AMR 4.75 VAD 95 55 01:36:43 40AMR 7.4 VAD 95 40 02:11:38 55AMR 12.2 VAD 95 30 02:33:07 65

G.729 95 45 01:59:52 50G.729b 95 30 02:30:27 65G.729a 95 35 02:22:43 60G.729ab 95 30 02:34:29 65G.723 5.3 95 30 02:33:07 65G.723 6.3 95 10 03:22:29 85

G.723 5.3 VAD 95 40 02:11:38 55G.723 6.3 VAD 95 20 02:53:56 75

iLBC 15.2 95 10 03:13:46 85iLBC 13.33 95 45 01:53:51 50

Cuadro 4.2.3: Descarga durante la codificación

A continuación se muestran los resultados de las pruebas de descarga debatería para los distintos códecs en el caso de la codificación, para obtenerlos seha tenido de forma constante funcionando el proceso de codificación sobre unacadena de sonido. Para estas pruebas el terminal estaba en modo avión y conla pantalla al máximo de brillo.

En los cuadros 4.2.3 y 4.2.4 se muestran las medidas de descarga de la bate-ría en la codificación de las conversaciones para cada códec y variante.

35

Page 42: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

CódecPendiente de

descarga( % por minuto)

Pendiente dedescarga debido

a la CPU( % por minuto)

Diferenciarespecto alpromedio

Porcentaje dediferenciarespecto alpromedio

AMR 4.75 0,4191616766 0,1919664023 -0,0054512438 -0,0276127485AMR 7.4 0,421686747 0,1944914726 -0,0029261735 -0,0148222489AMR 12.2 0,4210526316 0,1938573572 -0,0035602889 -0,0180342992AMR 4.75

VAD0,4135791832 0,1863839088 -0,0110337373 -0,0558903295

AMR 7.4VAD

0,4178272981 0,1906320237 -0,0067856224 -0,0343719143

AMR 12.2VAD

0,4248366013 0,197641327 0,0002236808 0,0011330337

G.729 0,4201680672 0,1929727929 -0,0044448532 -0,0225149744G.729b 0,4333333333 0,206138059 0,0087204129 0,0441724083G.729a 0,4225352113 0,1953399369 -0,0020777092 -0,0105244351G.729ab 0,4220779221 0,1948826477 -0,0025349984 -0,0128407893G.723 5.3 0,4248366013 0,197641327 0,0002236808 0,0011330337G.723 6.3 0,4207920792 0,1935968049 -0,0038208413 -0,019354102G.723 5.3

VAD0,4178272981 0,1906320237 -0,0067856224 -0,0343719143

G.723 6.3VAD

0,4311996934 0,204004419 0,0065867729 0,0333646613

iLBC 15.2 0,4404145078 0,2132192334 0,0158015873 0,0800414128iLBC 13.33 0,4424778761 0,2152826018 0,0178649556 0,0904932056

Cuadro 4.2.4: Descarga durante la codificación

La medida de la segunda columna de la tabla 4.2.4 se obtiene de restar lamedia de descarga por minuto calculada en el cuadro 4.2.2 al dato de la primeracolumna.

En la figura 4.2.2 podemos ver una representación de los tiempos de descargatotal de la batería, en el caso de la codificación, haciendo uso de la aplicaciónde medida y si sólo se tiene en cuenta el gasto producido por la CPU en unaejecución continua.

Seguidamente se muestran los resultados de las pruebas de descarga de ba-tería para los distintos códecs en el caso de la descodificación, para obtenerlosse ha tenido de forma constante funcionando el proceso de descodificación sobreuna cadena de sonido codificado que provenía de la misma cadena de sonidooriginal pero que varía según el correspondiente códec a estudiar. Para estaspruebas el terminal estaba en modo avión y con la pantalla al máximo de brillo.

En los cuadros 4.2.5 y 4.2.6 se muestran las medidas de descarga de la bate-

36

Page 43: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 4.2.2: Tiempo de descarga en codificación

ría en la descodificación de las conversaciones para cada códec y variante.

37

Page 44: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Códec Bateríainicial ( %)

Batería final( %)

Tiempotranscurrido

Bateríaconsumida

AMR 4.75 95 25 02:48:54 70AMR 7.4 95 25 02:47:53 70AMR 12.2 95 25 02:48:33 70

AMR 4.75 VAD 95 40 02:13:39 55AMR 7.4 VAD 95 40 02:12:58 55AMR 12.2 VAD 95 40 02:11:37 55

G.729 95 5 03:30:35 90G.729b 95 15 02:56:20 80G.729a 95 40 02:02:15 55G.729ab 95 30 02:17:41 65G.723 5.3 95 35 02:07:33 60G.723 6.3 95 35 02:19:42 60

G.723 5.3 VAD 95 45 01:54:51 50G.723 6.3 VAD 95 45 01:51:09 50

iLBC 15.2 95 25 02:35:50 70iLBC 13.33 95 25 02:27:46 70

Cuadro 4.2.5: Descarga durante la descodificación

38

Page 45: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

CódecPendiente de

descarga( % por minuto)

Pendiente dedescarga debido

a la CPU( % por minuto)

Diferenciarespecto alpromedio

Porcentaje dediferenciarespecto alpromedio

AMR 4.75 0,4166666667 0,1894713923 -0,0222698082 -0,1051746573AMR 7.4 0,4191616766 0,1919664023 -0,0197747982 -0,0933913578AMR 12.2 0,4166666667 0,1894713923 -0,0222698082 -0,1051746573AMR 4.75

VAD0,4115226337 0,1843273594 -0,0274138411 -0,1294686204

AMR 7.4VAD

0,4136375031 0,1864422288 -0,0252989717 -0,1194806286

AMR 12.2VAD

0,4198473282 0,1926520539 -0,0190891466 -0,0901531992

G.729 0,4285714286 0,2013761542 -0,0103650463 -0,0489514854G.729b 0,4545454545 0,2273501802 0,0156089797 0,0737172531G.729a 0,4508196721 0,2236243978 0,0118831973 0,0561213275G.729ab 0,4744525547 0,2472572804 0,0355160799 0,1677334396G.723 5.3 0,4724409449 0,2452456705 0,03350447 0,1582331163G.723 6.3 0,4316546763 0,2044594019 -0,0072817986 -0,0343900884G.723 5.3

VAD0,4353504571 0,2081551828 -0,0035860177 -0,0169358525

G.723 6.3VAD

0,4498425551 0,2226472808 0,0109060802 0,0515066516

iLBC 15.2 0,4516129032 0,2244176289 0,0126764284 0,0598675568iLBC 13.33 0,4761904762 0,2489952019 0,0372540013 0,1759412019

Cuadro 4.2.6: Descarga durante la descodificación

La medida de la segunda columna de la tabla 4.2.6 se obtiene de restar lamedia de descarga por minuto calculada en el cuadro 4.2.2 al dato de la primeracolumna.

En la figura 4.2.3 podemos ver una representación de los tiempos de descargatotal de la batería, en el caso de la descodificación, haciendo uso de la aplicaciónde medida y si sólo se tiene en cuenta el gasto producido por la CPU en unaejecución continua.

39

Page 46: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Figura 4.2.3: Tiempo de descarga en descodificación

40

Page 47: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Capítulo 5

Discusión

En este capítulo se comentarán los resultados mostrados en el capítulo 4.Primero se hará una valoración cuantitativa y se compararán los resultados enesta plataforma móvil con los del estudio anterior, para finalizar se extraerá unaclasificación cualitativa de los códecs.

5.1. RendimientoSegún los resultados mostrados en la tabla 4.1.3, se puede ver como el códec

iLBC es el más eficiente necesitando menos de 0,25 segundos para procesarun segundo de conversación en cualquiera de sus dos variantes. Al códec iLBCle sigue la variante simplificada del G.729, el G.729b, con y sin supresión desilencios y dos modos del códec AMR con supresión de silencios, los que operana 4,75 y 7,4 kbps estos últimos precisan menos de 0,75 segundos de proceso porsegundo de conversación, en principio estos códecs son los más eficientes y quemejor experiencia le daría al usuario.

A partir de aquí nos encontramos con varios códecs que precisan de entre0,75 y 0,97 segundos de procesador por segundo de conversación, estos son G.7235,3 kbps con VAD, G.729b y AMR a 12.2 kbps con VAD y a 4,75 y 7,4 kbpssin VAD, estos códecs en principio podrían operar aunque estarían cerca de lascapacidades hardware del procesador.

Por último encontramos un conjunto de códecs que no es posible usar eneste dispositivo para aplicaciones de tiempo real ya que superan el segundo deprocesamiento de CPU por segundo de conversación, estos son G.723 6,3 kbpscon VAD, y las dos modalidades del mismo códec sin VAD, el G.729 y el AMRa 12,2 kbps sin VAD.

Sin embargo al estudiar con detalle las medidas, se denota que las mismasindican un promedio del tiempo de conversación procesado por tiempo de CPU,es decir nos sirven de indicativo de cuanto tiempo está en promedio la CPUtrabajando que es el parámetro necesario para calcular el gasto energético, sinembargo para saber si el códec da una correcta experiencia de usuario, es decirse pueden codificar todas las tramas sin retrasos ni pérdidas, se ha de tener encuenta que los códecs con VAD cuando la trama no es SID la CPU dedica elmismo tiempo a codificarla que si no tiene el VAD activo, por tanto los códecs

41

Page 48: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

aptos para usarse en una aplicación VoIP son un conjunto más restringido, siel códec sin VAD no es válido el que lo tiene activo tampoco lo es. En esteterminal en concreto los códecs válidos serían iLBC, el G.729a y G.729ab, ylos modos del códec AMR que operan a 4,75 y 7,4 kbps con y sin VAD, sinembargo dado lo próximo de la relación 1:1 en los códecs AMR se desaconseja-ría el uso de los mismos ya que operan al límite de las posibilidades del hardware.

En una escala cualitativa se clasificarían los códecs de más eficiente a menosde la siguiente forma iLBC, G.729a y G.729ab, AMR con VAD, G729b, AMR,G.729 y G.723. Estos resultados son similares a los obtenidos en el estudio quesirve como punto de partida y como en aquel se ve que desde el punto de vistade la CPU el más eficiente es el iLBC con una amplia ventaja sobre los otroscódecs estudiados aunque menor que en el estudio anterior. Por otra parte hade tenerse luego en cuenta si para el dispositivo es posible usar el códec o no.

5.2. Gasto energéticoEn los datos recogidos durante las pruebas gasto energético y presentados

en el capítulo 4 se comprueba que:

El gasto energético en estado de reposo tiene una variabilidad muy baja ypuede asimilarse a una constante, dependiendo la energía consumida sólodel tiempo.

En la codificación el gasto energético es prácticamente igual entre códecspara el mismo tiempo de uso de CPU.

En las descodificación el gasto energético de los códecs es también prác-ticamente igual con un gasto un poco mayor en los casos del iLBC yG.729ab.

Las diferencias de gasto energético entre códecs, más acusadas en el procesode descodificación, se deben principalmente a que hay un diferente número delecturas desde disco de los archivos que sirven de entrada al algoritmo así comouna diferencia en tamaño según la capacidad de compresión de los mismos, estohace que se penalice a los códecs más eficientes pero que producen archivoscodificados de mayor tamaño. Sin embargo en un entorno real esta penalizaciónno tendría lugar ya que las tramas se leerían directamente de memoria.

Por otra parte las diferencias en la descodificación son mucho menos signifi-cativas puesto que el tiempo de proceso que se dedica a ello es sustancialmentemenor que el dedicado a la codificación.

Si calculamos la media de gasto energético a partir de los cuadros 4.2.4 y4.2.6 obtenemos un resultado de 0,42 % de gasto energético por minuto de usode CPU. Para este dispositivo el valor de la batería es 1432mAh (5.3Wh) y portanto tendremos un equivalente de 6,014 mAh por minuto de uso de CPU.

Esto nos sirve además para predecir según la tabla de rendimiento 4.1.3 eltiempo que podría estar el terminal funcionando si sólo hubiera el gasto derivadodel procesador, que teniendo en cuenta los datos de las tablas anteriores el gastoatribuido sólo al procesador sería del 0,197%. Estos datos se presentan en elcuadro 5.2.1.

42

Page 49: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Códec Media deprocesadoseg CPU

seg convers.

Autonomíasólo gasto

CPU

Gastopromedio (%)por minuto

AutonomíaGasto todo el

sistema

AMR 4.75 0,979388698 518,2969889 0,415939574 240,4195377AMR 7.4 0,956203677 530,8641093 0,411372124 243,0889068AMR 12.2 1,027093806 494,2238094 0,42533748 235,1074259AMR 4.75

VAD0,742899821 683,2875699 0,369351265 270,7449779

AMR 7.4VAD

0,729753166 695,5971378 0,366761374 272,6568477

AMR 12.2VAD

0,793505859 639,7107313 0,379320654 263,6291984

G.729 1,131059789 448,7952081 0,445818778 224,3063883G.729b 0,826964534 613,8282748 0,385912013 259,1264241G.729a 0,67121081 756,2664449 0,35522853 281,5089208G.729ab 0,54739307 927,3303613 0,330836435 302,2641689G.723 5.3 1,21414656 418,0831456 0,462186872 216,3627008G.723 6.3 1,586276148 320,0036853 0,535496401 186,7426182G.723 5.3

VAD0,912705948 556,1640247 0,402803072 248,2602716

G.723 6.3VAD

1,164147188 436,0395478 0,452336996 221,0741126

iLBC 15.2 0,21031549 2413,584526 0,264432152 378,1688399iLBC 13.33 0,23884511 2125,286187 0,270052487 370,2983862

Cuadro 5.2.1: Autonomía del dispositivo móvil

43

Page 50: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Del cuadro 5.2.11 se extrae que el uso de un códec adecuado puede propiciarun gran aumento en la autonomía del dispositivo, más significativo cuanto ma-yor sea la energía que consuma la CPU respecto del resto del sistema2 y paraconfiguraciones adecuadas se puede obtener mejoras en la autonomía de casi unorden de magnitud.

1Se debe tener en cuenta que los valores de tiempo de la última columna sólo son válidos siel % de gasto de la CPU es de 0,42 o inferior pues es el máximo que gasta el equipo cuando estáen funcionamiento constante, valores mayores de % se dan cuando se tarda más de 1 segundoen procesar 1 segundo de conversación arrojando valores no reales.

Sin embargo, los tiempos mostrados en la tercera columna son válidos y siguen sirviendo deorientación porque hacen sólo referencia a la complejidad de los códecs y con un procesadormás potente se tendría la misma relación de eficiencia pero haciendo que sea posible usar loscódecs que no lo son ahora.

2Se debe tener en cuenta que para los propósitos de medida se ha configurado la pantallaencendida y al máximo de brillo de forma permanente, sin embargo en este tipo de aplicacioneses bastante usual apagar la pantalla para ahorrar batería haciendo más importante aún lacorrecta elección del códec.

44

Page 51: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Capítulo 6

Conclusiones y direccionesde avance

6.1. ConclusionesSegún el estudio es posible modelar la cantidad de energía que precisará

una CPU al usar un códec atendiendo sólo al tiempo necesario para ejecutar sualgoritmo, es decir es independiente del tipo de código o complejidad más alláde que una mayor complejidad necesita más tiempo de ejecución. Esto nos llevaa:

La elección del códec atendiendo a la eficiencia energética sea simple puessólo debemos estudiar cuanto tiempo usa el procesador cada códec. Es de-cir se puede proponer un modelo simple para la elección de códecs basadoen el consumo en la CPU en el que tendremos una constante de gasto deenergía que depende de cada dispositivo y el tiempo de proceso necesariopor cada códec teniendo en cuenta los procesos de codificación y descodi-ficación, siendo mejor el menor valor.

EnergıaCPU = PHW · t

Que la eficiencia energética del códec, atendiendo al consumo del procesa-dor, debe ser tenida en cuenta pues puede dar lugar a grandes diferenciasen la autonomía del terminal, pudiendo ofrecer diferencias cercanas al or-den de magnitud.

6.2. Direcciones de avanceLos próximos pasos en esta dirección, una vez determinada la importancia

del gasto energético debido a la CPU, es elaborar un algoritmo que pueda decidirel mejor códec para cada situación, teniendo en cuenta parámetros de calidad desonido, ancho de banda y eficiencia energética en los terminales móviles, tanto elgasto atribuible a la CPU como a la interfaz WiFi; este algoritmo junto con unapequeña muestra de audio patrón podría servir para determinar bajo demandael mejor códec a emplear en cada situación en la que se encuentre el dispositivo

45

Page 52: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

móvil y podría implementarse dentro de las aplicaciones de VoIP.

Por otra parte, sería interesante elaborar un estudio similar para los serviciosde video llamada y video bajo demanda en movilidad, escenario que compartemuchas similitudes con el presente y que irá cobrando más importancia con lasmejoras de las redes de banda ancha móvil y la capacidad de proceso de losterminales.

46

Page 53: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Bibliografía

[1] IDC. http://www.idc.com/getdoc.jsp?containerId=prUS24037713#.UVLrQirKde0. 1.1

[2] Detecon Consulting. http://innovationcenter.deteconusa.com/uncategorized/mobile-voip/. 1.1

[3] Daisy Group. http://mediacentre.daisygroupplc.com/2012/06/64-6-per-cent-growth-rate-predicted-for-mobile-voip-market/.1.1

[4] R. Gupta T. Pering, Y. Agarwal and R. Want. Coolspots: Reducing thepower consumption of wireless mobile devices with multiple radio interfa-ces. In MobiSys’06, pages 220–232. 4th International Conference on Mobilesystems, applications and services, June 2006. 1.1

[5] Tao Zhang, S. Madhani, P. Gurung, and E. Van den Berg. Reducing energyconsumption on mobile devices with wifi interfaces. In Global Telecommu-nications Conference, 2005. GLOBECOM ’05. IEEE, volume 1, pages 5pp.–, 2005. 1.1

[6] V. Namboodiri and Lixin Gao. Energy-efficient voip over wireless lans.Mobile Computing, IEEE Transactions on, 9(4):566–581, 2010. 1.1

[7] A. Estepa, R. Estepa, and J. Vozmediano. A new approach for voip trafficcharacterization. Communications Letters, IEEE, 8(10):644–646, 2004. 1.3

[8] H. Schulzrinne and S. Casner. RTP Profile for Audio and Video Conferenceswith Minimal Control. RFC 3551 (Standard), July 2003. Updated by RFC5761. 2

[9] Matt Pharr and Greg Humphreys. Physically Based Rendering: FromTheory to Implementation, chapter 7. Morgan Kaufmann, 2004. 2.1.1

[10] ITU’s Telecommunication Standardization Sector ITU-T. http://www.itu.int/. 2.4

[11] The 3rd Generation Partnership Project 3GPP. http://www.3gpp.org/.2.4

[12] Internet Engineering Task Force IETF. http://www.ietf.org/. 2.4

[13] S. Andersen, H. Astrom, R. Hagen, R. Hagen, W. Kleijn, and J. Linden.Adaptative multi-rate speech codec; c-source code. Recommendation TS126 073, ETSI, December 2008. 2.4.1, 3.3.2

47

Page 54: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

[14] H. Astrom R. Hagen W. Kleijn J. Linden. S. Andersen, A. Duric. Internetlow bit rate codec (ilbc). RFC 3951, The Internet Engineering Task Force(IETF), December 2004. 2.4.2, 3.3.2

[15] Pulse code modulation (pcm) of voice frequencies. G. 711, ITU’s Telecom-munication Standardization Sector (ITU-T), November 1988. 2.4.3, 3.3.2

[16] Dual rate speech coder for multimedia communications transmitting at 5.3and 6.3 kbit/s. G. 723.1, ITU’s Telecommunication Standardization Sector(ITU-T), May 2006. 2.4.4, 3.3.2

[17] Coding of speech at 8 kbit/s using conjugate-structure algebraic-code-excited linear prediction (cs-acelp). G. 729, ITU’s Telecommunication Stan-dardization Sector (ITU-T), June 2012. 2.4.5, 3.3.2

[18] Strategy Analytics. http://www.businesswire.com/news/home/20121108005702/en/Strategy-Analytics-Samsung-Galaxy-S3-Worlds-Best-Selling.1

[19] Apple Inc. iOS Technology Overview. https://developer.apple.com/library/ios/#documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/Introduction/Introduction.html. 3.2.1

[20] iOS Developer Program. https://developer.apple.com/programs/ios/. 3

[21] Alexandra Canavan, David Graff, and George Zipperlen. Callhome ame-rican english speech. In LDC97S42, Linguistic Data Consortium, 1997.3.3.1

[22] The GNU C Library Resource Usage. http://www.gnu.org/software/libc/manual/html_node/Resource-Usage.html. 6, B.1

[23] Antonio J Estepa, Juan M Vozmediano, Jorge López, and Rafael M Este-pa. Impact of voip codecs on the energy consumption of portable devices.In Proceedings of the 6th ACM workshop on Performance monitoring andmeasurement of heterogeneous wireless and wired networks, pages 123–130.ACM, 2011. B.2

[24] Apple Inc. UIDevice Class. https://developer.apple.com/library/ios/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/uid/TP40006902-CH3-SW39. C.1

48

Page 55: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Apéndice A

Instrucciones de instalación

En este capítulo se abordan los pasos necesarios para compilar las aplicacio-nes de medida usadas en este proyecto.

A.1. Pasos de instalaciónPara la instalación de las aplicaciones de medida de rendimiento y batería

creadas para los distintos códecs y sus variantes debemos copiar el código quese adjunta en el DVD al ordenador1.

Una vez se han copiado al ordenador debe abrirse el archivo .xcodeproj deldirectorio correspondiente. En los cuadros A.1.1 y A.1.2 se detalla la correspon-dencia entre directorios y códecs.

Con Xcode ya abierto conectamos el dispositivo iOS al ordenador aparecien-do un scheme de compilación con el nombre del dispositivo, este scheme debe serseleccionado y a continuación se compila y carga la aplicación en el dispositivohaciendo click en el icono de play2.

Tras seguir estos pasos la aplicación se abrirá y mientras el dispositivo estéconectado por cable XCode registrará las salidas de log del dispositivo. Para

1Para que la instalación sea posible debe tenerse en cuenta que es necesario tener unordenador con sistema operativo OS X y las herramientas de desarrollo XCode.

2Para probar aplicaciones en un dispositivo iOS compiladas por el mismo usuario es nece-sario que cuente con un certificado de desarrollador emitido por Apple Inc.

Para crear estas aplicaciones y probarlas en el dispositivo iOS se ha usado un certificado deestudiante gestionado por la Universidad de Sevilla y que permite probar aplicaciones perono enviarlas a la App Store, la tienda de aplicaciones para iOS.

Directorio Nombre de la App Códec

Codec711amr Codec 711 - AMR AMRCodecilbc Codec ilbc iLBCCodec723 Codec 723 G.723.1Codec729 Codec 729 G.729Codec729a Codec 729a G.729a

Cuadro A.1.1: Programas de medida de rendimiento

49

Page 56: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Directorio Nombre de la App Códec

Codec711amrnoescrito Codec 711 - AMR no write AMRCodecilbcnoescrito Codec ilbc no write iLBCCodec723noescrito Codec 723 no escrito G.723.1Codec729noescrito Codec 729 no escrito G.729Codec729anoescrito Codec 729a nw G.729a

Cuadro A.1.2: Programas de medida de gasto energético

Figura A.1.1: Captura de XCode

50

Page 57: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

parar la aplicación sólo hace falta que se pulse el botón de stop en XCode, deforma que se interrumpe la ejecución de la aplicación pero permanece instaladaen la memoria del dispositivo para ejecutarse cuando el usuario lo decida, aunqueno esté conectado al ordenador.

Los pasos de instalación descritos son los mismos para todas las aplicaciones.

51

Page 58: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Apéndice B

Código para la medida derendimiento - funcióngetrusage

B.1. getrusageLa función getrusage forma parte de la librería estándar GNU C, es una

contracción de get resource usage. getrusage guarda los datos de uso de recur-sos en una estructura rusage ambas están definidas en sys/resources.h[22].A continuación se explicará brevemente la composición de la estructura y lainformación relativa a la función:

Tipos de datos: struct rusage

Este tipo de datos almacena varios datos estadísticos sobre el uso de re-cursos. Al menos tiene los siguientes elementos

struct timeval ru_utime: Tiempo gastado ejecutando instruccio-nes de usuario.struct timeval ru_stime : Tiempo gastado en código del sistemaen nombre de los procesos.long int ru_maxrss : Tamaño máximo usado en kilobytes. Es decir,el máximo numero de kilobytes de memoria física que un proceso usasimultáneamente.long int ru_ixrss : Cantidad total de memoria usada por textoque se comparte entre procesos.long int ru_idrss : Cantidad total de memoria no compartida quese usa para guardar datos.long int ru_isrss : Cantidad de memoria no compartida usadapara la pila.long int ru_minflt : Número total de fallos de página que se hanservido sin requerir ninguna entrada/salida.

52

Page 59: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

long int ru_majflt : El número de fallos de página servidos ha-ciendo entrada/salida.long int ru_nswap : Número de veces en que los procesos hacenswap saliendo completamente de la memoria principal.long int ru_inblock : Número de veces que el sistema de archivotieen que leer de disco en nombre del proceso.long int ru_oublock : Número de veces que se escriben en disco ennombre del proceso.long int ru_msgsnd : Número de mensajes IPC enviadoslong int ru_msgrcv : Número de mensajes IPC recibidos.long int ru_nsignals : Número de señales recibidaslong int ru_nvcsw : Número de veces que se invoca voluntariamen-te un cambio de contexto.long int ru_nivcsw : Número de veces que un cambio de contextoinvoluntario tiene lugar.

Función: int getrusage (int processes, struct rusage *rusage)Esta función reporta el uso total de recursos de los procesos especificadospor processes y almacena en rusage la información.En la mayoría de los sistemas processes sólo tiene dos valores válidos:RUSAGE_SELF : Sólo el proceso actual.RUSAGE_CHILDREN : Todos los procesos hijos (directos e indirectos) que yaestén terminados.El valor devuelto por getrusage es 0 para éxito y -1 para error.EINVAL : El argumento processes no es válido.

B.2. Código consumoSegún las especificaciones vistas en la sección B.1 los parámetros más intere-

santes de rusage para nuestro propósito son ru_time y ru_stime. De estos dosparámetros se puede obtener el uso que ha hecho del procesador un proceso. Eneste caso sólo tomaremos una medida inicial y otra final justo antes y despuésdel bucle de procesado, restando las dos medidas obtendremos el tiempo quese ha dedicado a la ejecución del bucle que es la tarea en sí de codificación odescodificación, obteniendo una medida para cada proceso que se guardará enun archivo para su posterior tratamiento.

Los archivos consumo.m y consumo.h están inspirados en los archivos demismo nombre del proyecto anterior[23] y cumple el mismo propósito, saber eluso que hace del procesador las tareas de codificación y descodificación. Sin em-bargo los archivos han sido modificados para tener en cuenta que sólo se tomaráuna medida inicial y otra final en vez de un conjunto de medidas que se suman.Además la función se ha modificado para devolver un NSNumber1.

consumo.h1Una de las clases básicas de Objective-C

53

Page 60: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

1 /⇤2 ⇤ consumo . h3 ⇤4 ⇤ Created by Jorge Lopez on 19/11/09.5 ⇤ Modif ied by Pablo I s i d o r o Ca r r i l l o Alvarez6 ⇤7 ⇤/89 #inc lude <s td i o . h>

10 #inc lude <sys / t imes . h>11 #inc lude <s t d l i b . h>1213 #de f i n e TAM_MAX 10 /⇤ Struct S i z e ⇤/1415 NSNumber ⇤consumo ( s t r u c t rusage tabla_tiempos [ ] , i n t

n_tramas , char ⇤ f i chero_datos , long tot_smpo , charmodo , i n t i t e r a c i o n , f l o a t tiempoDeTrama ) ;

consumo.m

1 /⇤2 ⇤ consumo .m3 ⇤4 ⇤ Guarda en un f i c h e r o . dat l o s datos almacenados en un

s t r c u t rusage . Recibe5 ⇤ como parametros e l array con l o s datos ( s t r u c t rusage

tabla_tiempos [ ] ) , l a6 ⇤ l ong i tud de l array ( i n t n_tramas ) y e l nombre de l f i c h e r o .

dat que se c r ea ra7 ⇤ ( char ⇤ f i che ro s_dato s ) .8 ⇤9 ⇤ Created by Jorge Lopez on 19/11/09.

10 ⇤ Modif ied by Pablo Ca r r i l l o11 ⇤12 ⇤/1314 #inc lude "consumo . h"1516 NSNumber ⇤consumo ( s t r u c t rusage tabla_tiempos [ ] , i n t n_tramas ,

char ⇤ f i chero_datos , long tot_smpo , char modo , i n t i t e r a c i on, f l o a t tiempoDeTrama ) {

1718 FILE ⇤ f i c h e r o ;19 f l o a t t iempoProceso =tabla_tiempos [ 1 ] . ru_utime . tv_sec+(

double ) tabla_tiempos [ 1 ] . ru_utime . tv_usec /1000000 +20 tabla_tiempos [ 1 ] . ru_stime . tv_sec+(double ) tabla_tiempos [ 1 ] .

ru_stime . tv_usec /1000000 �21 ( tabla_tiempos [ 0 ] . ru_utime . tv_sec+(double ) tabla_tiempos [ 0 ] .

ru_utime . tv_usec /1000000 +22 tabla_tiempos [ 0 ] . ru_stime . tv_sec+(double ) tabla_tiempos [ 0 ] .

ru_stime . tv_usec /1000000) ;23

54

Page 61: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

2425 i f ( ( f i c h e r o=fopen ( f i chero_datos , " a+") ) ) {26 i f ( i t e r a c i o n ==1){27 f p r i n t f ( f i c h e r o , " i t e r . \tmodo\ttiempoCPU \ tmuestras

\ tsegundos de sonido por segundos de CPU\n") ;2829 }30 f p r i n t f ( f i c h e r o ," %d\ t %c\ t %f \ t %ld \ t \ t %f \n" ,

i t e r a c i on , modo , tiempoProceso , tot_smpo , tot_smpo⇤tiempoDeTrama/ tiempoProceso ) ;

313233 f c l o s e ( f i c h e r o ) ;343536 }37 e l s e {38 f p r i n t f ( s tde r r , "Error a l c r e a r e l a rch ivo . dat ") ;39 e x i t (6 ) ;40 }4142 re turn [NSNumber numberWithFloat : ( tot_smpo⇤tiempoDeTrama/

tiempoProceso ) ] ;43 }

B.3. Código modificado de los códecsEn esta sección primero se mostrará la clase códec común y de la que heredan

todos los códecs, para a continuación ver las clases creadas para cada uno deforma particular y se mostrarán las modificaciones efectuadas en el código dedemostración de cada códec para que tenga una interfaz común compatible conObjective-C.

B.3.1. Clase Codeccodec.h

1 //2 // Codec . h3 //4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 07/11/11.6 //7 //89 #import <Foundation/Foundation . h>

1011 @inte r f a c e Codec : NSObject12 {13 NSInteger a c t i vo ;14 NSString ⇤nombreCodec ;15 }16 @property ( nonatomic , r eadwr i t e ) NSInteger a c t i vo ;

55

Page 62: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

17 @property ( nonatomic , copy ) NSString ⇤nombreCodec ;18 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n ;

19 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntradas a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n ;

2021 � ( id ) initNombreCodec : ( NSString ⇤) nombre ac t i vo : ( NSInteger )

estado ;222324 @end

codec.m

1 //2 // Codec .m3 //4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 07/11/11.6 //7 //89 #import "Codec . h"

101112 @implementation Codec13 @synthes ize act ivo , nombreCodec ;1415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 ac t i vo =0;21 nombreCodec=@"codec " ;22 }2324 re turn s e l f ;25 }2627 � ( id ) initNombreCodec : ( NSString ⇤) nombre ac t i vo : ( NSInteger )

estado28 {29 [ super i n i t ] ;30 i f ( s e l f ) {31 [ s e l f setNombreCodec : nombre ] ;32 [ s e l f s e tAct ivo : estado ] ;33 }34 re turn s e l f ;35 }363738 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i n t e r a c i o n ;

56

Page 63: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

39 {40 //Este método se s ob r e e s c r i b e41 re turn n i l ;42 }43 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n ;

44 {45 //Este método se s ob r e e s c r i b e46 re turn n i l ;47 }48 @end

B.3.2. Códec AMREn esta subsección tenemos todas las modificaciones del códec AMR junto

con las clases creadas para invocarlo en todas las configuraciones del estudio.Primero veremos todas las clases relacionadas y al final los códigos modificadosque actúan como codificador y descodificador.

amr12.m

1 //2 // amr12 .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "amr12 . h"

10 #import "amr/amrdecoder . h"11 #import "amr/amrcoder . h"1213 @implementation amr121415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }242526 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

27 {28 char ⇤Argv [4 ]={" foo " ,"MR122" , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;29 i n t Argc=4;30 NSNumber ⇤ r e to rno=amrcoder (Argc , Argv , datos , i t e r a c i o n ) ;31 re turn re to rno ;

57

Page 64: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

32 }3334 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

35 {36 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;37 i n t Argc=3;38 re turn amrdecoder (Argc , Argv , datos , i t e r a c i o n ) ;39 }

amr74.m

1 //2 // amr74 .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "amr74 . h"

10 #import "amr/amrdecoder . h"11 #import "amr/amrcoder . h"1213 @implementation amr741415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }242526 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

27 {28 char ⇤Argv [4 ]={" foo " ,"MR74" , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;29 i n t Argc=4;30 NSNumber ⇤ r e to rno=amrcoder (Argc , Argv , datos , i t e r a c i o n ) ;31 re turn re to rno ;32 }3334 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

35 {36 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;37 i n t Argc=3;

58

Page 65: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

38 re turn amrdecoder (Argc , Argv , datos , i t e r a c i o n ) ;39 }40 @end

amr475.m

1 //2 // amr475 .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "amr475 . h"

10 #import "amr/amrdecoder . h"11 #import "amr/amrcoder . h"121314 @implementation amr4751516 � ( id ) i n i t17 {18 s e l f = [ super i n i t ] ;19 i f ( s e l f ) {20 // I n i t i a l i z a t i o n code here .21 }2223 re turn s e l f ;24 }252627 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

28 {29 char ⇤Argv [4 ]={" foo " ,"MR475" , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;30 i n t Argc=4;31 NSNumber ⇤ r e to rno=amrcoder (Argc , Argv , datos , i t e r a c i o n ) ;32 re turn re to rno ;33 }3435 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

36 {37 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;38 i n t Argc=3;39 re turn amrdecoder (Argc , Argv , datos , i t e r a c i o n ) ;40 }4142 @end

amr12vad.m

59

Page 66: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

1 //2 // amr12vad .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "amr12vad . h"

10 #import "amr/amrdecoder . h"11 #import "amr/amrcoder . h"1213 @implementation amr12vad14 � ( id ) i n i t15 {16 s e l f = [ super i n i t ] ;17 i f ( s e l f ) {18 // I n i t i a l i z a t i o n code here .19 }2021 re turn s e l f ;22 }232425 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

26 {27 char ⇤Argv [5 ]={" foo ","�dtx " ,"MR122" , [ archivoEntrada

UTF8String ] , [ a r ch i voSa l i da UTF8String ] } ;28 i n t Argc=5;29 NSNumber ⇤ r e to rno=amrcoder (Argc , Argv , datos , i t e r a c i o n ) ;30 re turn re to rno ;31 }3233 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

34 {35 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;36 i n t Argc=3;37 re turn amrdecoder (Argc , Argv , datos , i t e r a c i o n ) ;38 }394041 @end

amr74vad.m

1 //2 // amr74vad .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .

60

Page 67: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

7 //89 #import "amr74vad . h"

10 #import "amr/amrdecoder . h"11 #import "amr/amrcoder . h"121314 @implementation amr74vad15 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }242526 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

27 {28 char ⇤Argv [5 ]={" foo ","�dtx " ,"MR74" , [ archivoEntrada

UTF8String ] , [ a r ch i voSa l i da UTF8String ] } ;29 i n t Argc=5;30 NSNumber ⇤ r e to rno=amrcoder (Argc , Argv , datos , i t e r a c i o n ) ;31 re turn re to rno ;32 }3334 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

35 {36 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;37 i n t Argc=3;38 re turn amrdecoder (Argc , Argv , datos , i t e r a c i o n ) ;39 }40414243 @end

amr475vad.m

1 //2 // amr475vad .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "amr475vad . h"

10 #import "amr/amrdecoder . h"11 #import "amr/amrcoder . h"

61

Page 68: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

121314 @implementation amr475vad15 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }242526 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

27 {28 char ⇤Argv [5 ]={" foo ","�dtx " ,"MR475" , [ archivoEntrada

UTF8String ] , [ a r ch i voSa l i da UTF8String ] } ;29 i n t Argc=5;30 NSNumber ⇤ r e to rno=amrcoder (Argc , Argv , datos , i t e r a c i o n ) ;31 re turn re to rno ;32 }3334 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

35 {36 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;37 i n t Argc=3;38 re turn amrdecoder (Argc , Argv , datos , i t e r a c i o n ) ;39 }404142 @end

amrcoder.h

1 //2 // amrcoder . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_amrcoder_h

10 #de f i n e MultiCodec_amrcoder_h1112 #de f i n e TIEMPODETRAMAAMR 0.021314 NSNumber ⇤amrcoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n ) ;1516

62

Page 69: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

17 #end i f

amrcoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez .4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/6 /⇤7 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤8 ⇤9 ⇤ GSM AMR�NB speech codec R98 Vers ion 7 . 6 . 0 December

12 , 200110 ⇤ R99 Vers ion 3 . 3 . 011 ⇤ REL�4 Vers ion 4 . 1 . 012 ⇤13 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤14 ⇤15 ⇤ F i l e : coder . c16 ⇤ Purpose : Speech encoder main program .17 ⇤18 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤19 ⇤20 ⇤ Usage : coder sp e e ch_f i l e b i t s t r e am_f i l e21 ⇤22 ⇤ Format f o r sp e e ch_f i l e :23 ⇤ Speech i s read from a binary f i l e o f 16 b i t s data .24 ⇤25 ⇤ Format f o r b i t s t r e am_f i l e :26 ⇤ 1 word (2�byte ) f o r the TX frame type27 ⇤ ( s ee frame . h f o r p o s s i b l e va lue s )28 ⇤ 244 words (2�byte ) conta in ing 244 b i t s .29 ⇤ Bit 0 = 0x0000 and Bit 1 = 0x000130 ⇤ 1 word (2�byte ) f o r the mode i nd i c a t i o n31 ⇤ ( s ee mode . h f o r p o s s i b l e va lue s )32 ⇤ 4 words f o r fu tu r e use , cu r r en t l y wr i t t en as zero33 ⇤34 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤35 ⇤/3637 /⇤38 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤39 ⇤ INCLUDE FILES40 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤41 ⇤/42 #inc lude <s td i o . h>43 #inc lude <s t d l i b . h>44 #inc lude <s t r i n g . h>45 #inc lude <errno . h>46 #inc lude " typede f . h"47 #inc lude " cnst . h"48 #inc lude "n_proc . h"49 #inc lude "mode . h"50 #inc lude " frame . h"51 #inc lude " s t r f un c . h"52 #inc lude "sp_enc . h"

63

Page 70: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

53 #inc lude "pre_proc . h"54 #inc lude " sid_sync . h"55 #inc lude "vadname . h"56 #inc lude "e_homing . h"57 #inc lude "amrcoder . h"5859 /⇤ Funciones para tomar medidas de consumo ⇤/60 #inc lude " . . / consumo . h"6162 #i f d e f MMS_IO63 #de f i n e AMR_MAGIC_NUMBER "#!AMR\n"64 #de f i n e MAX_PACKED_SIZE (MAX_SERIAL_SIZE / 8 + 2)65 #end i f6667 const char coder_id [ ] = "@(#)$Id $ " ;6869 /⇤ frame s i z e in s e r i a l b i t s t ream f i l e ( frame type + s e r i a l

stream + f l a g s ) ⇤/70 #de f i n e SERIAL_FRAMESIZE (1+MAX_SERIAL_SIZE+5)7172 /⇤73 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤74 ⇤ LOCAL PROGRAM CODE75 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤76 ⇤/77 /⇤78 ⇤ read_mode read next mode from mode f i l e79 ⇤80 ⇤ r e turn 0 on succes s , EOF on end o f f i l e , 1 on other e r r o r81 ⇤/82 i n t read_mode (FILE ⇤ f i le_modes , enum Mode ⇤mode)83 {84 char buf [ 1 0 ] ;8586 i f ( f s c a n f ( f i le_modes , " %9s \n" , buf ) != 1) {87 i f ( f e o f ( f i le_modes ) )88 re turn EOF;8990 f p r i n t f ( s tde r r , "\ ne r ro r read ing mode con t r o l f i l e : %s \

n" ,91 s t r e r r o r ( er rno ) ) ;92 re turn 1 ;93 }9495 i f ( str2mode ( buf , mode) != 0 | | ⇤mode == MRDTX) {96 f p r i n t f ( s tde r r , "\ n inva l i d amr_mode found in mode

con t r o l f i l e : ’ %s ’ \ n" ,97 buf ) ;98 re turn 1 ;99 }

100101 re turn 0 ;102 }103104105 /⇤106 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤107 ⇤ MAIN PROGRAM108 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤109 ⇤/

64

Page 71: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

110 NSNumber ⇤amrcoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,i n t i t e r a c i o n )

111 {112 char ⇤progname = argv [ 0 ] ;113 char ⇤modeStr = NULL;114 char ⇤usedModeStr = NULL;115 char ⇤ f i leName = NULL;116 char ⇤modefileName = NULL;117 char ⇤ s e r i a lF i l eName = NULL;118119 FILE ⇤ f i l e_spe e ch = NULL; /⇤ F i l e o f speech data

⇤/120 FILE ⇤ f i l e _ s e r i a l = NULL; /⇤ F i l e o f coded b i t s

⇤/121 FILE ⇤ f i le_modes = NULL; /⇤ F i l e with mode

in fo rmat ion ⇤/122123 Word16 new_speech [L_FRAME] ; /⇤ Pointer to new speech

data ⇤/124 Word16 s e r i a l [SERIAL_FRAMESIZE ] ; /⇤ Output b i t s t ream

bu f f e r ⇤/125126 #i f d e f MMS_IO127 UWord8 packed_bits [MAX_PACKED_SIZE] ;128 Word16 packed_size ;129 #end i f130131 Word32 frame ;132 Word16 dtx = 0 ; /⇤ enable encoder DTX

⇤/133134 /⇤ changed eedodr ⇤/135 Word16 r e s e t_ f l a g ;136137 i n t i ;138 enum Mode mode ;139 enum Mode used_mode ;140 enum TXFrameType tx_type ;141142 i n t useModeFile = 0 ;143144 Speech_Encode_FrameState ⇤ speech_encoder_state = NULL;145 s id_syncState ⇤ s id_state = NULL;146147 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r l o s

datos de medida ⇤/148 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/149150 proc_head (" Encoder ") ;151 f p r i n t f ( s tde r r , "Code compiled with VAD opt ion : %s \n\n" ,

get_vadname ( ) ) ;152153 /⇤������������������������������������⇤154 ⇤ Process command l i n e opt ions

⇤155 ⇤������������������������������������⇤/156 whi l e ( argc > 1) {157 i f ( strcmp ( argv [ 1 ] , "�dtx ") == 0) {158 dtx = 1 ;

65

Page 72: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

159 } e l s e i f ( strncmp ( argv [ 1 ] , "�mode f i l e =", 10) == 0) {160 useModeFile = 1 ;161 modefileName = argv [ 1 ]+10 ;162 } e l s e163 break ;164 argc��;165 argv++;166 }167168 /⇤������������������������������������⇤169 ⇤ Check number o f arguments

⇤170 ⇤������������������������������������⇤/171 i f ( ( argc != 4 && ! useModeFile )172 | | ( argc != 3 && useModeFile ) )173 {174 f p r i n t f ( s tde r r ,175 " Usage : \ n\n"176 " %s [�dtx ] amr_mode spe e ch_f i l e

b i t s t r e am_f i l e \n\n"177 " or \n\n"178 " %s [�dtx ] �mode f i l e=mode_file sp e e ch_f i l e

b i t s t r e am_f i l e \n\n"179 " �dtx enab l e s DTX mode\n"180 " �mode f i l e=mode_file reads AMR modes from text f i l e ( one

l i n e per frame ) \n\n" ,181 progname , progname ) ;182 e x i t (1 ) ;183 }184185 /⇤������������������������������������⇤186 ⇤ Open mode f i l e or convert mode s t r i n g

⇤187 ⇤������������������������������������⇤/188 i f ( useModeFile ) {189 f i leName = argv [ 1 ] ;190 se r i a lF i l eName = argv [ 2 ] ;191192 /⇤ Open mode con t r o l f i l e ⇤/193 i f ( strcmp ( modefileName , "�") == 0) {194 f i le_modes = s td in ;195 }196 e l s e i f ( ( f i le_modes = fopen ( modefileName , " r t ") ) ==

NULL)197 {198 f p r i n t f ( s tde r r , "Error opening mode con t r o l f i l e %s

! ! \ n" ,199 modefileName ) ;200 e x i t (1 ) ;201 }202 f p r i n t f ( s tde r r , " Mode con t r o l f i l e : %s \n" ,

modefileName ) ;203204 } e l s e {205206 modeStr = argv [ 1 ] ;207 f i leName = argv [ 2 ] ;208 se r i a lF i l eName = argv [ 3 ] ;209210 /⇤ check and convert mode s t r i n g ⇤/

66

Page 73: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

211 i f ( str2mode (modeStr , &mode) != 0 && mode != MRDTX) {212 f p r i n t f ( s tde r r , " I nva l i d amr_mode s p e c i f i e d : ’ %s ’ \ n" ,213 modeStr ) ;214 e x i t (1 ) ;215 }216 }217218219 /⇤������������������������������������⇤220 ⇤ Open speech f i l e and r e s u l t f i l e ( output s e r i a l b i t stream

) ⇤221 ⇤������������������������������������⇤/222 i f ( strcmp ( fi leName , "�") == 0) {223 f i l e_spe e ch = s td in ;224 }225 e l s e i f ( ( f i l e_spe e ch = fopen ( fi leName , " rb ") ) == NULL)226 {227 f p r i n t f ( s tde r r , "Error opening input f i l e %s ! ! \ n" ,

f i leName ) ;228 e x i t (1 ) ;229 }230 f p r i n t f ( s tde r r , " Input speech f i l e : %s \n" , f i leName ) ;231232 i f ( strcmp ( ser ia lF i l eName , "�") == 0) {233 f i l e _ s e r i a l = stdout ;234 }235 e l s e i f ( ( f i l e _ s e r i a l = fopen ( ser ia lF i l eName , "wb") ) == NULL

)236 {237 f p r i n t f ( s tde r r , " Error opening output b i t s t ream f i l e %s

! ! \ n" , s e r i a lF i l eName ) ;238 e x i t (1 ) ;239 }240 f p r i n t f ( s tde r r , " Output b i t s t ream f i l e : %s \n" ,

s e r i a lF i l eName ) ;241242243 /⇤�������������������������������������⇤244 ⇤ I n i t i a l i s a t i o n o f the coder .

⇤245 ⇤�������������������������������������⇤/246 i f ( Speech_Encode_Frame_init(&speech_encoder_state , dtx , "

encoder ")247 | | s id_sync_init (&s id_state ) )248 e x i t (�1) ;249250 #i f d e f MMS_IO251 /⇤ wr i t e magic number to i nd i c a t e s i n g l e channel AMR f i l e

s t o rage format ⇤/252 fw r i t e (AMR_MAGIC_NUMBER, s i z e o f (UWord8) , s t r l e n (

AMR_MAGIC_NUMBER) , f i l e _ s e r i a l ) ;253 #end i f254255 /⇤�������������������������������������⇤256 ⇤ Process speech frame by frame

⇤257 ⇤�������������������������������������⇤/258 frame = 0 ;259260 /⇤ Medimos tiempo i n i c i a l ⇤/

67

Page 74: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

261 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;262263 whi l e ( f r ead ( new_speech , s i z e o f (Word16) , L_FRAME,

f i l e_spee ch ) == L_FRAME)264 {265 /⇤ read new mode s t r i n g from f i l e i f r equ i r ed ⇤/266 i f ( useModeFile ) {267 i n t r e s ;268 i f ( ( r e s = read_mode ( f i le_modes , &mode) ) == EOF) {269 f p r i n t f ( s tde r r , "\nend o f mode con t r o l f i l e

reached ") ;270 break ;271 } e l s e i f ( r e s == 1)272 e x i t (�1) ;273 }274275 frame++;276277 /⇤ zero f l a g s and parameter b i t s ⇤/278 f o r ( i = 0 ; i < SERIAL_FRAMESIZE; i++)279 s e r i a l [ i ] = 0 ;280281 /⇤ check f o r homing frame ⇤/282 r e s e t_ f l a g = encoder_homing_frame_test ( new_speech ) ;283284 /⇤ encode speech ⇤/285 Speech_Encode_Frame ( speech_encoder_state , mode ,286 new_speech , &s e r i a l [ 1 ] , &used_mode ) ;287288 /⇤ pr in t frame number and mode in fo rmat ion ⇤/289 mode2str (mode , &modeStr ) ;290 mode2str (used_mode , &usedModeStr ) ;291 i f ( ( frame %50) == 0) {292 f p r i n t f ( s tde r r , "\ rframe= %�8d mode= %�5s used_mode= %�5s

" ,293 frame , modeStr , usedModeStr ) ;294 }295296 /⇤ i n c lude frame type and mode in fo rmat ion in s e r i a l

b i t s t ream ⇤/297 sid_sync ( s id_state , used_mode , &tx_type ) ;298299 #i f n d e f MMS_IO300 s e r i a l [ 0 ] = tx_type ;301 i f ( tx_type != TX_NO_DATA) {302 s e r i a l [1+MAX_SERIAL_SIZE] = mode ;303 }304 e l s e {305 s e r i a l [1+MAX_SERIAL_SIZE] = �1;306 }307308 /⇤ wr i t e b i t s t ream to output f i l e ⇤/309 i f ( fw r i t e ( s e r i a l , s i z e o f (Word16) , SERIAL_FRAMESIZE,

f i l e _ s e r i a l )310 != SERIAL_FRAMESIZE) {311 f p r i n t f ( s tde r r , "\ ne r ro r wr i t i ng output f i l e : %s \n" ,312 s t r e r r o r ( er rno ) ) ;313 e x i t (�1) ;314 }315 #e l s e

68

Page 75: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

316317 packed_size = PackBits (used_mode , mode , tx_type , &s e r i a l

[ 1 ] , packed_bits ) ;318319 /⇤ wr i t e f i l e s t o rage format b i t s t ream to output f i l e ⇤/320 i f ( fw r i t e ( packed_bits , s i z e o f (UWord8) , packed_size ,

f i l e _ s e r i a l )321 != packed_size ) {322 f p r i n t f ( s tde r r , "\ ne r ro r wr i t i ng output f i l e : %s \n" ,323 s t r e r r o r ( er rno ) ) ;324 e x i t (�1) ;325 }326 #end i f327328 f f l u s h ( f i l e _ s e r i a l ) ;329330 /⇤ perform homing i f homing frame was detec ted at encoder

input ⇤/331 i f ( r e s e t_ f l a g != 0)332 {333 Speech_Encode_Frame_reset ( speech_encoder_state ) ;334 s id_sync_reset ( s id_state ) ;335 }336337 /⇤ Medimos tiempo de proceso de cada trama ⇤/338339 }340 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;341 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a l a

func ion consumo ⇤/342 /⇤ switch (mode) {343 case MR475 :344 i f ( dtx==1){345 f i chero_datos="amr475dtx . dat " ;346 }347 e l s e {348 f i chero_datos="amr475 . dat " ;349 }350 break ;351 case MR515 :352 i f ( dtx==1){353 f i chero_datos="amr515dtx . dat " ;354 }355 e l s e {356 f i chero_datos="amr515 . dat " ;357 }358 break ;359 case MR59:360 i f ( dtx==1){361 f i chero_datos="amr59dtx . dat " ;362 }363 e l s e {364 f i chero_datos="amr59 . dat " ;365 }366 break ;367 case MR67:368 i f ( dtx==1){369 f i chero_datos="amr67dtx . dat " ;370 }371 e l s e {

69

Page 76: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

372 f i chero_datos="amr67 . dat " ;373 }374 break ;375 case MR74:376 i f ( dtx==1){377 f i chero_datos="amr74dtx . dat " ;378 }379 e l s e {380 f i chero_datos="amr74 . dat " ;381 }382 break ;383 case MR795 :384 i f ( dtx==1){385 f i chero_datos="amr795dtx . dat " ;386 }387 e l s e {388 f i chero_datos="amr795 . dat " ;389 }390 break ;391 case MR102 :392 i f ( dtx==1){393 f i chero_datos="amr102dtx . dat " ;394 }395 e l s e {396 f i chero_datos="amr102 . dat " ;397 }398 break ;399 case MR122 :400 i f ( dtx==1){401 f i chero_datos="amr122dtx . dat " ;402 }403 e l s e {404 f i chero_datos="amr122 . dat " ;405 }406 break ;407 }408 ⇤/409410 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/411 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;412 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;413 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;414 NSNumber ⇤ l og=n i l ;415 log=consumo ( tabla_tiempos , 1 , datosSa l ida , frame , ’ c ’ ,

i t e r a c i on ,TIEMPODETRAMAAMR) ;416417418 f p r i n t f ( s tde r r , "\n %d frame ( s ) proce s s ed \n" , frame ) ;419420421 /⇤�������������������������������������⇤422 ⇤ Close down speech coder

⇤423 ⇤�������������������������������������⇤/424 Speech_Encode_Frame_exit(&speech_encoder_state ) ;425 sid_sync_exit (&s id_state ) ;426427

70

Page 77: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

428 re turn log ;429 }

amrdecoder.h

1 //2 // amrdecoder . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 12/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_amrdecoder_h

10 #de f i n e MultiCodec_amrdecoder_h1112 #de f i n e TIEMPODETRAMAAMR 0.021314 NSNumber ⇤amrdecoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n ) ;1516 #end i f

amrdecoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤8 ⇤9 ⇤ GSM AMR�NB speech codec R98 Vers ion 7 . 6 . 0 December

12 , 200110 ⇤ R99 Vers ion 3 . 3 . 011 ⇤ REL�4 Vers ion 4 . 1 . 012 ⇤13 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤14 ⇤15 ⇤ F i l e : decoder . c16 ⇤ Purpose : Speech decoder main program .17 ⇤18 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤19 ⇤20 ⇤ Usage : decoder b i t s t r e am_f i l e syn th_f i l e21 ⇤22 ⇤23 ⇤ Format f o r b i t s t r e am_f i l e :24 ⇤ 1 word (2�byte ) f o r the frame type25 ⇤ ( s e e frame . h f o r p o s s i b l e va lue s )26 ⇤ Normally , the TX frame type i s expected .27 ⇤ RX frame type can be f o r c ed with "�rxframetype "

71

Page 78: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

28 ⇤ 244 words (2�byte ) conta in ing 244 b i t s .29 ⇤ Bit 0 = 0x0000 and Bit 1 = 0x000130 ⇤ 1 word (2�byte ) f o r the mode i nd i c a t i o n31 ⇤ ( s e e mode . h f o r p o s s i b l e va lue s )32 ⇤ 4 words f o r fu tu r e use , cu r r en t l y unused33 ⇤34 ⇤ Format f o r syn th_f i l e :35 ⇤ Synthes i s i s wr i t t en to a binary f i l e o f 16 b i t s

data .36 ⇤37 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤38 ⇤/3940 /⇤41 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤42 ⇤ INCLUDE FILES43 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤44 ⇤/45 #inc lude <s td i o . h>46 #inc lude <s t d l i b . h>47 #inc lude <s t r i n g . h>48 #inc lude <errno . h>49 #inc lude " typede f . h"50 #inc lude "n_proc . h"51 #inc lude " cnst . h"52 #inc lude "mode . h"53 #inc lude " frame . h"54 #inc lude " s t r f un c . h"55 #inc lude "sp_dec . h"56 #inc lude "d_homing . h"5758 #inc lude "amrdecoder . h"5960 /⇤ Funciones para tomar medidas de consumo ⇤/61 #inc lude " . . / consumo . h"6263 #i f d e f MMS_IO64 #de f i n e AMR_MAGIC_NUMBER "#!AMR\n"65 #de f i n e MAX_PACKED_SIZE (MAX_SERIAL_SIZE / 8 + 2)66 #end i f6768 const char decoder_id [ ] = "@(#)$Id $ " ;6970 /⇤ frame s i z e in s e r i a l b i t s t ream f i l e ( frame type + s e r i a l

stream + f l a g s ) ⇤/71 #de f i n e SERIAL_FRAMESIZE (1+MAX_SERIAL_SIZE+5)7273 /⇤74 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤75 ⇤ LOCAL PROGRAM CODE76 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤77 ⇤/78 s t a t i c enum RXFrameType tx_to_rx (enum TXFrameType tx_type )79 {80 switch ( tx_type ) {81 case TX_SPEECH_GOOD: return RX_SPEECH_GOOD;82 case TX_SPEECH_DEGRADED: return RX_SPEECH_DEGRADED;83 case TX_SPEECH_BAD: return RX_SPEECH_BAD;84 case TX_SID_FIRST: re turn RX_SID_FIRST;85 case TX_SID_UPDATE: re turn RX_SID_UPDATE;

72

Page 79: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

86 case TX_SID_BAD: return RX_SID_BAD;87 case TX_ONSET: re turn RX_ONSET;88 case TX_NO_DATA: return RX_NO_DATA;89 de f au l t :90 f p r i n t f ( s tde r r , "tx_to_rx : unknown TX frame type %d\n" ,

tx_type ) ;91 e x i t (1 ) ;92 }93 }9495 /⇤96 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤97 ⇤ MAIN PROGRAM98 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤99 ⇤/

100101 NSNumber ⇤amrdecoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )102 {103 Speech_Decode_FrameState ⇤ speech_decoder_state = NULL;104105 Word16 s e r i a l [SERIAL_FRAMESIZE ] ; /⇤ coded b i t s

⇤/106 Word16 synth [L_FRAME] ; /⇤ Synthes i s

⇤/107 Word32 frame ;108109 char ⇤progname = argv [ 0 ] ;110 char ⇤ f i leName = NULL;111 char ⇤ s e r i a lF i l eName = NULL;112113 FILE ⇤ f i l e_syn , ⇤ f i l e _ s e r i a l ;114115 i n t rxframetypeMode = 0 ; /⇤ use RX frame type codes

⇤/116 enum Mode mode = (enum Mode) 0 ;117 enum RXFrameType rx_type = (enum RXFrameType) 0 ;118 enum TXFrameType tx_type = (enum TXFrameType) 0 ;119120 Word16 r e s e t_ f l a g = 0 ;121 Word16 rese t_f lag_old = 1 ;122 Word16 i ;123124 #i f d e f MMS_IO125 UWord8 toc , q , f t ;126 Word8 magic [ 8 ] ;127 UWord8 packed_bits [MAX_PACKED_SIZE] ;128 Word16 packed_size [ 1 6 ] = {12 , 13 , 15 , 17 , 19 , 20 , 26 , 31 , 5 ,

0 , 0 , 0 , 0 , 0 , 0 , 0} ;129 #end i f130131 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r l o s

datos de medida ⇤/132 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/133 i n t dtx=0; /⇤ Bandera que i nd i c a e l uso de DTX ⇤/134135 proc_head (" Decoder ") ;136137 #i f n d e f MMS_IO

73

Page 80: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

138 /⇤������������������������������������⇤139 ⇤ proce s s command l i n e opt ions

⇤140 ⇤������������������������������������⇤/141 whi l e ( argc > 1) {142 i f ( strcmp ( argv [ 1 ] , "�rxframetype ") == 0)143 rxframetypeMode = 1 ;144 e l s e break ;145146 argc��;147 argv++;148 }149 #end i f150151 /⇤������������������������������������⇤152 ⇤ check number o f arguments

⇤153 ⇤������������������������������������⇤/154 i f ( argc != 3)155 {156 f p r i n t f ( s tde r r ,157 " Usage : \ n\n"158 #i f n d e f MMS_IO159 " %s [� rxframetype ] b i t s t r e am_f i l e syn th_f i l e \n\n"160 " �rxframetype expect s the RX frame type in

b i t s t r e am_f i l e ( i n s t ead o f TX) \n\n" ,161 #e l s e162 " %s b i t s t r e am_f i l e syn th_f i l e \n\n" ,163 #end i f164 progname ) ;165 e x i t (1 ) ;166 }167168 se r i a lF i l eName = argv [ 1 ] ;169 f i leName = argv [ 2 ] ;170171 /⇤������������������������������������⇤172 ⇤ Open s e r i a l b i t stream and output speech f i l e

⇤173 ⇤������������������������������������⇤/174 i f ( strcmp ( ser ia lF i l eName , "�") == 0) {175 f i l e _ s e r i a l = s td in ;176 }177 e l s e i f ( ( f i l e _ s e r i a l = fopen ( ser ia lF i l eName , " rb ") ) == NULL

)178 {179 f p r i n t f ( s tde r r , " Input f i l e ’ %s ’ does not e x i s t ! ! \ n" ,

s e r i a lF i l eName ) ;180 e x i t (0 ) ;181 }182 f p r i n t f ( s tde r r , " Input b i t s t ream f i l e : %s \n" ,

s e r i a lF i l eName ) ;183184 i f ( strcmp ( fi leName , "�") == 0) {185 f i l e_syn = stdout ;186 }187 e l s e i f ( ( f i l e_syn = fopen ( fi leName , "wb") ) == NULL)188 {189 f p r i n t f ( s tde r r , "Cannot c r e a t e output f i l e ’ %s ’ ! ! \ n" ,

f i leName ) ;

74

Page 81: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

190 e x i t (0 ) ;191 }192 f p r i n t f ( s tde r r , " Synthe s i s speech f i l e : %s \n" , f i leName ) ;193194 #i f d e f MMS_IO195 /⇤ read and v e r i f y magic number ⇤/196 f r ead ( magic , s i z e o f (Word8) , s t r l e n (AMR_MAGIC_NUMBER) ,

f i l e _ s e r i a l ) ;197 i f ( strncmp ( ( const char ⇤) magic , AMR_MAGIC_NUMBER, s t r l e n (

AMR_MAGIC_NUMBER) ) )198 {199 f p r i n t f ( s tde r r , " %s %s\n" , " Inva l i d magic number : " ,

magic ) ;200 f c l o s e ( f i l e _ s e r i a l ) ;201 f c l o s e ( f i l e_syn ) ;202 re turn 1 ;203 }204 #end i f205206 /⇤�������������������������������������⇤207 ⇤ I n i t i a l i z a t i o n o f decoder

⇤208 ⇤�������������������������������������⇤/209 i f ( Speech_Decode_Frame_init(&speech_decoder_state , "Decoder

") )210 e x i t (�1) ;211212 /⇤�������������������������������������⇤213 ⇤ proce s s s e r i a l b i t s t ream frame by frame

⇤214 ⇤�������������������������������������⇤/215 frame = 0 ;216217 /⇤ Medimos tiempo i n i c i a l ⇤/218 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;219220 #i f n d e f MMS_IO221 whi l e ( f r ead ( s e r i a l , s i z e o f (Word16) , SERIAL_FRAMESIZE,

f i l e _ s e r i a l )222 == SERIAL_FRAMESIZE)223 {224 /⇤ get frame type and mode in fo rmat ion from frame ⇤/225 i f ( rxframetypeMode ) {226 rx_type = (enum RXFrameType) s e r i a l [ 0 ] ;227 } e l s e {228 tx_type = (enum TXFrameType) s e r i a l [ 0 ] ;229 rx_type = tx_to_rx ( tx_type ) ;230 }231 mode = (enum Mode) s e r i a l [1+MAX_SERIAL_SIZE ] ;232233 #e l s e234235 whi l e ( f r ead (&toc , s i z e o f (UWord8) , 1 , f i l e _ s e r i a l ) == 1)236 {237 /⇤ read r e s t o f the frame based on ToC byte ⇤/238 q = ( toc >> 2) & 0x01 ;239 f t = ( toc >> 3) & 0x0F ;240 f r ead ( packed_bits , s i z e o f (UWord8) , packed_size [ f t ] ,

f i l e _ s e r i a l ) ;241

75

Page 82: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

242 rx_type = UnpackBits (q , f t , packed_bits , &mode , &s e r i a l[ 1 ] ) ;

243244 #end i f245246 ++frame ;247 i f ( ( frame %50) == 0) {248 f p r i n t f ( s tde r r , "\ rframe= %d " , frame ) ;249 }250251 i f ( rx_type == RX_NO_DATA) {252 mode = speech_decoder_state�>prev_mode ;253 }254 e l s e {255 speech_decoder_state�>prev_mode = mode ;256 }257258 /⇤ i f homed : check i f t h i s frame i s another homing frame

⇤/259 i f ( r e se t_f lag_old == 1)260 {261 /⇤ only check un t i l end o f f i r s t subframe ⇤/262 r e s e t_ f l a g = decoder_homing_frame_test_first(& s e r i a l

[ 1 ] , mode) ;263 }264 /⇤ produce encoder homing frame i f homed & input=decoder

homing frame ⇤/265 i f ( ( r e s e t_ f l a g != 0) && ( rese t_f lag_old != 0) )266 {267 f o r ( i = 0 ; i < L_FRAME; i++)268 {269 synth [ i ] = EHF_MASK;270 }271 }272 e l s e273 {274 /⇤ decode frame ⇤/275 Speech_Decode_Frame ( speech_decoder_state , mode , &

s e r i a l [ 1 ] ,276 rx_type , synth ) ;277 }278279 /⇤ wr i t e syn the s i z ed speech to f i l e ⇤/280 i f ( fw r i t e ( synth , s i z e o f (Word16) , L_FRAME, f i l e_syn ) !=

L_FRAME) {281 f p r i n t f ( s tde r r , "\ ne r ro r wr i t i ng output f i l e : %s \n" ,282 s t r e r r o r ( er rno ) ) ;283 } ;284 f f l u s h ( f i l e_syn ) ;285286 /⇤ i f not homed : check whether cur rent frame i s a homing

frame ⇤/287 i f ( r e se t_f lag_old == 0)288 {289 /⇤ check whole frame ⇤/290 r e s e t_ f l a g = decoder_homing_frame_test(& s e r i a l [ 1 ] ,

mode) ;291 }292 /⇤ r e s e t decoder i f cur r ent frame i s a homing frame ⇤/293 i f ( r e s e t_ f l a g != 0)

76

Page 83: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

294 {295 Speech_Decode_Frame_reset ( speech_decoder_state ) ;296 }297 rese t_f lag_old = re s e t_ f l a g ;298299 /⇤ Si nos encontramos con una trama SID sabemos que usa

DTX ⇤/300 i f ( rx_type==RX_SID_FIRST)301 dtx=1;302 /⇤ Medimos tiempo de proceso de cada trama ⇤/303304305 }306 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;307 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a l a

func ion consumo ⇤/308 /⇤ switch (mode) {309 case MR475 :310 i f ( dtx==1){311 f i chero_datos="amr475dtx . dat " ;312 }313 e l s e {314 f i chero_datos="amr475 . dat " ;315 }316 break ;317 case MR515 :318 i f ( dtx==1){319 f i chero_datos="amr515dtx . dat " ;320 }321 e l s e {322 f i chero_datos="amr515 . dat " ;323 }324 break ;325 case MR59:326 i f ( dtx==1){327 f i chero_datos="amr59dtx . dat " ;328 }329 e l s e {330 f i chero_datos="amr59 . dat " ;331 }332 break ;333 case MR67:334 i f ( dtx==1){335 f i chero_datos="amr67dtx . dat " ;336 }337 e l s e {338 f i chero_datos="amr67 . dat " ;339 }340 break ;341 case MR74:342 i f ( dtx==1){343 f i chero_datos="amr74dtx . dat " ;344 }345 e l s e {346 f i chero_datos="amr74 . dat " ;347 }348 break ;349 case MR795 :350 i f ( dtx==1){351 f i chero_datos="amr795dtx . dat " ;

77

Page 84: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

352 }353 e l s e {354 f i chero_datos="amr795 . dat " ;355 }356 break ;357 case MR102 :358 i f ( dtx==1){359 f i chero_datos="amr102dtx . dat " ;360 }361 e l s e {362 f i chero_datos="amr102 . dat " ;363 }364 break ;365 case MR122 :366 i f ( dtx==1){367 f i chero_datos="amr122dtx . dat " ;368 }369 e l s e {370 f i chero_datos="amr122 . dat " ;371 }372 break ;373 }⇤/374 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/375 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;376 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;377 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;378 NSNumber ⇤ l og=n i l ;379 log=consumo ( tabla_tiempos , 1 , datosSa l ida , frame , ’ d ’ ,

i t e r a c i on ,TIEMPODETRAMAAMR) ;380381382 f p r i n t f ( s tde r r , "\n %d frame ( s ) proce s s ed \n" , frame ) ;383384385 /⇤�������������������������������������⇤386 ⇤ Close down speech decoder

⇤387 ⇤�������������������������������������⇤/388 Speech_Decode_Frame_exit(&speech_decoder_state ) ;389390 re turn log ;391 }

B.3.3. Códec iLBCEn esta subsección tenemos todas las modificaciones del códec iLBC junto

con las clases creadas para invocarlo en todas las configuraciones del estudio.Primero veremos todas las clases relacionadas y al final los códigos modificadosque actúan como codificador y descodificador.

ilbc20.m

1 //2 // i l b c 2 0 .m

78

Page 85: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 28/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import " i l b c 2 0 . h"

10 #import " . / i l b c /iLBC_test_enc . h"11 #import " . / i l b c /iLBC_test_dec . h"1213 @implementation i l b c 2 01415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }2425 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

26 {27 char ⇤Argv [4 ]={" foo " , "20" , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;28 i n t Argc=4;29 NSNumber ⇤ r e to rno=iLBC_test_enc (Argc , Argv , datos , i t e r a c i o n

) ;30 re turn re to rno ;31 }3233 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

34 {35 char ⇤Argv [4 ]={" foo " , "20" , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;36 i n t Argc=4;37 re turn iLBC_test_dec (Argc , Argv , datos , i t e r a c i o n ) ;38 }3940 @end

ilbc30.m

1 //2 // i l b c 3 0 .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 28/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import " i l b c 3 0 . h"

79

Page 86: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

10 #import " . / i l b c /iLBC_test_enc . h"11 #import " . / i l b c /iLBC_test_dec . h"1213 @implementation i l b c 3 01415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }2425 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

26 {27 char ⇤Argv [4 ]={" foo " , "30" , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;28 i n t Argc=4;29 NSNumber ⇤ r e to rno=iLBC_test_enc (Argc , Argv , datos , i t e r a c i o n

) ;30 re turn re to rno ;31 }3233 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

34 {35 char ⇤Argv [4 ]={" foo " , "30" , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;36 i n t Argc=4;37 re turn iLBC_test_dec (Argc , Argv , datos , i t e r a c i o n ) ;38 }3940 @end

iLBC_test_enc.h

1 //2 // iLBC_test_enc . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 28/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_iLBC_test_enc_h

10 #de f i n e MultiCodec_iLBC_test_enc_h1112 // tiempos de trama13 #de f i n e TIEMPODETRAMAILBC20 0 .02014 #de f i n e TIEMPODETRAMAILBC30 0 .0301516

80

Page 87: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

17 NSNumber ⇤ iLBC_test_enc ( i n t argc , char ⇤argv [ ] , NSString ⇤datos , i n t i t e r a c i o n ) ;

1819 #end i f

iLBC_test_enc.m

1 /⇤2 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez3 ⇤/4 /⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤56 iLBC Speech Coder ANSI�C Source Code78 iLBC_test . c9

10 Copyright (C) The In t e rn e t Soc i e ty (2004) .11 Al l Rights Reserved .1213 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤/1415 #inc lude <math . h>16 #inc lude <s t d l i b . h>17 #inc lude <s td i o . h>18 #inc lude <s t r i n g . h>19 #inc lude " iLBC_define . h"20 #inc lude "iLBC_encode . h"21 #inc lude "iLBC_decode . h"22 #inc lude "iLBC_test_enc . h"2324 /⇤ Runtime s t a t i s t i c s ⇤/25 #inc lude <time . h>2627 /⇤ Funciones para tomar medidas de consumo ⇤/28 #inc lude " . . / consumo . h"2930 #de f i n e ILBCNOOFWORDS_MAX (NO_OF_BYTES_30MS/2)3132 /⇤�����������������������������������������������⇤33 ⇤ Encoder i n t e r f a c e func t i on343536373839 ⇤����������������������������������������������⇤/4041 shor t encode ( /⇤ ( o ) Number o f bytes encoded ⇤/42 iLBC_Enc_Inst_t ⇤ iLBCenc_inst ,43 /⇤ ( i /o ) Encoder i n s t ance ⇤/44 shor t ⇤encoded_data , /⇤ ( o ) The encoded bytes ⇤/45 shor t ⇤data /⇤ ( i ) The s i g n a l b lock to

encode ⇤/46 ) {47 f l o a t b lock [BLOCKL_MAX] ;48 i n t k ;49

81

Page 88: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

50 /⇤ convert s i g n a l to f l o a t ⇤/5152 f o r ( k=0; k<iLBCenc_inst�>b lo ck l ; k++)53 block [ k ] = ( f l o a t ) data [ k ] ;5455 /⇤ do the ac tua l encoding ⇤/5657 iLBC_encode ( ( unsigned char ⇤) encoded_data , block ,

iLBCenc_inst ) ;585960 re turn ( iLBCenc_inst�>no_of_bytes ) ;61 }6263 /⇤�����������������������������������������������⇤64 ⇤ Decoder i n t e r f a c e func t i on65 ⇤����������������������������������������������⇤/6667 shor t decode ( /⇤ ( o ) Number o f decoded samples ⇤/68 iLBC_Dec_Inst_t ⇤ iLBCdec_inst , /⇤ ( i /o ) Decoder

i n s t anc e ⇤/69 shor t ⇤decoded_data , /⇤ ( o ) Decoded s i g n a l b lock

⇤/70 shor t ⇤encoded_data , /⇤ ( i ) Encoded bytes ⇤/71 shor t mode /⇤ ( i ) 0=PL, 1=Normal

⇤/72 ) {73 i n t k ;74 f l o a t decblock [BLOCKL_MAX] , dtmp ;7576 /⇤ check i f mode i s va l i d ⇤/7778 i f (mode<0 | | mode>1) {79 p r i n t f ("\nERROR � Wrong mode � 0 , 1 a l lowed \n") ;

e x i t (3 ) ; }8081 /⇤ do ac tua l decoding o f b lock ⇤/8283 iLBC_decode ( decblock , ( unsigned char ⇤) encoded_data ,84 iLBCdec_inst , mode) ;8586 /⇤ convert to shor t ⇤/878889909192 f o r ( k=0; k<iLBCdec_inst�>b lo ck l ; k++){93 dtmp=decblock [ k ] ;9495 i f (dtmp<MIN_SAMPLE)96 dtmp=MIN_SAMPLE;97 e l s e i f (dtmp>MAX_SAMPLE)98 dtmp=MAX_SAMPLE;99 decoded_data [ k ] = ( shor t ) dtmp ;

100 }101102 re turn ( iLBCdec_inst�>b lo ck l ) ;103 }104

82

Page 89: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

105 /⇤����������������������������������������������⇤106 ⇤ Main program to t e s t iLBC encoding and decoding107 ⇤108 ⇤ Usage :109 ⇤ exef i le_name . exe <i n f i l e > <by t e f i l e > <ou t f i l e > <

channel>110 ⇤111 ⇤ <i n f i l e > : Input f i l e , speech f o r encoder (16� b i t

pcm f i l e )112 ⇤ <by t e f i l e > : Bit stream output from the encoder113 ⇤ <ou t f i l e > : Output f i l e , decoded speech (16� b i t pcm

f i l e )114 ¡ ¡No hay que poner e l o u t f i l e en e l encoder por e s t a r

modi f icado ! !115 ⇤ <channel> : Bit e r r o r f i l e , op t i ona l (16� b i t )116 ⇤ 1 � Packet r e c e i v ed c o r r e c t l y117 ⇤ 0 � Packet Lost118 ⇤119 ⇤���������������������������������������������⇤/120121 NSNumber ⇤ iLBC_test_enc ( i n t argc , char ⇤argv [ ] , NSString ⇤

datos , i n t i t e r a c i o n )122 {123124 /⇤ Runtime s t a t i s t i c s ⇤/125126 f l o a t s t a r t t ime ;127 f l o a t runtime ;128 f l o a t outtime ;129130 FILE ⇤ i f i l e i d ,⇤ e f i l e i d ,⇤ o f i l e i d , ⇤ c f i l e i d ;131 shor t data [BLOCKL_MAX] ;132 shor t encoded_data [ILBCNOOFWORDS_MAX] , decoded_data [

BLOCKL_MAX] ;133 i n t l en ;134 shor t p l i , mode ;135 i n t blockcount = 0 ;136 i n t packe t l o s s count = 0 ;137138 /⇤ Create s t r u c t s ⇤/139 iLBC_Enc_Inst_t Enc_Inst ;140 iLBC_Dec_Inst_t Dec_Inst ;141142 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para

r e c o p i l a r l o s datos de medida ⇤/143 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que

se guardan l o s datos ⇤/144145146147 /⇤ get arguments and open f i l e s ⇤/148149 i f ( ( argc !=4) && ( argc !=5) ) {150 f p r i n t f ( s tde r r ,151 "\n⇤������������������������������⇤\n") ;152 f p r i n t f ( s tde r r ,153 " %s <20,30> input encoded decoded ( channel ) \n\n" ,154 argv [ 0 ] ) ;155 f p r i n t f ( s tde r r ,156 " mode : Frame s i z e f o r the encoding /decoding \n

83

Page 90: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

") ;157 f p r i n t f ( s tde r r ,158 " 20 � 20 ms\n") ;159 f p r i n t f ( s tde r r ,160 " 30 � 30 ms\n") ;161 f p r i n t f ( s tde r r ,162 " input : Speech f o r encoder (16� b i t pcm f i l e ) \n

") ;163 f p r i n t f ( s tde r r ,164 " encoded : Encoded b i t stream\n") ;165 f p r i n t f ( s tde r r ,166 " decoded : Decoded speech (16� b i t pcm f i l e ) \n") ;167 f p r i n t f ( s tde r r ,168 " channel : Packet l o s s pattern , op t i ona l (16� b i t )

\n") ;169 f p r i n t f ( s tde r r ,170 " 1 � Packet r e c e i v ed c o r r e c t l y \n")

;171 f p r i n t f ( s tde r r ,172 " 0 � Packet Lost \n") ;173 f p r i n t f ( s tde r r ,174 "⇤������������������������������⇤\n\n") ;175 e x i t (1 ) ;176 }177 mode=a to i ( argv [ 1 ] ) ;178 i f (mode != 20 && mode != 30) {179 f p r i n t f ( s tde r r , "Wrong mode %s , must be 20 , or 30\n" ,180 argv [ 1 ] ) ;181 e x i t (2 ) ;182 }183 i f ( ( i f i l e i d=fopen ( argv [ 2 ] , " rb ") ) == NULL) {184 f p r i n t f ( s tde r r , " Cannot open input f i l e %s \n" , argv

[ 2 ] ) ;185 e x i t (2 ) ; }186187 i f ( ( e f i l e i d=fopen ( argv [ 3 ] , "wb") ) == NULL) {188 f p r i n t f ( s tde r r , "Cannot open encoded f i l e %s \n" ,189 argv [ 3 ] ) ; e x i t (1 ) ; }190 // i f ( ( o f i l e i d=fopen ( argv [ 4 ] , "wb") ) == NULL) {191 // f p r i n t f ( s tde r r , "Cannot open decoded f i l e %s \n" ,192 // argv [ 4 ] ) ; e x i t (1 ) ; }193 i f ( argc==5) {194 i f ( ( c f i l e i d=fopen ( argv [ 4 ] , " rb ") ) == NULL) {195 f p r i n t f ( s tde r r , "Cannot open channel f i l e %s \n" ,

argv [ 4 ] ) ;196 e x i t (1 ) ;197 }198 } e l s e {199 c f i l e i d=NULL;200 }201202 /⇤ pr in t i n f o ⇤/203204 f p r i n t f ( s tde r r , "\n") ;205 f p r i n t f ( s tde r r ,206 "⇤����������������������������������⇤\n") ;207 f p r i n t f ( s tde r r ,208 "⇤

⇤\n") ;

84

Page 91: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

209 f p r i n t f ( s tde r r ,210 "⇤ iLBC t e s t program

⇤\n") ;211 f p r i n t f ( s tde r r ,212 "⇤

⇤\n") ;213 f p r i n t f ( s tde r r ,214 "⇤

⇤\n") ;215 f p r i n t f ( s tde r r ,216 "⇤����������������������������������⇤\n") ;217 f p r i n t f ( s tde r r , "\nMode : %2d ms\n" , mode) ;218 f p r i n t f ( s tde r r , " Input f i l e : %s \n" , argv [ 2 ] ) ;219 f p r i n t f ( s tde r r , " Encoded f i l e : %s \n" , argv [ 3 ] ) ;220 // f p r i n t f ( s tde r r , " Output f i l e : %s \n" , argv [ 4 ] ) ;221 i f ( argc==5) {222 f p r i n t f ( s tde r r , " Channel f i l e : %s \n" , argv [ 4 ] ) ;223 }224 f p r i n t f ( s tde r r , "\ n") ;225226 /⇤ I n i t i a l i z a t i o n ⇤/227228 in i tEncode (&Enc_Inst , mode) ;229 in i tDecode (&Dec_Inst , mode , 1) ;230231 /⇤ Runtime s t a t i s t i c s ⇤/232233 s t a r t t ime=c lock ( ) /( f l o a t )CLOCKS_PER_SEC;234235 /⇤ loop over input b locks ⇤/236237 /⇤ Medimos tiempo i n i c i a l ⇤/238 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;239240 whi l e ( f r ead ( data , s i z e o f ( shor t ) , Enc_Inst . b lock l , i f i l e i d )

==241 Enc_Inst . b l o c k l ) {242243 blockcount++;244245 /⇤ encoding ⇤/246247248249250251 f p r i n t f ( s tde r r , "��� Encoding block %i ��� " ,

b lockcount ) ;252 l en=encode(&Enc_Inst , encoded_data , data ) ;253 f p r i n t f ( s tde r r , "\ r ") ;254255 /⇤ wr i t e byte f i l e ⇤/256257 fw r i t e ( encoded_data , s i z e o f ( unsigned char ) , len ,

e f i l e i d ) ;258259 /⇤ get channel data i f provided ⇤/260 i f ( argc==5) {

85

Page 92: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

261 i f ( f r ead (&p l i , s i z e o f ( shor t ) , 1 , c f i l e i d ) ) {262 i f ( ( p l i !=0)&&(p l i !=1) ) {263 f p r i n t f ( s tde r r , "Error in channel f i l e \n

") ;264 e x i t (0 ) ;265 }266 i f ( p l i==0) {267 /⇤ Packet l o s s �> remove i n f o from frame

⇤/268 memset ( encoded_data , 0 ,269 s i z e o f ( shor t ) ⇤ILBCNOOFWORDS_MAX) ;270 packe t l o s s count++;271 }272 } e l s e {273 f p r i n t f ( s tde r r , "Error . Channel f i l e too

shor t \n") ;274 e x i t (0 ) ;275 }276 } e l s e {277 p l i =1;278 }279280 /⇤ decoding ⇤/281 /⇤282 f p r i n t f ( s tde r r , "��� Decoding block %i ��� " ,

b lockcount ) ;283284 l en=decode(&Dec_Inst , decoded_data , encoded_data ,

p l i ) ;285 f p r i n t f ( s tde r r , "\ r ") ;286 ⇤/287 /⇤ wr i t e output f i l e ⇤/288 /⇤289 fw r i t e ( decoded_data , s i z e o f ( shor t ) , len , o f i l e i d ) ;290 ⇤/291 /⇤ Medimos tiempo de proceso de cada trama ⇤/292293 }294 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;295 //Esto no es n e c e s a r i o y l l e g a hasta e l s i g u i e n t e

comentario con dos //296 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a

l a func ion consumo ⇤/297 /⇤ i f (mode==20)298 f i chero_datos="i l b c 2 0 . dat " ;299 e l s e300 f i chero_datos="i l b c 3 0 . dat " ; ⇤/301 //Hasta aquí302303 //Es po s i b l e que deba qu i t a r l a s runtime s t a t i c i t i c s304305 /⇤ Runtime s t a t i s t i c s ⇤/306307 runtime = ( f l o a t ) ( c l o ck ( ) /( f l o a t )CLOCKS_PER_SEC�

s t a r t t ime ) ;308 outtime = ( f l o a t ) ( ( f l o a t ) b lockcount ⇤( f l o a t )mode/1000 .0 ) ;309 p r i n t f ("\n\nLength o f speech f i l e : %.1 f s \n" , outtime ) ;310 p r i n t f (" Packet l o s s : %.1 f % %\n" ,311 100 .0⇤ ( f l o a t ) packe t l o s s count /( f l o a t ) b lockcount ) ;312

86

Page 93: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

313314315316317 //Debemos preparar l a ruta de l a rch ivo de s a l i d a318319 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/320 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;321 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;322 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;323 NSNumber ⇤ l og=n i l ;324325 i f ( mode == 20) {326 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ c ’ , i t e r a c i on ,TIEMPODETRAMAILBC20) ;327 } e l s e {328 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ c ’ , i t e r a c i on ,TIEMPODETRAMAILBC30) ;329 }330331332 p r i n t f ("Time to run iLBC : " ) ;333 p r i n t f (" %.1 f s ( %.1 f % %of r ea l t ime ) \n\n" , runtime ,334 (100⇤ runtime/outtime ) ) ;335336 /⇤ c l o s e f i l e s ⇤/337338 f c l o s e ( i f i l e i d ) ;339 f c l o s e ( e f i l e i d ) ;340 // f c l o s e ( o f i l e i d ) ;341 i f ( argc==5) {342 f c l o s e ( c f i l e i d ) ;343 }344 re turn ( l og ) ;345 }

iLBC_test_dec.h

1 //2 // iLBC_test_dec . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 28/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_iLBC_test_dec_h

10 #de f i n e MultiCodec_iLBC_test_dec_h1112 // tiempos de trama13 #de f i n e TIEMPODETRAMAILBC20 0 .02014 #de f i n e TIEMPODETRAMAILBC30 0 .0301516

87

Page 94: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

17 NSNumber ⇤ iLBC_test_dec ( i n t argc , char ⇤argv [ ] , NSString ⇤datos , i n t i t e r a c i o n ) ;

181920 #end i f

iLBC_test_dec.m

1 /⇤2 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez3 ⇤/4 /⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤56 iLBC Speech Coder ANSI�C Source Code78 iLBC_test . c9

10 Copyright (C) The In t e rn e t Soc i e ty (2004) .11 Al l Rights Reserved .1213 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤/1415 #inc lude <math . h>16 #inc lude <s t d l i b . h>17 #inc lude <s td i o . h>18 #inc lude <s t r i n g . h>19 #inc lude " iLBC_define . h"20 #inc lude "iLBC_encode . h"21 #inc lude "iLBC_decode . h"22 #inc lude "iLBC_test_dec . h"2324 /⇤ Runtime s t a t i s t i c s ⇤/25 #inc lude <time . h>2627 /⇤ Funciones para tomar medidas de consumo ⇤/28 #inc lude " . . / consumo . h"2930 #de f i n e ILBCNOOFWORDS_MAX (NO_OF_BYTES_30MS/2)3132 /⇤�����������������������������������������������⇤33 ⇤ Encoder i n t e r f a c e func t i on343536373839 ⇤����������������������������������������������⇤/4041 s t a t i c shor t encode ( /⇤ ( o ) Number o f bytes encoded ⇤/42 iLBC_Enc_Inst_t ⇤ iLBCenc_inst ,43 /⇤ ( i /o ) Encoder i n s t ance ⇤/44 shor t ⇤encoded_data , /⇤ ( o ) The encoded bytes ⇤/45 shor t ⇤data /⇤ ( i ) The s i g n a l b lock to

encode ⇤/46 ) {47 f l o a t b lock [BLOCKL_MAX] ;48 i n t k ;

88

Page 95: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

4950 /⇤ convert s i g n a l to f l o a t ⇤/5152 f o r ( k=0; k<iLBCenc_inst�>b lo ck l ; k++)53 block [ k ] = ( f l o a t ) data [ k ] ;5455 /⇤ do the ac tua l encoding ⇤/5657 iLBC_encode ( ( unsigned char ⇤) encoded_data , block ,

iLBCenc_inst ) ;585960 re turn ( iLBCenc_inst�>no_of_bytes ) ;61 }6263 /⇤�����������������������������������������������⇤64 ⇤ Decoder i n t e r f a c e func t i on65 ⇤����������������������������������������������⇤/6667 s t a t i c shor t decode ( /⇤ ( o ) Number o f decoded samples

⇤/68 iLBC_Dec_Inst_t ⇤ iLBCdec_inst , /⇤ ( i /o ) Decoder

i n s t anc e ⇤/69 shor t ⇤decoded_data , /⇤ ( o ) Decoded s i g n a l b lock

⇤/70 shor t ⇤encoded_data , /⇤ ( i ) Encoded bytes ⇤/71 shor t mode /⇤ ( i ) 0=PL, 1=Normal

⇤/72 ) {73 i n t k ;74 f l o a t decblock [BLOCKL_MAX] , dtmp ;7576 /⇤ check i f mode i s va l i d ⇤/7778 i f (mode<0 | | mode>1) {79 p r i n t f ("\nERROR � Wrong mode � 0 , 1 a l lowed \n") ;

e x i t (3 ) ; }8081 /⇤ do ac tua l decoding o f b lock ⇤/8283 iLBC_decode ( decblock , ( unsigned char ⇤) encoded_data ,84 iLBCdec_inst , mode) ;8586 /⇤ convert to shor t ⇤/878889909192 f o r ( k=0; k<iLBCdec_inst�>b lo ck l ; k++){93 dtmp=decblock [ k ] ;9495 i f (dtmp<MIN_SAMPLE)96 dtmp=MIN_SAMPLE;97 e l s e i f (dtmp>MAX_SAMPLE)98 dtmp=MAX_SAMPLE;99 decoded_data [ k ] = ( shor t ) dtmp ;

100 }101102 re turn ( iLBCdec_inst�>b lo ck l ) ;

89

Page 96: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

103 }104105 /⇤����������������������������������������������⇤106 ⇤ Main program to t e s t iLBC encoding and decoding107 ⇤108 ⇤ Usage :109 ⇤ exef i le_name . exe <i n f i l e > <by t e f i l e > <ou t f i l e > <

channel>110 ⇤111 ¡ ¡No hay que poner e l i n f i l e en e l decoder por e s t a r

modi f icado ! !112 ⇤ <i n f i l e > : Input f i l e , speech f o r encoder (16� b i t

pcm f i l e )113 ⇤ <by t e f i l e > : Bit stream output from the encoder114 ⇤ <ou t f i l e > : Output f i l e , decoded speech (16� b i t pcm

f i l e )115 ⇤ <channel> : Bit e r r o r f i l e , op t i ona l (16� b i t )116 ⇤ 1 � Packet r e c e i v ed c o r r e c t l y117 ⇤ 0 � Packet Lost118 ⇤119 ⇤���������������������������������������������⇤/120121 NSNumber ⇤ iLBC_test_dec ( i n t argc , char ⇤argv [ ] , NSString ⇤

datos , i n t i t e r a c i o n )122 {123124 /⇤ Runtime s t a t i s t i c s ⇤/125126 f l o a t s t a r t t ime ;127 f l o a t runtime ;128 f l o a t outtime ;129130 FILE ⇤ i f i l e i d ,⇤ e f i l e i d ,⇤ o f i l e i d , ⇤ c f i l e i d ;131 shor t data [BLOCKL_MAX] ;132 shor t encoded_data [ILBCNOOFWORDS_MAX] , decoded_data [

BLOCKL_MAX] ;133 i n t l en ;134 shor t p l i , mode ;135 i n t blockcount = 0 ;136 i n t b loquesTota l e s =0;137 i n t bytesForFrame=0;138 i n t packe t l o s s count = 0 ;139140 /⇤ Create s t r u c t s ⇤/141 iLBC_Enc_Inst_t Enc_Inst ;142 iLBC_Dec_Inst_t Dec_Inst ;143144 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para

r e c o p i l a r l o s datos de medida ⇤/145 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que

se guardan l o s datos ⇤/146147148149 /⇤ get arguments and open f i l e s ⇤/150151 i f ( ( argc !=4) && ( argc !=5) ) {152 f p r i n t f ( s tde r r ,153 "\n⇤������������������������������⇤\n") ;154 f p r i n t f ( s tde r r ,

90

Page 97: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

155 " %s <20,30> input encoded decoded ( channel ) \n\n" ,156 argv [ 0 ] ) ;157 f p r i n t f ( s tde r r ,158 " mode : Frame s i z e f o r the encoding /decoding \n

") ;159 f p r i n t f ( s tde r r ,160 " 20 � 20 ms\n") ;161 f p r i n t f ( s tde r r ,162 " 30 � 30 ms\n") ;163 f p r i n t f ( s tde r r ,164 " input : Speech f o r encoder (16� b i t pcm f i l e ) \n

") ;165 f p r i n t f ( s tde r r ,166 " encoded : Encoded b i t stream\n") ;167 f p r i n t f ( s tde r r ,168 " decoded : Decoded speech (16� b i t pcm f i l e ) \n") ;169 f p r i n t f ( s tde r r ,170 " channel : Packet l o s s pattern , op t i ona l (16� b i t )

\n") ;171 f p r i n t f ( s tde r r ,172 " 1 � Packet r e c e i v ed c o r r e c t l y \n")

;173 f p r i n t f ( s tde r r ,174 " 0 � Packet Lost \n") ;175 f p r i n t f ( s tde r r ,176 "⇤������������������������������⇤\n\n") ;177 e x i t (1 ) ;178 }179 mode=a to i ( argv [ 1 ] ) ;180 i f (mode != 20 && mode != 30) {181 f p r i n t f ( s tde r r , "Wrong mode %s , must be 20 , or 30\n" ,182 argv [ 1 ] ) ;183 e x i t (2 ) ;184 }185 // i f ( ( i f i l e i d=fopen ( argv [ 2 ] , " rb ") ) == NULL) {186 // f p r i n t f ( s tde r r , " Cannot open input f i l e %s \n" , argv

[ 2 ] ) ;187 // e x i t (2 ) ; }188 //Debo mod i f i ca r l a forma de apertura de l a rch ivo intermedio189 i f ( ( e f i l e i d=fopen ( argv [ 2 ] , " rb ") ) == NULL) {190 f p r i n t f ( s tde r r , "Cannot open encoded f i l e %s \n" ,191 argv [ 2 ] ) ; e x i t (1 ) ; }192 i f ( ( o f i l e i d=fopen ( argv [ 3 ] , "wb") ) == NULL) {193 f p r i n t f ( s tde r r , "Cannot open decoded f i l e %s \n" ,194 argv [ 3 ] ) ; e x i t (1 ) ; }195 i f ( argc==5) {196 i f ( ( c f i l e i d=fopen ( argv [ 4 ] , " rb ") ) == NULL) {197 f p r i n t f ( s tde r r , "Cannot open channel f i l e %s \n" ,

argv [ 4 ] ) ;198 e x i t (1 ) ;199 }200 } e l s e {201 c f i l e i d=NULL;202 }203204 /⇤ pr in t i n f o ⇤/205206 f p r i n t f ( s tde r r , "\n") ;207 f p r i n t f ( s tde r r ,208 "⇤����������������������������������⇤\n") ;

91

Page 98: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

209 f p r i n t f ( s tde r r ,210 "⇤

⇤\n") ;211 f p r i n t f ( s tde r r ,212 "⇤ iLBC t e s t program

⇤\n") ;213 f p r i n t f ( s tde r r ,214 "⇤

⇤\n") ;215 f p r i n t f ( s tde r r ,216 "⇤

⇤\n") ;217 f p r i n t f ( s tde r r ,218 "⇤����������������������������������⇤\n") ;219 f p r i n t f ( s tde r r , "\nMode : %2d ms\n" , mode) ;220 // f p r i n t f ( s tde r r , " Input f i l e : %s \n" , argv [ 2 ] ) ;221 f p r i n t f ( s tde r r , " Encoded f i l e : %s \n" , argv [ 2 ] ) ;222 f p r i n t f ( s tde r r , " Output f i l e : %s \n" , argv [ 3 ] ) ;223 i f ( argc==5) {224 f p r i n t f ( s tde r r , " Channel f i l e : %s \n" , argv [ 4 ] ) ;225 }226 f p r i n t f ( s tde r r , "\ n") ;227228 /⇤ I n i t i a l i z a t i o n ⇤/229230 in i tEncode (&Enc_Inst , mode) ;231 in i tDecode (&Dec_Inst , mode , 1) ;232233 /⇤ Runtime s t a t i s t i c s ⇤/234235 s t a r t t ime=c lock ( ) /( f l o a t )CLOCKS_PER_SEC;236237 /⇤ loop over input b locks ⇤/238239 /⇤ Medimos tiempo i n i c i a l ⇤/240 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;241242 // Modi f ico e l bloque while , para saber cuanto dura l a

d e c od i f i c a c i ó n243 // s i e l modo es 20 304 b i t s por frame �> frame 160

muestras 16 b i t s 8kHz �> 38 bytes por frame244 // s i e l modo es 30 400 b i t s por frame �> frame 240

muestras 16 b i t s 8kHz �> 50 bytes por frame245246 i f (mode==20)247 {248 bytesForFrame=38;249 }250 e l s e251 {252 bytesForFrame=50;253 }254 // Divido l a l ong i tud en bytes de l a rch ivo c od i f i c ado por

l o s bytes por frame segun e l t i po de c o d i f i c a c i o n255 NSData ⇤ c od i f i c ado = [ NSData dataWithContentsOfFile : [

NSString stringWithUTF8String : argv [ 2 ] ] ] ;256 b loquesTota l e s =[ c od i f i c ado l ength ] / bytesForFrame ;

92

Page 99: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

257 whi l e ( blockcount<bloquesTota l e s ) {258259 blockcount++;260261 /⇤ encoding ⇤/262263264265266 /⇤267 f p r i n t f ( s tde r r , "��� Encoding block %i ��� " ,

b lockcount ) ;268 l en=encode(&Enc_Inst , encoded_data , data ) ;269 f p r i n t f ( s tde r r , "\ r ") ;270271 /⇤ wr i t e byte f i l e ⇤/272 /⇤273 fw r i t e ( encoded_data , s i z e o f ( unsigned char ) , len ,

e f i l e i d ) ;274275 /⇤ get channel data i f provided ⇤/276 /⇤277 i f ( argc==6) {278 i f ( f r ead (&p l i , s i z e o f ( shor t ) , 1 , c f i l e i d ) ) {279 i f ( ( p l i !=0)&&(p l i !=1) ) {280 f p r i n t f ( s tde r r , "Error in channel f i l e \n

") ;281 e x i t (0 ) ;282 }283 i f ( p l i==0) {284 /⇤ Packet l o s s �> remove i n f o from frame

⇤/285 /⇤286 memset ( encoded_data , 0 ,287 s i z e o f ( shor t ) ⇤ILBCNOOFWORDS_MAX) ;288 packe t l o s s count++;289 }290 } e l s e {291 f p r i n t f ( s tde r r , "Error . Channel f i l e too

shor t \n") ;292 e x i t (0 ) ;293 }294 } e l s e {295 p l i =1;296 }297 ⇤/298 //Pongo p l i =1 para no s imular perd ida de b i t s299 p l i =1;300 /⇤tomo l o s bytes de l archivo , l o de l 19 debo

cambiar lo según sea un t ipo de c o d i f i c a c i ó n uotra con una var i ab l e , e s 19 ⇤ e l tamaño de shor t16 b i t s ⇤/

301 f r ead ( encoded_data , s i z e o f ( unsigned char ) ,bytesForFrame , e f i l e i d ) ;

302 /⇤ decoding ⇤/303304 f p r i n t f ( s tde r r , "��� Decoding block %i ��� " ,

b lockcount ) ;305306 l en=decode(&Dec_Inst , decoded_data , encoded_data ,

93

Page 100: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

p l i ) ;307 f p r i n t f ( s tde r r , "\ r ") ;308309 /⇤ wr i t e output f i l e ⇤/310311 fw r i t e ( decoded_data , s i z e o f ( shor t ) , len , o f i l e i d ) ;312313 /⇤ Medimos tiempo de proceso de cada trama ⇤/314315 }316 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;317 //Esto no es n e c e s a r i o y l l e g a hasta e l s i g u i e n t e

comentario con dos //318 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a

l a func ion consumo ⇤/319 /⇤ i f (mode==20)320 f i chero_datos="i l b c 2 0 . dat " ;321 e l s e322 f i chero_datos="i l b c 3 0 . dat " ; ⇤/323 //Hasta aquí324325 //Es po s i b l e que deba qu i t a r l a s runtime s t a t i c i t i c s326327 /⇤ Runtime s t a t i s t i c s ⇤/328 runtime = ( f l o a t ) ( c l o ck ( ) /( f l o a t )CLOCKS_PER_SEC�

s t a r t t ime ) ;329 outtime = ( f l o a t ) ( ( f l o a t ) b lockcount ⇤( f l o a t )mode/1000 .0 ) ;330 p r i n t f ("\n\nLength o f speech f i l e : %.1 f s \n" , outtime ) ;331 p r i n t f (" Packet l o s s : %.1 f % %\n" ,332 100 .0⇤ ( f l o a t ) packe t l o s s count /( f l o a t ) b lockcount ) ;333334 //Debemos preparar l a ruta de l a rch ivo de s a l i d a335336 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/337 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains

( NSDocumentDirectory , NSUserDomainMask , YES) ;338 NSString ⇤documentsDirectory = [ paths objectAtIndex

: 0 ] ;339 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String] ;

340 NSNumber ⇤ l og=n i l ;341342 i f ( mode == 20) {343 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ d ’ , i t e r a c i on ,TIEMPODETRAMAILBC20) ;

344 } e l s e {345 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ d ’ , i t e r a c i on ,TIEMPODETRAMAILBC30) ;

346 }347348349350351352353354

94

Page 101: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

355 p r i n t f ("Time to run iLBC : " ) ;356 p r i n t f (" %.1 f s ( %.1 f % %of r ea l t ime ) \n\n" , runtime ,357 (100⇤ runtime/outtime ) ) ;358359 /⇤ c l o s e f i l e s ⇤/360361 // f c l o s e ( i f i l e i d ) ;362 f c l o s e ( e f i l e i d ) ;363 f c l o s e ( o f i l e i d ) ;364 i f ( argc==5) {365 f c l o s e ( c f i l e i d ) ;366 }367 re turn ( l og ) ;368 }

B.3.4. Códec G.723.1En esta subsección tenemos todas las modificaciones del códec G.723.1 junto

con las clases creadas para invocarlo en todas las configuraciones del estudio.Primero veremos todas las clases relacionadas y al final el código modificadoque actúa como codificador y descodificador.

g723_1_53.m

1 //2 // g723_1_53 .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 13/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g723_1_53 . h"

10 #import "g723 . h"1112 @implementation g723_1_531314 � ( id ) i n i t15 {16 s e l f = [ super i n i t ] ;17 i f ( s e l f ) {18 // I n i t i a l i z a t i o n code here .19 }2021 re turn s e l f ;22 }2324 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

25 {26 char ⇤Argv [5 ]={" foo ","�c","� r53 " , [ archivoEntrada UTF8String

] , [ a r ch i voSa l i da UTF8String ] } ;27 i n t Argc=5;28 NSNumber ⇤ r e to rno=g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;29 re turn re to rno ;

95

Page 102: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

30 }3132 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

33 {34 char ⇤Argv [5 ]={" foo ","�d","� r53 " , [ archivoEntrada UTF8String

] , [ a r ch i voSa l i da UTF8String ] } ;35 i n t Argc=5;36 re turn g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;37 }3839 @end

g723_1_63.m

1 //2 // g723_1_63 .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 18/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g723_1_63 . h"

10 #import "g723 . h"111213 @implementation g723_1_631415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }2425 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

26 {27 char ⇤Argv [5 ]={" foo ","�c","� r63 " , [ archivoEntrada UTF8String

] , [ a r ch i voSa l i da UTF8String ] } ;28 i n t Argc=5;29 NSNumber ⇤ r e to rno=g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;30 re turn re to rno ;31 }3233 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

34 {35 char ⇤Argv [5 ]={" foo ","�d","� r63 " , [ archivoEntrada UTF8String

] , [ a r ch i voSa l i da UTF8String ] } ;

96

Page 103: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

36 i n t Argc=5;37 re turn g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;38 }394041 @end

g723_1_53_VAD.m

1 //2 // g723_1_53_VAD.m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 18/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g723_1_53_VAD. h"

10 #import "g723 . h"1112 @implementation g723_1_53_VAD1314 � ( id ) i n i t15 {16 s e l f = [ super i n i t ] ;17 i f ( s e l f ) {18 // I n i t i a l i z a t i o n code here .19 }2021 re turn s e l f ;22 }232425 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

26 {27 char ⇤Argv [6 ]={" foo ","�c","� r53 ","�v " , [ archivoEntrada

UTF8String ] , [ a r ch i voSa l i da UTF8String ] } ;28 i n t Argc=6;29 NSNumber ⇤ r e to rno=g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;30 re turn re to rno ;31 }3233 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

34 {35 char ⇤Argv [5 ]={" foo ","�d","� r53 " , [ archivoEntrada UTF8String

] , [ a r ch i voSa l i da UTF8String ] } ;36 i n t Argc=5;37 re turn g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;38 }3940 @end

g723_1_63_VAD.m

97

Page 104: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

1 //2 // g723_1_63_VAD.m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 18/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g723_1_63_VAD. h"

10 #import "g723 . h"1112 @implementation g723_1_63_VAD1314 � ( id ) i n i t15 {16 s e l f = [ super i n i t ] ;17 i f ( s e l f ) {18 // I n i t i a l i z a t i o n code here .19 }2021 re turn s e l f ;22 }232425 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

26 {27 char ⇤Argv [6 ]={" foo ","�c","� r63 ","�v " , [ archivoEntrada

UTF8String ] , [ a r ch i voSa l i da UTF8String ] } ;28 i n t Argc=6;29 NSNumber ⇤ r e to rno=g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;30 re turn re to rno ;31 }3233 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

34 {35 char ⇤Argv [5 ]={" foo ","�d","� r63 " , [ archivoEntrada UTF8String

] , [ a r ch i voSa l i da UTF8String ] } ;36 i n t Argc=5;37 re turn g723_1 (Argc , Argv , datos , i t e r a c i o n ) ;38 }394041 @end

g723.h

1 //2 // g723 . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 18/11/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .

98

Page 105: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

7 //89 #i f n d e f MultiCodec_g723_h

10 #de f i n e MultiCodec_g723_h1112 #de f i n e TIEMPODETRAMAG723 0 .031314 NSNumber ⇤g723_1 ( i n t argc , char ⇤argv [ ] , NSString ⇤datos , i n t

i t e r a c i o n ) ;151617 long g723_Process_Files ( FILE ⇤⇤ I fp , FILE ⇤⇤Ofp , FILE ⇤⇤Fep ,

FILE ⇤⇤Ratp ,18 i n t Argc , char ⇤Argv [ ] ) ;1920 #end i f

g723.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤8 ⇤⇤9 ⇤⇤ F i l e : " lbccodec . c"

10 ⇤⇤11 ⇤⇤ Desc r ip t i on : Top�l e v e l source code f o r G. 7 2 3 . 1 dual�r a t e

codec12 ⇤⇤13 ⇤⇤ Functions : main14 ⇤⇤ Pro c e s s_ f i l e s ( )15 ⇤⇤16 ⇤⇤17 ⇤/181920 /⇤21 ITU�T G.723 . 1 Software Package Release 2 ( June 2006)2223 ITU�T G.723 . 1 Speech Coder ANSI�C Source Code Vers ion

5 .224 copyr ight ( c ) 1995 , AudioCodes , DSP Group , France Telecom ,25 Un iv e r s i t e de Sherbrooke . Al l r i g h t s r e s e rved .26 Last modi f i ed : March 200627 ⇤/28 #import "g723 . h"2930 #inc lude <s td i o . h>31 #inc lude <s t d l i b . h>32 #inc lude <s t r i n g . h>33 #inc lude <time . h>3435 #inc lude " typede f . h"36 #inc lude "basop . h"

99

Page 106: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

37 #inc lude " cst_lbc . h"38 #inc lude " tab_lbc . h"39 #inc lude " lbccodec . h"40 #inc lude " coder . h"41 #inc lude "decod . h"42 #inc lude " exc_lbc . h"43 #inc lude " u t i l_ lbc . h"44 #inc lude "cod_cng . h"45 #inc lude "dec_cng . h"46 #inc lude "vad . h"4748 /⇤ Funciones para tomar medidas de consumo ⇤/49 #inc lude " . . / consumo . h"5051 /⇤ Global v a r i a b l e s ⇤/52 enum Wmode WrkMode = Both ;53 enum Crate WrkRate = Rate63 ;5455 i n t PackedFrameSize [ 2 ] = {56 24 ,57 2058 } ;5960 Flag UseHp = True ;61 Flag UsePf = True ;62 Flag UseVx = False ;63 Flag UsePr = True ;6465 char SignOn [ ] = "ITU�T G.723 . 1 ANSI C FIXED POINT CODEC Ver

5 .2 ( Re lease 2 , June 2006) \n" ;6667 NSNumber ⇤g723_1 ( i n t argc , char ⇤argv [ ] , NSString ⇤datos , i n t

i t e r a c i o n )68 {69 FILE ⇤ I fp , ⇤Ofp ; /⇤ I /O F i l e po i n t e r s ⇤/70 FILE ⇤Fep = NULL; /⇤ Frame e r a su r e s f i l e

po in t e r ⇤/71 FILE ⇤Ratp = NULL; /⇤ Rate f i l e po in t e r ⇤/7273 long FrCnt = 0 ;74 long FlLen ;7576 Word16 DataBuff [ Frame ] ;77 Word16 Crc ;78 char Rate_Rd ;7980 char Line [ 2 4 ] ;8182 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/83 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/8485 p r i n t f (" %s " , SignOn ) ;8687 /⇤ Process arguments and open I /O f i l e s ⇤/88 FlLen = Proces s_Fi l e s ( &Ifp , &Ofp , &Fep , &Ratp , argc , argv

) ;8990 /⇤

100

Page 107: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

91 I n i t coder and the decoder92 ⇤/93 Init_Coder ( ) ;94 Init_Decod ( ) ;9596 /⇤ I n i t Comfort Noise Functions ⇤/97 i f ( UseVx ) {98 Init_Vad ( ) ;99 Init_Cod_Cng ( ) ;

100 }101 Init_Dec_Cng ( ) ;102103 /⇤ Medimos tiempo i n i c i a l ⇤/104 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;105106 /⇤ Process a l l the input f i l e ⇤/107 do {108109 switch ( WrkMode ) {110111 case Both :112 i f (Ratp != NULL) {113 f r ead ( ( char ⇤)&Rate_Rd , s i z e o f ( char ) , 1 ,

Ratp ) ;114 WrkRate = (enum Crate )Rate_Rd ;115 }116 i f ( WrkRate == Rate53 ) reset_max_time ( ) ;117 Read_lbc ( DataBuff , Frame , I f p ) ;118 Coder ( DataBuff , Line ) ;119 Decod ( DataBuff , Line , (Word16) 0 ) ;120 Write_lbc ( DataBuff , Frame , Ofp ) ;121 break ;122123 case Cod :124 i f (Ratp != NULL) {125 f r ead ( ( char ⇤)&Rate_Rd , s i z e o f ( char ) , 1 ,

Ratp ) ;126 WrkRate = (enum Crate )Rate_Rd ;127 }128 i f ( WrkRate == Rate53 ) reset_max_time ( ) ;129 Read_lbc ( DataBuff , Frame , I f p ) ;130 Coder ( DataBuff , Line ) ;131 Line_Wr( Line , Ofp ) ;132 break ;133134 case Dec :135 i f (Line_Rd( Line , I f p ) == (�1) ) {136 FlLen = FrCnt ;137 break ;138 }139 i f ( Fep == NULL )140 Crc = (Word16) 0 ;141 e l s e142 f r ead ( ( char ⇤)&Crc , s i z e o f (Word16) , 1 , Fep

) ;143 Decod ( DataBuff , Line , Crc ) ;144 Write_lbc ( DataBuff , Frame , Ofp ) ;145 break ;146 }147

101

Page 108: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

148 FrCnt ++ ;149 i f ( UsePr ) {150 i f ( WrkMode == Dec ) {151 i f ( FrCnt < FlLen ) {152 f p r i n t f ( stdout , "Done : %6ld \ r " , FrCnt ) ;153 }154 }155 e l s e {156 f p r i n t f ( stdout , "Done : %6ld %3ld \ r " , FrCnt ,

FrCnt⇤100/FlLen ) ;157 }158 f f l u s h ( stdout ) ;159 }160161 /⇤ Medimos tiempo de proceso de cada trama ⇤/162163164 } whi l e ( FrCnt < FlLen ) ;165 //pongo 1 porque s o l o hay dos medic iones , p r i n c i p i o y f i n a l

de l proceso166 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;167168 i f ( I f p ) { ( void ) f c l o s e ( I f p ) ; }169 i f (Ofp ) { ( void ) f c l o s e (Ofp ) ; }170 i f (Fep ) { ( void ) f c l o s e (Fep ) ; }171 i f (Ratp ) { ( void ) f c l o s e (Ratp ) ; }172173 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a l a

func ion consumo ⇤/174 /⇤ i f (WrkRate == Rate53 ) {175 f i chero_datos="g723_1_53 . dat " ;176 i f (UseVx) {177 f i chero_datos="g723_1_53_VAD. dat " ;178 }179 }180 e l s e {181 f i chero_datos="g723_1_63 . dat " ;182 i f (UseVx) {183 f i chero_datos="g723_1_63_VAD. dat " ;184 }185 }186 ⇤/187 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/188 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;189 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;190 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;191 NSNumber ⇤ l og=n i l ;192 i f ( WrkMode == Dec ) {193 log=consumo ( tabla_tiempos , 1 , datosSa l ida , FrCnt , ’ d ’ ,

i t e r a c i on ,TIEMPODETRAMAG723) ;194 } e l s e {195 log=consumo ( tabla_tiempos , 1 , datosSa l ida , FrCnt , ’ c ’ ,

i t e r a c i on ,TIEMPODETRAMAG723) ;196197 }198 re turn log ;199200 }

102

Page 109: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

201202203 /⇤204 This func t i on p r o c e s s e s the argument parameters . The

func t i on205 opens the IO f i l e s , and s e t s the g l oba l arguments

ac co rd ing ly206 to the command l i n e parameters .207 ⇤/208 long Proces s_Fi l e s ( FILE ⇤⇤ I fp , FILE ⇤⇤Ofp , FILE ⇤⇤Fep , FILE

⇤⇤Ratp ,209 i n t Argc , char ⇤Argv [ ]

)210 {211 i n t i ;212 long Flen ;213 char ⇤FerFileName = NULL ;214 char ⇤RateFileName = NULL ;215216 /⇤217 Process the argument l i s t , i f any218 ⇤/219 i f ( Argc < 3 ) {220 p r i n t f (" Usage : %s [ opt ions ] i n p u t f i l e o u t p u t f i l e \n" ,

Argv [ 0 ] ) ;221 e x i t (1 ) ;222 }223224 f o r ( i = 1 ; i < Argc�2 ; i ++ ) {225226 /⇤ Check the coder ra t e ⇤/227 i f ( ! strncmp ( "�r " , Argv [ i ] , 2) ) {228 i f ( ! strcmp ("63" , Argv [ i ]+2) ) {229 WrkRate = Rate63 ;230 cont inue ;231 }232233 e l s e i f ( ! strcmp ("53" , Argv [ i ]+2) ) {234 WrkRate = Rate53 ;235 cont inue ;236 }237238 e l s e {239 RateFileName = &Argv [ i ] [ 2 ] ;240 cont inue ;241 }242 }243244 /⇤ Check Working mode ⇤/245 i f ( ! strcmp("�b" , Argv [ i ] ) ) {246 WrkMode = Both ;247 cont inue ;248 }249250 i f ( ! strcmp("�c " , Argv [ i ] ) ) {251 WrkMode = Cod ;252 cont inue ;253 }254255 i f ( ! strcmp("�d" , Argv [ i ] ) ) {

103

Page 110: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

256 WrkMode = Dec ;257 cont inue ;258 }259260 i f ( ! strcmp("�v" , Argv [ i ] ) ) {261 UseVx = True ;262 cont inue ;263 }264265 i f ( ! strcmp("�Noh" , Argv [ i ] ) ) {266 UseHp = False ;267 cont inue ;268 }269270 i f ( ! strcmp("�Nop" , Argv [ i ] ) ) {271 UsePf = Fal se ;272 cont inue ;273 }274275 i f ( ! strncmp ( "� f " , Argv [ i ] , 2) ) {276 FerFileName = &Argv [ i ] [ 2 ] ;277 cont inue ;278 }279280 i f ( ! strcmp("�n" , Argv [ i ] ) ) {281 UsePr = False ;282 cont inue ;283 }284285 f p r i n t f ( s tde r r , " I l l e g a l argument , %s \n" , Argv [ i ] ) ;286 e x i t (1 ) ;287 }288289 ⇤ I f p = fopen ( Argv [ Argc�2] , " rb ") ;290 i f ( ⇤ I f p == NULL ) {291 f p r i n t f ( s tde r r , " I nva l i d input f i l e name : %s \n" , Argv [

Argc�2] ) ;292 e x i t (1 ) ;293 }294295 i f ( UsePr )296 p r i n t f (" Input f i l e : %s \n" , Argv [ Argc�2] ) ;297298 ⇤Ofp = fopen ( Argv [ Argc �1] , "wb") ;299 i f ( ⇤Ofp == NULL ) {300 f p r i n t f ( s tde r r , "Can ’ t open output f i l e : %s \n" , Argv [

Argc�1] ) ;301 e x i t (1 ) ;302 }303 i f ( UsePr )304 p r i n t f ("Output f i l e : %s \n" , Argv [ Argc�1] ) ;305306 /⇤ Open Fer f i l e i f r equ i r ed ⇤/307 i f ( WrkMode == Dec ) {308309 i f ( FerFileName != NULL ) {310 ⇤Fep = fopen ( FerFileName , " rb" ) ;311 i f ( ⇤Fep == NULL ) {312 f p r i n t f ( s tde r r , "Can ’ t open FER f i l e : %s \n" ,

FerFileName ) ;

104

Page 111: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

313 e x i t (1 ) ;314 }315 i f ( UsePr )316 p r i n t f ("FER f i l e : %s \n" , FerFileName ) ;317 }318 }319 e l s e {320 i f ( RateFileName != NULL ) {321 ⇤Ratp = fopen ( RateFileName , " rb" ) ;322 i f ( ⇤Ratp == NULL ) {323 f p r i n t f ( s tde r r , "Can ’ t open Rate f i l e : %s \n" ,

RateFileName ) ;324 e x i t (1 ) ;325 }326 i f ( UsePr )327 p r i n t f (" Rate f i l e : %s \n" , RateFileName )

;328 }329 }330331 /⇤ Options r epor t ⇤/332 i f ( UsePr ) {333334 p r i n t f (" Options : \ n") ;335 i f (WrkMode == Both )336 p r i n t f (" Encoder/Decoder\n") ;337 e l s e i f (WrkMode == Cod )338 p r i n t f (" Encoder\n") ;339 e l s e340 p r i n t f (" Decoder\n") ;341342343 i f ( WrkMode != Cod ) {344 i f ( UsePf == 0 )345 p r i n t f (" P o s t f i l t e r d i s ab l ed \n") ;346 e l s e347 p r i n t f (" P o s t f i l t e r enabled \n") ;348 }349350 i f ( WrkMode <= Cod ) {351 i f (⇤Ratp == NULL) {352 i f (WrkRate == Rate63 )353 p r i n t f (" Rate 6 .3 kb/ s \n") ;354 e l s e355 p r i n t f (" Rate 5 .3 kb/ s \n") ;356 }357 i f (UseHp == 0 )358 p r i n t f (" H i g hp a s s f i l t e r d i s ab l ed \n") ;359 e l s e360 p r i n t f (" H i g hp a s s f i l t e r enabled \n") ;361 i f (UseVx == 0 )362 p r i n t f ("VAD/CNG di sab l ed \n") ;363 e l s e364 p r i n t f ("VAD/CNG enabled \n") ;365 }366 }367368 /⇤369 Compute the f i l e l ength370 ⇤/

105

Page 112: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

371 f s e e k ( ⇤ I fp , 0L , SEEK_END ) ;372 Flen = f t e l l ( ⇤ I f p ) ;373 rewind ( ⇤ I f p ) ;374 i f ( WrkMode == Dec )375 Flen = 0 x 7 f f f f f f f L ;376 e l s e377 Flen /= s i z e o f (Word16) ⇤Frame ;378379 re turn Flen ;380 }

B.3.5. Códec G.729En este códec se presenta por separado las dos versiones de las que consta

pues son dos códigos de ejemplo diferentes los que se tienen para la versiónnormal y la simplificada

B.3.5.1. Versión normal

En esta subsubsección tenemos todas las modificaciones del códec iLBC juntocon las clases creadas para invocarlo en todas las configuraciones del estudio.Primero veremos todas las clases relacionadas y al final los códigos modificadosque actúan como codificador y descodificador.

g729.m

1 //2 // g729 .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 01/12/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g729 . h"

10 #import "g729b/ coder . h"11 #import "g729b/decoder . h"1213 @implementation g7291415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }242526 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

27 {

106

Page 113: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

28 char ⇤Argv [4 ]={" foo " , [ archivoEntrada UTF8String ] , [a r ch i voSa l i da UTF8String ] , " 0 " } ;

29 i n t Argc=4;30 NSNumber ⇤ r e to rno=g729coder (Argc , Argv , datos , i t e r a c i o n ) ;31 re turn re to rno ;32 }3334 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

35 {36 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;37 i n t Argc=3;38 re turn g729decoder (Argc , Argv , datos , i t e r a c i o n ) ;39 }4041 @end

g729b.m

1 //2 // g729b .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 07/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g729b . h"

10 #import "g729b/ coder . h"11 #import "g729b/decoder . h"121314 @implementation g729b15 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }242526 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

27 {28 char ⇤Argv [4 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] , " 1 " } ;29 i n t Argc=4;30 NSNumber ⇤ r e to rno=g729coder (Argc , Argv , datos , i t e r a c i o n ) ;31 re turn re to rno ;32 }33

107

Page 114: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

34 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntradas a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

35 {36 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;37 i n t Argc=3;38 re turn g729decoder (Argc , Argv , datos , i t e r a c i o n ) ;39 }40414243 @end

coder.h

1 //2 // g729coder . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 01/12/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_g729coder_h

10 #de f i n e MultiCodec_g729coder_h1112 #de f i n e TIEMPODETRAMAG729 0 .011314 NSNumber ⇤ g729coder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n ) ;1516 #end i f

coder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤9 ITU�T G.729 Speech Coder with Annex B ANSI�C Source Code

10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l15 Al l r i g h t s r e s e rved .16 ⇤/

108

Page 115: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

171819 /⇤��������������������������������������������������⇤20 ⇤ Main program of the ITU�T G.729 8 kb i t / s encoder .

⇤21 ⇤

⇤22 ⇤ Usage : coder sp e e ch_f i l e b i t s t r e am_f i l e

⇤23 ⇤��������������������������������������������������⇤/2425 #inc lude <s td i o . h>26 #inc lude <s t d l i b . h>2728 #inc lude " typede f . h"29 #inc lude "basic_op . h"30 #inc lude " ld8k . h"31 #inc lude "dtx . h"32 #inc lude " oc t e t . h"33 #inc lude " coder . h"3435 /⇤ Funciones para tomar medidas de consumo ⇤/36 #inc lude " . . / consumo . h"3738 NSNumber ⇤ g729coder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )39 {40 FILE ⇤ f_speech ; /⇤ F i l e o f speech data

⇤/41 FILE ⇤ f_ s e r i a l ; /⇤ F i l e o f s e r i a l b i t s f o r

t ransmi s s i on ⇤/4243 extern Word16 ⇤new_speech ; /⇤ Pointer to new speech data

⇤/4445 Word16 prm [PRM_SIZE+1] ; /⇤ Analys i s parameters .

⇤/46 Word16 s e r i a l [ SERIAL_SIZE ] ; /⇤ Output b i t s t ream bu f f e r

⇤/47 Word16 syn [L_FRAME] ; /⇤ Buf f e r f o r s yn th e s i s speech

⇤/4849 Word16 i , frame ; /⇤ frame counter ⇤/50 Word32 count_frame ;5152 /⇤ For G.729B ⇤/53 Word16 nb_words ;54 Word16 vad_enable ;5556 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/57 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/5859 p r i n t f ("\n") ;60 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729 8 KBIT/S SPEECH CODER

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;61 p r i n t f (" (WITH ANNEX B)

\n") ;

109

Page 116: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

62 p r i n t f ("\n") ;63 p r i n t f("������������������� Fixed po int C s imu la t i on

�����������������\n") ;64 p r i n t f ("\n") ;65 p r i n t f("������������ Vers ion 1 .5 ( Re lease 2 , November 2006)

����������\n") ;66 p r i n t f ("\n") ;676869 /⇤����������������������������������������⇤70 ⇤ Open speech f i l e and r e s u l t f i l e ( output s e r i a l b i t stream )

⇤71 ⇤����������������������������������������⇤/7273 i f ( argc != 4 )74 {75 p r i n t f (" Usage : %s spe e ch_f i l e b i t s t r e am_f i l e VAD_flag\

n" , argv [ 0 ] ) ;76 p r i n t f ("\n") ;77 p r i n t f ("Format f o r sp e e ch_f i l e : \ n") ;78 p r i n t f (" Speech i s read from a binary f i l e o f 16 b i t s

PCM data . \ n") ;79 p r i n t f ("\n") ;80 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;81 p r i n t f (" One (2�byte ) synchron i za t i on word \n") ;82 p r i n t f (" One (2�byte ) s i z e word , \ n") ;83 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;84 p r i n t f ("\n") ;85 p r i n t f ("VAD f l a g : \ n") ;86 p r i n t f (" 0 to d i s ab l e the VAD\n") ;87 p r i n t f (" 1 to enable the VAD\n") ;88 e x i t (1 ) ;89 }9091 i f ( ( f_speech = fopen ( argv [ 1 ] , " rb ") ) == NULL) {92 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;93 e x i t (0 ) ;94 }95 p r i n t f (" Input speech f i l e : %s \n" , argv [ 1 ] ) ;9697 i f ( ( f_ s e r i a l = fopen ( argv [ 2 ] , "wb") ) == NULL) {98 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 2 ] ) ;99 e x i t (0 ) ;

100 }101 p r i n t f (" Output b i t s t ream f i l e : %s \n" , argv [ 2 ] ) ;102103 vad_enable = (Word16) a t o i ( argv [ 3 ] ) ;104 i f ( vad_enable == 1)105 p r i n t f (" VAD enabled \n") ;106 e l s e107 p r i n t f (" VAD d i sab l ed \n") ;108109 #i f n d e f OCTET_TX_MODE110 p r i n t f (" OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;111 #end i f112113 /⇤����������������������������������������⇤114 ⇤ I n i t i a l i z a t i o n o f the coder .

110

Page 117: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

⇤115 ⇤����������������������������������������⇤/116117 Init_Pre_Process ( ) ;118 Init_Coder_ld8k ( ) ;119 f o r ( i =0; i<PRM_SIZE; i++) prm [ i ] = (Word16) 0 ;120121 /⇤ f o r G.729B ⇤/122 Init_Cod_cng ( ) ;123124 /⇤ To f o r c e the input and output to be time�a l i gned the

va r i a b l e SYNC125 has to be de f ined . Note : the t e s t v e c t o r s were generated

with t h i s opt ion126 d i s ab l ed127 ⇤/128129 #i f d e f SYNC130 /⇤ Read L_NEXT f i r s t speech data ⇤/131132 f r ead (&new_speech[�L_NEXT] , s i z e o f (Word16) , L_NEXT, f_speech )

;133 #i f d e f HARDW134 /⇤ s e t 3 LSB’ s to zero ⇤/135 f o r ( i =0; i < L_NEXT; i++)136 new_speech[�L_NEXT+i ] = new_speech[�L_NEXT+i ] & 0xFFF8 ;137 #end i f138 Pre_Process(&g729b_new_speech[�L_NEXT] , L_NEXT) ;139 #end i f140141 /⇤ Loop f o r each "L_FRAME" speech data . ⇤/142143 frame =0;144 count_frame = 0L ;145146 /⇤ Medimos tiempo i n i c i a l ⇤/147 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;148149 whi l e ( f r ead ( new_speech , s i z e o f (Word16) , L_FRAME, f_speech )

== L_FRAME)150 {151152 p r i n t f ("Frame = %d\ r " , count_frame++) ;153154 #i f d e f HARDW155 /⇤ s e t 3 LSB’ s to zero ⇤/156 f o r ( i =0; i < L_FRAME; i++) g729b_new_speech [ i ] =

g729b_new_speech [ i ] & 0xFFF8 ;157 #end i f158159 i f ( frame == 32767) frame = 256 ;160 e l s e frame++;161162 Pre_Process ( new_speech , L_FRAME) ;163164 Coder_ld8k (prm , syn , frame , vad_enable ) ;165166 prm2bits_ld8k ( prm , s e r i a l ) ;167168 nb_words = add ( (Word16) s e r i a l [ 1 ] , 2) ;

111

Page 118: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

169 fw r i t e ( s e r i a l , s i z e o f (Word16) , nb_words , f_ s e r i a l ) ;170171 }172 /⇤ Medimos tiempo f i n a l de proceso ⇤/173 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;174175 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/176 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;177 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;178 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;179 NSNumber ⇤ l og=n i l ;180 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame

, ’ c ’ , i t e r a c i on ,TIEMPODETRAMAG729) ;181182183 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;184185 re turn log ;186 }

decoder.h

1 //2 // g729decoder . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 01/12/11.6 // Copyright 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_g729decoder_h

10 #de f i n e MultiCodec_g729decoder_h1112 #de f i n e TIEMPODETRAMAG729 0 .011314 NSNumber ⇤ g729decoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n ) ;151617 #end i f

decoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤

112

Page 119: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

9 ITU�T G.729 Speech Coder with Annex B ANSI�C Source Code10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l15 Al l r i g h t s r e s e rved .16 ⇤/1718 /⇤������������������������������������������������⇤19 ⇤ Main program of the ITU�T G.729 8 kb i t / s decoder .

⇤20 ⇤

⇤21 ⇤ Usage : decoder b i t s t r e am_f i l e syn th_f i l e

⇤22 ⇤

⇤23 ⇤������������������������������������������������⇤/2425 #inc lude <s t d l i b . h>26 #inc lude <s td i o . h>2728 #inc lude " typede f . h"29 #inc lude "basic_op . h"30 #inc lude " ld8k . h"31 #inc lude "dtx . h"32 #inc lude " oc t e t . h"33 #inc lude " decoder . h"3435 /⇤ Funciones para tomar medidas de consumo ⇤/36 #inc lude " . . / consumo . h"3738 /⇤������������������������������������������������⇤39 ⇤ Main decoder rou t ine

⇤40 ⇤������������������������������������������������⇤/4142 NSNumber ⇤ g729decoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )43 {44 Word16 synth_buf [L_FRAME+M] , ⇤ synth ; /⇤ Synthe s i s

⇤/45 Word16 parm [PRM_SIZE+2] ; /⇤ Synthes i s parameters

⇤/46 Word16 Az_dec [MP1⇤2 ] , ⇤ptr_Az ; /⇤ Decoded Az f o r post� f i l t e r

⇤/47 Word16 T0_f i rst ; /⇤ Pitch lag in 1 s t subframe

⇤/48 Word16 pst_out [L_FRAME] ; /⇤ P o s t f i l t e r output

⇤/4950 Word16 vo i c i ng ; /⇤ vo i c i ng from prev ious frame

⇤/51 Word16 s f_vo ic ; /⇤ vo i c i ng f o r subframe

⇤/52

113

Page 120: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

53 Word16 i , Vad ;54 Word32 count_frame ;55 FILE ⇤ f_syn , ⇤ f_ s e r i a l ;5657 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/58 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/59 i n t vad_enable=0; /⇤ Bandera que i nd i c a e l uso de VAD ⇤/6061 p r i n t f ("\n") ;62 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729 8 KBIT/S SPEECH DECODER

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;63 p r i n t f (" (WITH ANNEX B)

\n") ;64 p r i n t f ("\n") ;65 p r i n t f("������������������� Fixed po int C s imu la t i on

�������������������\n") ;66 p r i n t f ("\n") ;67 p r i n t f("������������ Vers ion 1 .5 ( Re lease 2 , November 2006)

������������\n") ;68 p r i n t f ("\n") ;6970 /⇤ Passed arguments ⇤/7172 i f ( argc != 3 )73 {74 p r i n t f (" Usage : %s b i t s t r e am_f i l e output speech_f i l e \n" ,

argv [ 0 ] ) ;75 p r i n t f ("\n") ;76 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;77 p r i n t f (" One (2�byte ) synchron i za t i on word , \ n") ;78 p r i n t f (" One (2�byte ) s i z e word , \ n") ;79 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;80 p r i n t f ("\n") ;81 p r i n t f ("Format f o r output speech_f i l e : \ n") ;82 p r i n t f (" Output i s wr i t t en to a binary f i l e o f 16 b i t s

data . \ n") ;83 e x i t ( 1 ) ;84 }8586 /⇤ Open f i l e f o r s yn th e s i s and packed s e r i a l stream ⇤/8788 i f ( ( f_ s e r i a l = fopen ( argv [ 1 ] , " rb ") ) == NULL )89 {90 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;91 e x i t (0 ) ;92 }9394 i f ( ( f_syn = fopen ( argv [ 2 ] , "wb") ) == NULL )95 {96 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 2 ] ) ;97 e x i t (0 ) ;98 }99 p r i n t f (" Input b i t s t ream f i l e : %s \n" , argv [ 1 ] ) ;

100 p r i n t f (" Synthes i s speech f i l e : %s \n" , argv [ 2 ] ) ;101102 #i f n d e f OCTET_TX_MODE

114

Page 121: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

103 p r i n t f ("OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;104 #end i f105106 /⇤������������������������������������������������⇤107 ⇤ I n i t i a l i z a t i o n o f decoder

⇤108 ⇤������������������������������������������������⇤/109110 f o r ( i =0; i<M; i++) synth_buf [ i ] = 0 ;111 synth = synth_buf + M;112113 Init_Decod_ld8k ( ) ;114 In i t_Post_Fi l te r ( ) ;115 Init_Post_Process ( ) ;116 vo i c i ng = 60 ;117118 /⇤ f o r G.729b ⇤/119 Init_Dec_cng ( ) ;120121 /⇤������������������������������������������������⇤122 ⇤ Loop f o r each "L_FRAME" speech data

⇤123 ⇤������������������������������������������������⇤/124125 count_frame = 0L ;126127 /⇤ Medimos tiempo i n i c i a l ⇤/128 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;129130 whi l e ( read_frame ( f_s e r i a l , parm) != 0) {131132 p r i n t f ("Frame = %d\ r " , count_frame++) ;133134 Decod_ld8k (parm , vo ic ing , synth , Az_dec , &T0_first , &Vad) ;135136 /⇤ P o s t f i l t e r ⇤/137 vo i c i ng = 0 ;138 ptr_Az = Az_dec ;139 f o r ( i =0; i<L_FRAME; i+=L_SUBFR) {140 Post ( T0_first , &synth [ i ] , ptr_Az , &pst_out [ i ] , &sf_voic ,

Vad) ;141 i f ( s f_vo ic != 0) { vo i c i ng = sf_vo ic ; }142 ptr_Az += MP1;143 }144 Copy(&synth_buf [L_FRAME] , &synth_buf [ 0 ] , M) ;145146 Post_Process ( pst_out , L_FRAME) ;147148 #i f d e f HARDW149 {150 Word16 ⇤my_pt ;151 Word16 my_temp ;152 i n t my_i ;153 my_pt = pst_out ;154 f o r (my_i=0; my_i < L_FRAME; my_i++) {155 my_temp = ⇤my_pt ;156 my_temp = g729b_add ( my_temp, (Word16) 4) ; /⇤ Rounding

on 13 b i t ⇤/157 my_temp = my_temp & 0xFFF8 ; /⇤ mask on 13 b i t ⇤/158 ⇤my_pt++ = my_temp ;

115

Page 122: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

159 }160 }161 #end i f162163 fw r i t e ( pst_out , s i z e o f (Word16) , L_FRAME, f_syn ) ;164165 /⇤ Vemos s i se hace uso de VAD ⇤/166 i f ( ! Vad)167 vad_enable=1;168 /⇤ Medimos tiempo de proceso de cada trama ⇤/169 }170 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;171 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/172 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;173 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;174 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;175 NSNumber ⇤ l og=n i l ;176 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame , ’ d ’ ,

i t e r a c i on ,TIEMPODETRAMAG729) ;177178179 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;180181 re turn log ;182 }

B.3.5.2. Versión simplificada

En esta subsubsección tenemos todas las modificaciones del códec iLBC juntocon las clases creadas para invocarlo en todas las configuraciones del estudio.Primero veremos todas las clases relacionadas y al final los códigos modificadosque actúan como codificador y descodificador.

g729a.m

1 //2 // g729a .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 20/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g729a . h"

10 #import "g729ab/ g729acoder . h"11 #import "g729ab/ g729adecoder . h"1213 @implementation g729a14 � ( id ) i n i t15 {16 s e l f = [ super i n i t ] ;17 i f ( s e l f ) {18 // I n i t i a l i z a t i o n code here .19 }

116

Page 123: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

2021 re turn s e l f ;22 }232425 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a

: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

26 {27 char ⇤Argv [4 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] , " 0 " } ;28 i n t Argc=4;29 NSNumber ⇤ r e to rno=g729acoder (Argc , Argv , datos , i t e r a c i o n ) ;30 re turn re to rno ;31 }3233 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

34 {35 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;36 i n t Argc=3;37 re turn g729adecoder (Argc , Argv , datos , i t e r a c i o n ) ;38 }39404142 @end

g729ab.m

1 //2 // g729ab .m3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 20/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #import "g729ab . h"

1011 #import "g729ab/ g729acoder . h"12 #import "g729ab/ g729adecoder . h"13 @implementation g729ab1415 � ( id ) i n i t16 {17 s e l f = [ super i n i t ] ;18 i f ( s e l f ) {19 // I n i t i a l i z a t i o n code here .20 }2122 re turn s e l f ;23 }2425

117

Page 124: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

26 �(NSNumber ⇤) c od i f i c a rEnt rada : ( NSString ⇤) archivoEntrada s a l i d a: ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datos i t e r a r : (i n t ) i t e r a c i o n

27 {28 char ⇤Argv [4 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] , " 1 " } ;29 i n t Argc=4;30 NSNumber ⇤ r e to rno=g729acoder (Argc , Argv , datos , i t e r a c i o n ) ;31 re turn re to rno ;32 }3334 �(NSNumber ⇤) decod i f i c a rEnt rada : ( NSString ⇤) archivoEntrada

s a l i d a : ( NSString ⇤) a r ch i voSa l i da data : ( NSString ⇤) datosi t e r a r : ( i n t ) i t e r a c i o n

35 {36 char ⇤Argv [3 ]={" foo " , [ archivoEntrada UTF8String ] , [

a r ch i voSa l i da UTF8String ] } ;37 i n t Argc=3;38 re turn g729adecoder (Argc , Argv , datos , i t e r a c i o n ) ;39 }40414243 @end

g729acoder.h

1 //2 // g729acoder . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 14/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_g729acoder_h

10 #de f i n e MultiCodec_g729acoder_h11 #de f i n e TIEMPODETRAMAG729 0 .011213 NSNumber ⇤ g729acoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n ) ;141516 #end i f

g729acoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/6

118

Page 125: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

7 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤9 ITU�T G.729A Speech Coder with Annex B ANSI�C Source Code

10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l15 Al l r i g h t s r e s e rved .16 ⇤/1718 /⇤��������������������������������������������������⇤19 ⇤ Main program of the ITU�T G.729A 8 kb i t / s encoder .

⇤20 ⇤

⇤21 ⇤ Usage : coder sp e e ch_f i l e b i t s t r e am_f i l e

⇤22 ⇤��������������������������������������������������⇤/2324 #inc lude <s td i o . h>25 #inc lude <s t d l i b . h>2627 #inc lude " typede f . h"28 #inc lude "basic_op . h"29 #inc lude " ld8a . h"30 #inc lude "dtx . h"31 #inc lude " oc t e t . h"32 #inc lude " g729acoder . h"3334 /⇤ Funciones para tomar medidas de consumo ⇤/35 #inc lude " . . / consumo . h"3637 NSNumber ⇤ g729acoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )38 {39 FILE ⇤ f_speech ; /⇤ F i l e o f speech data

⇤/40 FILE ⇤ f_ s e r i a l ; /⇤ F i l e o f s e r i a l b i t s f o r

t ransmi s s i on ⇤/4142 extern Word16 ⇤new_speech ; /⇤ Pointer to new speech data

⇤/4344 Word16 prm [PRM_SIZE+1] ; /⇤ Analys i s parameters + frame

type ⇤/45 Word16 s e r i a l [ SERIAL_SIZE ] ; /⇤ Output b i t s t ream bu f f e r

⇤/4647 Word16 frame ; /⇤ frame counter ⇤/48 Word32 count_frame ;4950 /⇤ For G.729B ⇤/51 Word16 nb_words ;52 Word16 vad_enable ;5354 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/

119

Page 126: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

55 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que seguardan l o s datos ⇤/

5657 p r i n t f ("\n") ;58 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729A 8 KBIT/S SPEECH CODER

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;59 p r i n t f (" (WITH ANNEX B)

\n") ;60 p r i n t f ("\n") ;61 p r i n t f("������������������� Fixed po int C s imu la t i on

�����������������\n") ;62 p r i n t f ("\n") ;63 p r i n t f("������������ Vers ion 1 .5 ( Re lease 2 , November 2006)

����������\n") ;64 p r i n t f ("\n") ;656667 /⇤����������������������������������������⇤68 ⇤ Open speech f i l e and r e s u l t f i l e ( output s e r i a l b i t stream )

⇤69 ⇤����������������������������������������⇤/7071 i f ( argc != 4 ) {72 p r i n t f (" Usage : %s spe e ch_f i l e b i t s t r e am_f i l e VAD_flag\n" ,

argv [ 0 ] ) ;73 p r i n t f ("\n") ;74 p r i n t f ("Format f o r sp e e ch_f i l e : \ n") ;75 p r i n t f (" Speech i s read from a binary f i l e o f 16 b i t s PCM

data . \ n") ;76 p r i n t f ("\n") ;77 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;78 p r i n t f (" One (2�byte ) synchron i za t i on word \n") ;79 p r i n t f (" One (2�byte ) s i z e word , \ n") ;80 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;81 p r i n t f ("\n") ;82 p r i n t f ("VAD f l a g : \ n") ;83 p r i n t f (" 0 to d i s ab l e the VAD\n") ;84 p r i n t f (" 1 to enable the VAD\n") ;85 e x i t (1 ) ;86 }8788 i f ( ( f_speech = fopen ( argv [ 1 ] , " rb ") ) == NULL) {89 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;90 e x i t (0 ) ;91 }92 p r i n t f (" Input speech f i l e : %s \n" , argv [ 1 ] ) ;9394 i f ( ( f_ s e r i a l = fopen ( argv [ 2 ] , "wb") ) == NULL) {95 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 2 ] ) ;96 e x i t (0 ) ;97 }98 p r i n t f (" Output b i t s t ream f i l e : %s \n" , argv [ 2 ] ) ;99

100 vad_enable = (Word16) a t o i ( argv [ 3 ] ) ;101 i f ( vad_enable == 1)102 p r i n t f (" VAD enabled \n") ;103 e l s e104 p r i n t f (" VAD d i sab l ed \n") ;

120

Page 127: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

105106 #i f n d e f OCTET_TX_MODE107 p r i n t f (" OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;108 #end i f109110 /⇤����������������������������������������⇤111 ⇤ I n i t i a l i z a t i o n o f the coder .

⇤112 ⇤����������������������������������������⇤/113114 Init_Pre_Process ( ) ;115 Init_Coder_ld8a ( ) ;116 Set_zero (prm , PRM_SIZE+1) ;117118 /⇤ f o r G.729B ⇤/119 Init_Cod_cng ( ) ;120121122 /⇤ Loop f o r each "L_FRAME" speech data . ⇤/123124 frame = 0 ;125 count_frame = 0L ;126127 /⇤ Medimos tiempo i n i c i a l ⇤/128 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;129130 whi l e ( f r ead ( new_speech , s i z e o f (Word16) , L_FRAME, f_speech )

== L_FRAME)131 {132 p r i n t f ("Frame = %d\ r " , count_frame++) ;133134 i f ( frame == 32767) frame = 256 ;135 e l s e frame++;136137 Pre_Process ( new_speech , L_FRAME) ;138 Coder_ld8a (prm , frame , vad_enable ) ;139 prm2bits_ld8k ( prm , s e r i a l ) ;140 nb_words = s e r i a l [ 1 ] + (Word16) 2 ;141 fw r i t e ( s e r i a l , s i z e o f (Word16) , nb_words , f_ s e r i a l ) ;142143 }144 /⇤ Medimos tiempo f i n a l de proceso ⇤/145 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;146147 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/148 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;149 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;150 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;151 NSNumber ⇤ l og=n i l ;152 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame , ’ c ’ ,

i t e r a c i on ,TIEMPODETRAMAG729) ;153154155 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;156157 re turn log ;158 }

121

Page 128: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

g729adecoder.h

1 //2 // g729adecoder . h3 // MultiCodec4 //5 // Created by Pablo I s i d o r o Ca r r i l l o Alvarez on 14/12/11.6 // Copyright ( c ) 2011 __MyCompanyName__. Al l r i g h t s r e s e rved .7 //89 #i f n d e f MultiCodec_g729adecoder_h

10 #de f i n e MultiCodec_g729adecoder_h111213 #de f i n e TIEMPODETRAMAG729A 0.011415 NSNumber ⇤ g729adecoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos

, i n t i t e r a c i o n ) ;161718 #end i f

g729adecoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤9 ITU�T G.729A Speech Coder with Annex B ANSI�C Source Code

10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l15 Al l r i g h t s r e s e rved .16 ⇤/1718 /⇤������������������������������������������������⇤19 ⇤ Main program of the G.729A 8 .0 kb i t / s decoder .

⇤20 ⇤

⇤21 ⇤ Usage : decoder b i t s t r e am_f i l e syn th_f i l e

⇤22 ⇤

⇤23 ⇤������������������������������������������������⇤/2425 #inc lude <s t d l i b . h>

122

Page 129: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

26 #inc lude <s td i o . h>2728 #inc lude " typede f . h"29 #inc lude "basic_op . h"30 #inc lude " ld8a . h"31 #inc lude "dtx . h"32 #inc lude " oc t e t . h"33 #inc lude " g729adecoder . h"3435 /⇤ Funciones para tomar medidas de consumo ⇤/36 #inc lude " . . / consumo . h"3738 Word16 bad_lsf ; /⇤ bad LSF i nd i c a t o r ⇤/394041 /⇤42 This v a r i ab l e should be always s e t to zero un l e s s

t ransmi s s i on e r r o r s43 in LSP i nd i c e s are detec ted .44 This v a r i ab l e i s u s e f u l i f the channel coding de s i gne r

dec ide s to45 perform e r r o r check ing on these important parameters . I f an

e r r o r i s46 detec ted on the LSP ind i c e s , the cor re spond ing f l a g i s47 s e t to 1 s i g n a l l i n g to the decoder to perform parameter

s ub s t i t u t i o n .48 (The f l a g s should be s e t back to 0 f o r c o r r e c t t ransmi s s i on )

.49 ⇤/5051 /⇤������������������������������������������������⇤52 ⇤ Main decoder rou t ine

⇤53 ⇤������������������������������������������������⇤/5455 NSNumber ⇤ g729adecoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos

, i n t i t e r a c i o n )56 {57 Word16 synth_buf [L_FRAME+M] , ⇤ synth ; /⇤ Synthe s i s

⇤/58 Word16 parm [PRM_SIZE+2] ; /⇤ Synthe s i s parameters

⇤/59 Word16 Az_dec [MP1⇤ 2 ] ; /⇤ Decoded Az f o r post�

f i l t e r ⇤/60 Word16 T2 [ 2 ] ; /⇤ Pitch lag f o r 2

subframes ⇤/616263 Word16 i , Vad ;64 Word32 count_frame ;65 FILE ⇤ f_syn , ⇤ f_ s e r i a l ;6667 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/68 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/69 i n t vad_enable=0; /⇤ Bandera que i nd i c a e l uso de VAD ⇤/7071 p r i n t f ("\n") ;72 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729A 8 .0 KBIT/S SPEECH DECODER

123

Page 130: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;73 p r i n t f (" (WITH ANNEX B)

\n") ;74 p r i n t f ("\n") ;75 p r i n t f("������������������ Fixed po int C s imu la t i on

��������������������\n") ;76 p r i n t f ("\n") ;77 p r i n t f("������������� Vers ion 1 .5 ( Re lease 2 , November 2006)

������������\n") ;78 p r i n t f ("\n") ;7980 /⇤ Passed arguments ⇤/8182 i f ( argc != 3) {83 p r i n t f (" Usage : %s b i t s t r e am_f i l e output speech_f i l e \n" , argv

[ 0 ] ) ;84 p r i n t f ("\n") ;85 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;86 p r i n t f (" One (2�byte ) synchron i za t i on word \n") ;87 p r i n t f (" One (2�byte ) s i z e word , \ n") ;88 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;89 p r i n t f ("\n") ;90 p r i n t f ("Format f o r output speech_f i l e : \ n") ;91 p r i n t f (" Synthe s i s i s wr i t t en to a binary f i l e o f 16 b i t s

data . \ n") ;92 e x i t ( 1 ) ;93 }9495 /⇤ Open f i l e f o r s yn th e s i s and packed s e r i a l stream ⇤/9697 i f ( ( f_ s e r i a l = fopen ( argv [ 1 ] , " rb ") ) == NULL )98 {99 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;100 e x i t (0 ) ;101 }102103 i f ( ( f_syn = fopen ( argv [ 2 ] , "wb") ) == NULL )104 {105 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 2 ] ) ;106 e x i t (0 ) ;107 }108109 p r i n t f (" Input b i t s t ream f i l e : %s \n" , argv [ 1 ] ) ;110 p r i n t f (" Synthes i s speech f i l e : %s \n" , argv [ 2 ] ) ;111112 #i f n d e f OCTET_TX_MODE113 p r i n t f ("OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;114 #end i f115116 /⇤������������������������������������������������⇤117 ⇤ I n i t i a l i z a t i o n o f decoder

⇤118 ⇤������������������������������������������������⇤/119120 f o r ( i =0; i<M; i++) synth_buf [ i ] = 0 ;121 synth = synth_buf + M;122123 bad_lsf = 0 ; /⇤ I n i t i a l i z e bad LSF i nd i c a t o r ⇤/

124

Page 131: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

124 Init_Decod_ld8a ( ) ;125 In i t_Post_Fi l te r ( ) ;126 Init_Post_Process ( ) ;127128 /⇤ f o r G.729b ⇤/129 Init_Dec_cng ( ) ;130131 /⇤������������������������������������������������⇤132 ⇤ Loop f o r each "L_FRAME" speech data

⇤133 ⇤������������������������������������������������⇤/134135 count_frame = 0L ;136137 /⇤ Medimos tiempo i n i c i a l ⇤/138 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;139140 whi l e ( read_frame ( f_s e r i a l , parm) != 0)141 {142 p r i n t f ("Frame = %d\ r " , count_frame++) ;143144 Decod_ld8a (parm , synth , Az_dec , T2 , &Vad) ;145 Post_Fi l ter ( synth , Az_dec , T2 , Vad) ; /⇤ Post� f i l t e r

⇤/146 Post_Process ( synth , L_FRAME) ;147148 fw r i t e ( synth , s i z e o f ( shor t ) , L_FRAME, f_syn ) ;149150 /⇤ Vemos s i se hace uso de VAD ⇤/151 i f ( ! Vad)152 vad_enable=1;153 }154155 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;156 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/157 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;158 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;159 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;160 NSNumber ⇤ l og=n i l ;161 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame , ’ d ’ ,

i t e r a c i on ,TIEMPODETRAMAG729A) ;162163164 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;165166 re turn log ;167 }

125

Page 132: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

Apéndice C

Código para la medida degasto energético

C.1. Registro de la capacidad de bateríaDebido a las limitaciones de las APIs públicas documentadas para iOS, la

medida de la batería no puede hacerse de forma directa en mAh sino que debehacerse en porcentaje. Por otra parte el sistema no permite obtener una medidaexacta del porcentaje que se tiene de batería en un instante sino que redondeade 5 en 5%.

Sin embargo, el sistema provee de un evento que puede registrarse y quesucede cada vez que hay un salto, esta notificación puede registrarse con unamarca de tiempo y es el método que usaremos para obtener la pendiente dedescarga en % de la batería al ejecutar los distintos experimentos.

Los eventos generados así como la propiedad necesaria para activar los even-tos están documentados dentro de la clase UIDevice, a continuación se explicael funcionamiento de los eventos utilizados tal y como aparece en la documen-tación oficial de Apple Inc [24].

La clase UIDevice provee un singleton que representa el dispositivo, des-de esta clase se puede obtener información sobre el dispositivo como nombre,modelo, nombre del sistema operativo o versión. Además también puede obte-nerse información del dispositivo como la orientación o el estado de la bateríae incluso obtener información de los cambios de estas propiedades a través denotificaciones.

+currentDevice : devuelve un objeto que representa el dispositivo actual.

batteryLevel: propiedad de solo lectura que informa sobre el nivel de ba-tería.

batteryMonitoringEnabled: propiedad booleana, si está a YES se envíannotificaciones sobre los cambios en el nivel de batería o su estado.

126

Page 133: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

batteryState: propiedad de solo lectura que da información sobre el estadode la batería, siendo uno los posibles valores:

UIDeviceBatteryStateUnknown

UIDeviceBatteryStateUnplugged

UIDeviceBatteryStateCharging

UIDeviceBatteryStateFull

UIDeviceBatteryLevelDidChangeNotification: Si batteryMonitoringEnabledesta activado se envía una notificación, las notificaciones no se envían con másfrecuencia de un minuto. Para obtener el nivel de batería se debe acceder a lapropiedad batteryLevel.

UIDeviceBatteryStateDidChangeNotification: Si batteryMonitoringEnabledesta activado se envía una notificación, para obtener el estado se debe accedera la propiedad batteryState.

C.2. Código modificado de los códecsEn esta sección primero se mostrará los cambios hechos sobre las modifica-

ciones y el esquema de clases visto en el capítulo B para obtener las medidas degasto energético.

C.2.1. Códec AMREn esta subsección tenemos las modificaciones efectuadas al códec AMR

sobre las hechas en la subsección B.3.2, basicamente se usará el mismo códigopara las clases y las cabeceras y sólo se han hecho modificaciones en los códigosdel codificador y descodificador.

amrcoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/6 /⇤7 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤8 ⇤9 ⇤ GSM AMR�NB speech codec R98 Vers ion 7 . 6 . 0 December

12 , 200110 ⇤ R99 Vers ion 3 . 3 . 011 ⇤ REL�4 Vers ion 4 . 1 . 012 ⇤13 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤14 ⇤15 ⇤ F i l e : coder . c16 ⇤ Purpose : Speech encoder main program .17 ⇤

127

Page 134: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

18 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤19 ⇤20 ⇤ Usage : coder sp e e ch_f i l e b i t s t r e am_f i l e21 ⇤22 ⇤ Format f o r sp e e ch_f i l e :23 ⇤ Speech i s read from a binary f i l e o f 16 b i t s data .24 ⇤25 ⇤ Format f o r b i t s t r e am_f i l e :26 ⇤ 1 word (2�byte ) f o r the TX frame type27 ⇤ ( s ee frame . h f o r p o s s i b l e va lue s )28 ⇤ 244 words (2�byte ) conta in ing 244 b i t s .29 ⇤ Bit 0 = 0x0000 and Bit 1 = 0x000130 ⇤ 1 word (2�byte ) f o r the mode i nd i c a t i o n31 ⇤ ( s ee mode . h f o r p o s s i b l e va lue s )32 ⇤ 4 words f o r fu tu r e use , cu r r en t l y wr i t t en as zero33 ⇤34 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤35 ⇤/3637 /⇤38 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤39 ⇤ INCLUDE FILES40 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤41 ⇤/42 #inc lude <s td i o . h>43 #inc lude <s t d l i b . h>44 #inc lude <s t r i n g . h>45 #inc lude <errno . h>46 #inc lude " typede f . h"47 #inc lude " cnst . h"48 #inc lude "n_proc . h"49 #inc lude "mode . h"50 #inc lude " frame . h"51 #inc lude " s t r f un c . h"52 #inc lude "sp_enc . h"53 #inc lude "pre_proc . h"54 #inc lude " sid_sync . h"55 #inc lude "vadname . h"56 #inc lude "e_homing . h"57 #inc lude "amrcoder . h"5859 /⇤ Funciones para tomar medidas de consumo ⇤/60 #inc lude " . . / consumo . h"6162 #i f d e f MMS_IO63 #de f i n e AMR_MAGIC_NUMBER "#!AMR\n"64 #de f i n e MAX_PACKED_SIZE (MAX_SERIAL_SIZE / 8 + 2)65 #end i f6667 const char coder_id [ ] = "@(#)$Id $ " ;6869 /⇤ frame s i z e in s e r i a l b i t s t ream f i l e ( frame type + s e r i a l

stream + f l a g s ) ⇤/70 #de f i n e SERIAL_FRAMESIZE (1+MAX_SERIAL_SIZE+5)7172 /⇤73 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤74 ⇤ LOCAL PROGRAM CODE75 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤76 ⇤/

128

Page 135: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

77 /⇤78 ⇤ read_mode read next mode from mode f i l e79 ⇤80 ⇤ r e turn 0 on succes s , EOF on end o f f i l e , 1 on other e r r o r81 ⇤/82 i n t read_mode (FILE ⇤ f i le_modes , enum Mode ⇤mode)83 {84 char buf [ 1 0 ] ;8586 i f ( f s c a n f ( f i le_modes , " %9s \n" , buf ) != 1) {87 i f ( f e o f ( f i le_modes ) )88 re turn EOF;8990 f p r i n t f ( s tde r r , "\ ne r ro r read ing mode con t r o l f i l e : %s \

n" ,91 s t r e r r o r ( er rno ) ) ;92 re turn 1 ;93 }9495 i f ( str2mode ( buf , mode) != 0 | | ⇤mode == MRDTX) {96 f p r i n t f ( s tde r r , "\ n inva l i d amr_mode found in mode

con t r o l f i l e : ’ %s ’ \ n" ,97 buf ) ;98 re turn 1 ;99 }

100101 re turn 0 ;102 }103104105 /⇤106 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤107 ⇤ MAIN PROGRAM108 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤109 ⇤/110 NSNumber ⇤amrcoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )111 {112 char ⇤progname = argv [ 0 ] ;113 char ⇤modeStr = NULL;114 char ⇤usedModeStr = NULL;115 char ⇤ f i leName = NULL;116 char ⇤modefileName = NULL;117 char ⇤ s e r i a lF i l eName = NULL;118119 FILE ⇤ f i l e_spe e ch = NULL; /⇤ F i l e o f speech data

⇤/120 FILE ⇤ f i l e _ s e r i a l = NULL; /⇤ F i l e o f coded b i t s

⇤/121 FILE ⇤ f i le_modes = NULL; /⇤ F i l e with mode

in fo rmat ion ⇤/122123 Word16 new_speech [L_FRAME] ; /⇤ Pointer to new speech

data ⇤/124 Word16 s e r i a l [SERIAL_FRAMESIZE ] ; /⇤ Output b i t s t ream

bu f f e r ⇤/125126 #i f d e f MMS_IO127 UWord8 packed_bits [MAX_PACKED_SIZE] ;128 Word16 packed_size ;

129

Page 136: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

129 #end i f130131 Word32 frame ;132 Word16 dtx = 0 ; /⇤ enable encoder DTX

⇤/133134 /⇤ changed eedodr ⇤/135 Word16 r e s e t_ f l a g ;136137 i n t i ;138 enum Mode mode ;139 enum Mode used_mode ;140 enum TXFrameType tx_type ;141142 i n t useModeFile = 0 ;143144 Speech_Encode_FrameState ⇤ speech_encoder_state = NULL;145 s id_syncState ⇤ s id_state = NULL;146147 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r l o s

datos de medida ⇤/148 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/149150 proc_head (" Encoder ") ;151 f p r i n t f ( s tde r r , "Code compiled with VAD opt ion : %s \n\n" ,

get_vadname ( ) ) ;152153 /⇤������������������������������������⇤154 ⇤ Process command l i n e opt ions

⇤155 ⇤������������������������������������⇤/156 whi l e ( argc > 1) {157 i f ( strcmp ( argv [ 1 ] , "�dtx ") == 0) {158 dtx = 1 ;159 } e l s e i f ( strncmp ( argv [ 1 ] , "�mode f i l e =", 10) == 0) {160 useModeFile = 1 ;161 modefileName = argv [ 1 ]+10 ;162 } e l s e163 break ;164 argc��;165 argv++;166 }167168 /⇤������������������������������������⇤169 ⇤ Check number o f arguments

⇤170 ⇤������������������������������������⇤/171 i f ( ( argc != 4 && ! useModeFile )172 | | ( argc != 3 && useModeFile ) )173 {174 f p r i n t f ( s tde r r ,175 " Usage : \ n\n"176 " %s [�dtx ] amr_mode spe e ch_f i l e

b i t s t r e am_f i l e \n\n"177 " or \n\n"178 " %s [�dtx ] �mode f i l e=mode_file sp e e ch_f i l e

b i t s t r e am_f i l e \n\n"179 " �dtx enab l e s DTX mode\n"180 " �mode f i l e=mode_file reads AMR modes from text f i l e ( one

130

Page 137: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

l i n e per frame ) \n\n" ,181 progname , progname ) ;182 e x i t (1 ) ;183 }184185 /⇤������������������������������������⇤186 ⇤ Open mode f i l e or convert mode s t r i n g

⇤187 ⇤������������������������������������⇤/188 i f ( useModeFile ) {189 f i leName = argv [ 1 ] ;190 se r i a lF i l eName = argv [ 2 ] ;191192 /⇤ Open mode con t r o l f i l e ⇤/193 i f ( strcmp ( modefileName , "�") == 0) {194 f i le_modes = s td in ;195 }196 e l s e i f ( ( f i le_modes = fopen ( modefileName , " r t ") ) ==

NULL)197 {198 f p r i n t f ( s tde r r , "Error opening mode con t r o l f i l e %s

! ! \ n" ,199 modefileName ) ;200 e x i t (1 ) ;201 }202 f p r i n t f ( s tde r r , " Mode con t r o l f i l e : %s \n" ,

modefileName ) ;203204 } e l s e {205206 modeStr = argv [ 1 ] ;207 f i leName = argv [ 2 ] ;208 se r i a lF i l eName = argv [ 3 ] ;209210 /⇤ check and convert mode s t r i n g ⇤/211 i f ( str2mode (modeStr , &mode) != 0 && mode != MRDTX) {212 f p r i n t f ( s tde r r , " I nva l i d amr_mode s p e c i f i e d : ’ %s ’ \ n" ,213 modeStr ) ;214 e x i t (1 ) ;215 }216 }217218219 /⇤������������������������������������⇤220 ⇤ Open speech f i l e and r e s u l t f i l e ( output s e r i a l b i t stream

) ⇤221 ⇤������������������������������������⇤/222 i f ( strcmp ( fi leName , "�") == 0) {223 f i l e_spe e ch = s td in ;224 }225 e l s e i f ( ( f i l e_spe e ch = fopen ( fi leName , " rb ") ) == NULL)226 {227 f p r i n t f ( s tde r r , "Error opening input f i l e %s ! ! \ n" ,

f i leName ) ;228 e x i t (1 ) ;229 }230 f p r i n t f ( s tde r r , " Input speech f i l e : %s \n" , f i leName ) ;231232 i f ( strcmp ( ser ia lF i l eName , "�") == 0) {233 f i l e _ s e r i a l = stdout ;

131

Page 138: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

234 }235 e l s e i f ( ( f i l e _ s e r i a l = fopen ( ser ia lF i l eName , "wb") ) == NULL

)236 {237 f p r i n t f ( s tde r r , " Error opening output b i t s t ream f i l e %s

! ! \ n" , s e r i a lF i l eName ) ;238 e x i t (1 ) ;239 }240 f p r i n t f ( s tde r r , " Output b i t s t ream f i l e : %s \n" ,

s e r i a lF i l eName ) ;241242243 /⇤�������������������������������������⇤244 ⇤ I n i t i a l i s a t i o n o f the coder .

⇤245 ⇤�������������������������������������⇤/246 i f ( Speech_Encode_Frame_init(&speech_encoder_state , dtx , "

encoder ")247 | | s id_sync_init (&s id_state ) )248 e x i t (�1) ;249250 #i f d e f MMS_IO251 /⇤ wr i t e magic number to i nd i c a t e s i n g l e channel AMR f i l e

s t o rage format ⇤/252 fw r i t e (AMR_MAGIC_NUMBER, s i z e o f (UWord8) , s t r l e n (

AMR_MAGIC_NUMBER) , f i l e _ s e r i a l ) ;253 #end i f254255 /⇤�������������������������������������⇤256 ⇤ Process speech frame by frame

⇤257 ⇤�������������������������������������⇤/258 frame = 0 ;259260 /⇤ Medimos tiempo i n i c i a l ⇤/261 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;262263 whi l e ( f r ead ( new_speech , s i z e o f (Word16) , L_FRAME,

f i l e_spee ch ) == L_FRAME)264 {265 /⇤ read new mode s t r i n g from f i l e i f r equ i r ed ⇤/266 i f ( useModeFile ) {267 i n t r e s ;268 i f ( ( r e s = read_mode ( f i le_modes , &mode) ) == EOF) {269 f p r i n t f ( s tde r r , "\nend o f mode con t r o l f i l e

reached ") ;270 break ;271 } e l s e i f ( r e s == 1)272 e x i t (�1) ;273 }274275 frame++;276277 /⇤ zero f l a g s and parameter b i t s ⇤/278 f o r ( i = 0 ; i < SERIAL_FRAMESIZE; i++)279 s e r i a l [ i ] = 0 ;280281 /⇤ check f o r homing frame ⇤/282 r e s e t_ f l a g = encoder_homing_frame_test ( new_speech ) ;283

132

Page 139: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

284 /⇤ encode speech ⇤/285 Speech_Encode_Frame ( speech_encoder_state , mode ,286 new_speech , &s e r i a l [ 1 ] , &used_mode ) ;287288 /⇤ pr in t frame number and mode in fo rmat ion ⇤/289 mode2str (mode , &modeStr ) ;290 mode2str (used_mode , &usedModeStr ) ;291 i f ( ( frame %50) == 0) {292 f p r i n t f ( s tde r r , "\ rframe= %�8d mode= %�5s used_mode= %�5s

" ,293 frame , modeStr , usedModeStr ) ;294 }295296 /⇤ i n c lude frame type and mode in fo rmat ion in s e r i a l

b i t s t ream ⇤/297 sid_sync ( s id_state , used_mode , &tx_type ) ;298299 #i f n d e f MMS_IO300 s e r i a l [ 0 ] = tx_type ;301 i f ( tx_type != TX_NO_DATA) {302 s e r i a l [1+MAX_SERIAL_SIZE] = mode ;303 }304 e l s e {305 s e r i a l [1+MAX_SERIAL_SIZE] = �1;306 }307308 /⇤ wr i t e b i t s t ream to output f i l e ⇤/309 /⇤ i f ( fw r i t e ( s e r i a l , s i z e o f (Word16) , SERIAL_FRAMESIZE,

f i l e _ s e r i a l )310 != SERIAL_FRAMESIZE) {311 f p r i n t f ( s tde r r , "\ ne r ro r wr i t i ng output f i l e : %s \n" ,312 s t r e r r o r ( er rno ) ) ;313 e x i t (�1) ;314 }⇤/315 #e l s e316317 packed_size = PackBits (used_mode , mode , tx_type , &s e r i a l

[ 1 ] , packed_bits ) ;318319 /⇤ wr i t e f i l e s t o rage format b i t s t ream to output f i l e ⇤/320 /⇤ i f ( fw r i t e ( packed_bits , s i z e o f (UWord8) , packed_size ,

f i l e _ s e r i a l )321 != packed_size ) {322 f p r i n t f ( s tde r r , "\ ne r ro r wr i t i ng output f i l e : %s \n" ,323 s t r e r r o r ( er rno ) ) ;324 e x i t (�1) ;325 }⇤/326 #end i f327328 f f l u s h ( f i l e _ s e r i a l ) ;329330 /⇤ perform homing i f homing frame was detec ted at encoder

input ⇤/331 i f ( r e s e t_ f l a g != 0)332 {333 Speech_Encode_Frame_reset ( speech_encoder_state ) ;334 s id_sync_reset ( s id_state ) ;335 }336337 /⇤ Medimos tiempo de proceso de cada trama ⇤/

133

Page 140: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

338339 }340 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;341 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a l a

func ion consumo ⇤/342 /⇤ switch (mode) {343 case MR475 :344 i f ( dtx==1){345 f i chero_datos="amr475dtx . dat " ;346 }347 e l s e {348 f i chero_datos="amr475 . dat " ;349 }350 break ;351 case MR515 :352 i f ( dtx==1){353 f i chero_datos="amr515dtx . dat " ;354 }355 e l s e {356 f i chero_datos="amr515 . dat " ;357 }358 break ;359 case MR59:360 i f ( dtx==1){361 f i chero_datos="amr59dtx . dat " ;362 }363 e l s e {364 f i chero_datos="amr59 . dat " ;365 }366 break ;367 case MR67:368 i f ( dtx==1){369 f i chero_datos="amr67dtx . dat " ;370 }371 e l s e {372 f i chero_datos="amr67 . dat " ;373 }374 break ;375 case MR74:376 i f ( dtx==1){377 f i chero_datos="amr74dtx . dat " ;378 }379 e l s e {380 f i chero_datos="amr74 . dat " ;381 }382 break ;383 case MR795 :384 i f ( dtx==1){385 f i chero_datos="amr795dtx . dat " ;386 }387 e l s e {388 f i chero_datos="amr795 . dat " ;389 }390 break ;391 case MR102 :392 i f ( dtx==1){393 f i chero_datos="amr102dtx . dat " ;394 }395 e l s e {396 f i chero_datos="amr102 . dat " ;

134

Page 141: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

397 }398 break ;399 case MR122 :400 i f ( dtx==1){401 f i chero_datos="amr122dtx . dat " ;402 }403 e l s e {404 f i chero_datos="amr122 . dat " ;405 }406 break ;407 }408 ⇤/409410 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/411 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;412 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;413 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;414 NSNumber ⇤ l og=n i l ;415 log=consumo ( tabla_tiempos , 1 , datosSa l ida , frame , ’ c ’ ,

i t e r a c i on ,TIEMPODETRAMAAMR) ;416417418 f p r i n t f ( s tde r r , "\n %d frame ( s ) proce s s ed \n" , frame ) ;419420421 /⇤�������������������������������������⇤422 ⇤ Close down speech coder

⇤423 ⇤�������������������������������������⇤/424 Speech_Encode_Frame_exit(&speech_encoder_state ) ;425 sid_sync_exit (&s id_state ) ;426427428 re turn log ;429 }

amrdecoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤8 ⇤9 ⇤ GSM AMR�NB speech codec R98 Vers ion 7 . 6 . 0 December

12 , 200110 ⇤ R99 Vers ion 3 . 3 . 011 ⇤ REL�4 Vers ion 4 . 1 . 012 ⇤13 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤14 ⇤15 ⇤ F i l e : decoder . c16 ⇤ Purpose : Speech decoder main program .

135

Page 142: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

17 ⇤18 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤19 ⇤20 ⇤ Usage : decoder b i t s t r e am_f i l e syn th_f i l e21 ⇤22 ⇤23 ⇤ Format f o r b i t s t r e am_f i l e :24 ⇤ 1 word (2�byte ) f o r the frame type25 ⇤ ( s e e frame . h f o r p o s s i b l e va lue s )26 ⇤ Normally , the TX frame type i s expected .27 ⇤ RX frame type can be f o r c ed with "�rxframetype "28 ⇤ 244 words (2�byte ) conta in ing 244 b i t s .29 ⇤ Bit 0 = 0x0000 and Bit 1 = 0x000130 ⇤ 1 word (2�byte ) f o r the mode i nd i c a t i o n31 ⇤ ( s e e mode . h f o r p o s s i b l e va lue s )32 ⇤ 4 words f o r fu tu r e use , cu r r en t l y unused33 ⇤34 ⇤ Format f o r syn th_f i l e :35 ⇤ Synthes i s i s wr i t t en to a binary f i l e o f 16 b i t s

data .36 ⇤37 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤38 ⇤/3940 /⇤41 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤42 ⇤ INCLUDE FILES43 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤44 ⇤/45 #inc lude <s td i o . h>46 #inc lude <s t d l i b . h>47 #inc lude <s t r i n g . h>48 #inc lude <errno . h>49 #inc lude " typede f . h"50 #inc lude "n_proc . h"51 #inc lude " cnst . h"52 #inc lude "mode . h"53 #inc lude " frame . h"54 #inc lude " s t r f un c . h"55 #inc lude "sp_dec . h"56 #inc lude "d_homing . h"5758 #inc lude "amrdecoder . h"5960 /⇤ Funciones para tomar medidas de consumo ⇤/61 #inc lude " . . / consumo . h"6263 #i f d e f MMS_IO64 #de f i n e AMR_MAGIC_NUMBER "#!AMR\n"65 #de f i n e MAX_PACKED_SIZE (MAX_SERIAL_SIZE / 8 + 2)66 #end i f6768 const char decoder_id [ ] = "@(#)$Id $ " ;6970 /⇤ frame s i z e in s e r i a l b i t s t ream f i l e ( frame type + s e r i a l

stream + f l a g s ) ⇤/71 #de f i n e SERIAL_FRAMESIZE (1+MAX_SERIAL_SIZE+5)7273 /⇤74 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤

136

Page 143: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

75 ⇤ LOCAL PROGRAM CODE76 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤77 ⇤/78 s t a t i c enum RXFrameType tx_to_rx (enum TXFrameType tx_type )79 {80 switch ( tx_type ) {81 case TX_SPEECH_GOOD: return RX_SPEECH_GOOD;82 case TX_SPEECH_DEGRADED: return RX_SPEECH_DEGRADED;83 case TX_SPEECH_BAD: return RX_SPEECH_BAD;84 case TX_SID_FIRST: re turn RX_SID_FIRST;85 case TX_SID_UPDATE: re turn RX_SID_UPDATE;86 case TX_SID_BAD: return RX_SID_BAD;87 case TX_ONSET: re turn RX_ONSET;88 case TX_NO_DATA: return RX_NO_DATA;89 de f au l t :90 f p r i n t f ( s tde r r , "tx_to_rx : unknown TX frame type %d\n" ,

tx_type ) ;91 e x i t (1 ) ;92 }93 }9495 /⇤96 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤97 ⇤ MAIN PROGRAM98 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤99 ⇤/

100101 NSNumber ⇤amrdecoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )102 {103 Speech_Decode_FrameState ⇤ speech_decoder_state = NULL;104105 Word16 s e r i a l [SERIAL_FRAMESIZE ] ; /⇤ coded b i t s

⇤/106 Word16 synth [L_FRAME] ; /⇤ Synthes i s

⇤/107 Word32 frame ;108109 char ⇤progname = argv [ 0 ] ;110 char ⇤ f i leName = NULL;111 char ⇤ s e r i a lF i l eName = NULL;112113 FILE ⇤ f i l e_syn , ⇤ f i l e _ s e r i a l ;114115 i n t rxframetypeMode = 0 ; /⇤ use RX frame type codes

⇤/116 enum Mode mode = (enum Mode) 0 ;117 enum RXFrameType rx_type = (enum RXFrameType) 0 ;118 enum TXFrameType tx_type = (enum TXFrameType) 0 ;119120 Word16 r e s e t_ f l a g = 0 ;121 Word16 rese t_f lag_old = 1 ;122 Word16 i ;123124 #i f d e f MMS_IO125 UWord8 toc , q , f t ;126 Word8 magic [ 8 ] ;127 UWord8 packed_bits [MAX_PACKED_SIZE] ;128 Word16 packed_size [ 1 6 ] = {12 , 13 , 15 , 17 , 19 , 20 , 26 , 31 , 5 ,

0 , 0 , 0 , 0 , 0 , 0 , 0} ;

137

Page 144: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

129 #end i f130131 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r l o s

datos de medida ⇤/132 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/133 i n t dtx=0; /⇤ Bandera que i nd i c a e l uso de DTX ⇤/134135 proc_head (" Decoder ") ;136137 #i f n d e f MMS_IO138 /⇤������������������������������������⇤139 ⇤ proce s s command l i n e opt ions

⇤140 ⇤������������������������������������⇤/141 whi l e ( argc > 1) {142 i f ( strcmp ( argv [ 1 ] , "�rxframetype ") == 0)143 rxframetypeMode = 1 ;144 e l s e break ;145146 argc��;147 argv++;148 }149 #end i f150151 /⇤������������������������������������⇤152 ⇤ check number o f arguments

⇤153 ⇤������������������������������������⇤/154 i f ( argc != 3)155 {156 f p r i n t f ( s tde r r ,157 " Usage : \ n\n"158 #i f n d e f MMS_IO159 " %s [� rxframetype ] b i t s t r e am_f i l e syn th_f i l e \n\n"160 " �rxframetype expect s the RX frame type in

b i t s t r e am_f i l e ( i n s t ead o f TX) \n\n" ,161 #e l s e162 " %s b i t s t r e am_f i l e syn th_f i l e \n\n" ,163 #end i f164 progname ) ;165 e x i t (1 ) ;166 }167168 se r i a lF i l eName = argv [ 1 ] ;169 f i leName = argv [ 2 ] ;170171 /⇤������������������������������������⇤172 ⇤ Open s e r i a l b i t stream and output speech f i l e

⇤173 ⇤������������������������������������⇤/174 i f ( strcmp ( ser ia lF i l eName , "�") == 0) {175 f i l e _ s e r i a l = s td in ;176 }177 e l s e i f ( ( f i l e _ s e r i a l = fopen ( ser ia lF i l eName , " rb ") ) == NULL

)178 {179 f p r i n t f ( s tde r r , " Input f i l e ’ %s ’ does not e x i s t ! ! \ n" ,

s e r i a lF i l eName ) ;180 e x i t (0 ) ;

138

Page 145: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

181 }182 f p r i n t f ( s tde r r , " Input b i t s t ream f i l e : %s \n" ,

s e r i a lF i l eName ) ;183184 i f ( strcmp ( fi leName , "�") == 0) {185 f i l e_syn = stdout ;186 }187 e l s e i f ( ( f i l e_syn = fopen ( fi leName , "wb") ) == NULL)188 {189 f p r i n t f ( s tde r r , "Cannot c r e a t e output f i l e ’ %s ’ ! ! \ n" ,

f i leName ) ;190 e x i t (0 ) ;191 }192 f p r i n t f ( s tde r r , " Synthe s i s speech f i l e : %s \n" , f i leName ) ;193194 #i f d e f MMS_IO195 /⇤ read and v e r i f y magic number ⇤/196 f r ead ( magic , s i z e o f (Word8) , s t r l e n (AMR_MAGIC_NUMBER) ,

f i l e _ s e r i a l ) ;197 i f ( strncmp ( ( const char ⇤) magic , AMR_MAGIC_NUMBER, s t r l e n (

AMR_MAGIC_NUMBER) ) )198 {199 f p r i n t f ( s tde r r , " %s %s\n" , " Inva l i d magic number : " ,

magic ) ;200 f c l o s e ( f i l e _ s e r i a l ) ;201 f c l o s e ( f i l e_syn ) ;202 re turn 1 ;203 }204 #end i f205206 /⇤�������������������������������������⇤207 ⇤ I n i t i a l i z a t i o n o f decoder

⇤208 ⇤�������������������������������������⇤/209 i f ( Speech_Decode_Frame_init(&speech_decoder_state , "Decoder

") )210 e x i t (�1) ;211212 /⇤�������������������������������������⇤213 ⇤ proce s s s e r i a l b i t s t ream frame by frame

⇤214 ⇤�������������������������������������⇤/215 frame = 0 ;216217 /⇤ Medimos tiempo i n i c i a l ⇤/218 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;219220 #i f n d e f MMS_IO221 whi l e ( f r ead ( s e r i a l , s i z e o f (Word16) , SERIAL_FRAMESIZE,

f i l e _ s e r i a l )222 == SERIAL_FRAMESIZE)223 {224 /⇤ get frame type and mode in fo rmat ion from frame ⇤/225 i f ( rxframetypeMode ) {226 rx_type = (enum RXFrameType) s e r i a l [ 0 ] ;227 } e l s e {228 tx_type = (enum TXFrameType) s e r i a l [ 0 ] ;229 rx_type = tx_to_rx ( tx_type ) ;230 }231 mode = (enum Mode) s e r i a l [1+MAX_SERIAL_SIZE ] ;

139

Page 146: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

232233 #e l s e234235 whi l e ( f r ead (&toc , s i z e o f (UWord8) , 1 , f i l e _ s e r i a l ) == 1)236 {237 /⇤ read r e s t o f the frame based on ToC byte ⇤/238 q = ( toc >> 2) & 0x01 ;239 f t = ( toc >> 3) & 0x0F ;240 f r ead ( packed_bits , s i z e o f (UWord8) , packed_size [ f t ] ,

f i l e _ s e r i a l ) ;241242 rx_type = UnpackBits (q , f t , packed_bits , &mode , &s e r i a l

[ 1 ] ) ;243244 #end i f245246 ++frame ;247 i f ( ( frame %50) == 0) {248 f p r i n t f ( s tde r r , "\ rframe= %d " , frame ) ;249 }250251 i f ( rx_type == RX_NO_DATA) {252 mode = speech_decoder_state�>prev_mode ;253 }254 e l s e {255 speech_decoder_state�>prev_mode = mode ;256 }257258 /⇤ i f homed : check i f t h i s frame i s another homing frame

⇤/259 i f ( r e se t_f lag_old == 1)260 {261 /⇤ only check un t i l end o f f i r s t subframe ⇤/262 r e s e t_ f l a g = decoder_homing_frame_test_first(& s e r i a l

[ 1 ] , mode) ;263 }264 /⇤ produce encoder homing frame i f homed & input=decoder

homing frame ⇤/265 i f ( ( r e s e t_ f l a g != 0) && ( rese t_f lag_old != 0) )266 {267 f o r ( i = 0 ; i < L_FRAME; i++)268 {269 synth [ i ] = EHF_MASK;270 }271 }272 e l s e273 {274 /⇤ decode frame ⇤/275 Speech_Decode_Frame ( speech_decoder_state , mode , &

s e r i a l [ 1 ] ,276 rx_type , synth ) ;277 }278279 /⇤ wr i t e syn the s i z ed speech to f i l e ⇤/280 /⇤ i f ( fw r i t e ( synth , s i z e o f (Word16) , L_FRAME, f i l e_syn )

!= L_FRAME) {281 f p r i n t f ( s tde r r , "\ ne r ro r wr i t i ng output f i l e : %s \n" ,282 s t r e r r o r ( er rno ) ) ;283 } ;⇤/284 f f l u s h ( f i l e_syn ) ;

140

Page 147: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

285286 /⇤ i f not homed : check whether cur rent frame i s a homing

frame ⇤/287 i f ( r e se t_f lag_old == 0)288 {289 /⇤ check whole frame ⇤/290 r e s e t_ f l a g = decoder_homing_frame_test(& s e r i a l [ 1 ] ,

mode) ;291 }292 /⇤ r e s e t decoder i f cur r ent frame i s a homing frame ⇤/293 i f ( r e s e t_ f l a g != 0)294 {295 Speech_Decode_Frame_reset ( speech_decoder_state ) ;296 }297 rese t_f lag_old = re s e t_ f l a g ;298299 /⇤ Si nos encontramos con una trama SID sabemos que usa

DTX ⇤/300 i f ( rx_type==RX_SID_FIRST)301 dtx=1;302 /⇤ Medimos tiempo de proceso de cada trama ⇤/303304305 }306 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;307 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a l a

func ion consumo ⇤/308 /⇤ switch (mode) {309 case MR475 :310 i f ( dtx==1){311 f i chero_datos="amr475dtx . dat " ;312 }313 e l s e {314 f i chero_datos="amr475 . dat " ;315 }316 break ;317 case MR515 :318 i f ( dtx==1){319 f i chero_datos="amr515dtx . dat " ;320 }321 e l s e {322 f i chero_datos="amr515 . dat " ;323 }324 break ;325 case MR59:326 i f ( dtx==1){327 f i chero_datos="amr59dtx . dat " ;328 }329 e l s e {330 f i chero_datos="amr59 . dat " ;331 }332 break ;333 case MR67:334 i f ( dtx==1){335 f i chero_datos="amr67dtx . dat " ;336 }337 e l s e {338 f i chero_datos="amr67 . dat " ;339 }340 break ;

141

Page 148: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

341 case MR74:342 i f ( dtx==1){343 f i chero_datos="amr74dtx . dat " ;344 }345 e l s e {346 f i chero_datos="amr74 . dat " ;347 }348 break ;349 case MR795 :350 i f ( dtx==1){351 f i chero_datos="amr795dtx . dat " ;352 }353 e l s e {354 f i chero_datos="amr795 . dat " ;355 }356 break ;357 case MR102 :358 i f ( dtx==1){359 f i chero_datos="amr102dtx . dat " ;360 }361 e l s e {362 f i chero_datos="amr102 . dat " ;363 }364 break ;365 case MR122 :366 i f ( dtx==1){367 f i chero_datos="amr122dtx . dat " ;368 }369 e l s e {370 f i chero_datos="amr122 . dat " ;371 }372 break ;373 }⇤/374 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/375 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;376 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;377 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;378 NSNumber ⇤ l og=n i l ;379 log=consumo ( tabla_tiempos , 1 , datosSa l ida , frame , ’ c ’ ,

i t e r a c i on ,TIEMPODETRAMAAMR) ;380381382 f p r i n t f ( s tde r r , "\n %d frame ( s ) proce s s ed \n" , frame ) ;383384385 /⇤�������������������������������������⇤386 ⇤ Close down speech decoder

⇤387 ⇤�������������������������������������⇤/388 Speech_Decode_Frame_exit(&speech_decoder_state ) ;389390 re turn log ;391 }

142

Page 149: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

C.2.2. Códec iLBCEn esta subsección tenemos las modificaciones efectuadas al códec iLBC

sobre las hechas en la subsección B.3.3, basicamente se usará el mismo códigopara las clases y las cabeceras y sólo se han hecho modificaciones en los códigosdel codificador y descodificador.

iLBC_test_enc.m

1 /⇤2 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez3 ⇤/4 /⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤56 iLBC Speech Coder ANSI�C Source Code78 iLBC_test . c9

10 Copyright (C) The In t e rn e t Soc i e ty (2004) .11 Al l Rights Reserved .1213 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤/1415 #inc lude <math . h>16 #inc lude <s t d l i b . h>17 #inc lude <s td i o . h>18 #inc lude <s t r i n g . h>19 #inc lude " iLBC_define . h"20 #inc lude "iLBC_encode . h"21 #inc lude "iLBC_decode . h"22 #inc lude "iLBC_test_enc . h"2324 /⇤ Runtime s t a t i s t i c s ⇤/25 #inc lude <time . h>2627 /⇤ Funciones para tomar medidas de consumo ⇤/28 #inc lude " . . / consumo . h"2930 #de f i n e ILBCNOOFWORDS_MAX (NO_OF_BYTES_30MS/2)3132 /⇤�����������������������������������������������⇤33 ⇤ Encoder i n t e r f a c e func t i on343536373839 ⇤����������������������������������������������⇤/4041 shor t encode ( /⇤ ( o ) Number o f bytes encoded ⇤/42 iLBC_Enc_Inst_t ⇤ iLBCenc_inst ,43 /⇤ ( i /o ) Encoder i n s t ance ⇤/44 shor t ⇤encoded_data , /⇤ ( o ) The encoded bytes ⇤/45 shor t ⇤data /⇤ ( i ) The s i g n a l b lock to

encode ⇤/46 ) {47 f l o a t b lock [BLOCKL_MAX] ;48 i n t k ;4950 /⇤ convert s i g n a l to f l o a t ⇤/

143

Page 150: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

5152 f o r ( k=0; k<iLBCenc_inst�>b lo ck l ; k++)53 block [ k ] = ( f l o a t ) data [ k ] ;5455 /⇤ do the ac tua l encoding ⇤/5657 iLBC_encode ( ( unsigned char ⇤) encoded_data , block ,

iLBCenc_inst ) ;585960 re turn ( iLBCenc_inst�>no_of_bytes ) ;61 }6263 /⇤�����������������������������������������������⇤64 ⇤ Decoder i n t e r f a c e func t i on65 ⇤����������������������������������������������⇤/6667 shor t decode ( /⇤ ( o ) Number o f decoded samples ⇤/68 iLBC_Dec_Inst_t ⇤ iLBCdec_inst , /⇤ ( i /o ) Decoder

i n s t anc e ⇤/69 shor t ⇤decoded_data , /⇤ ( o ) Decoded s i g n a l b lock

⇤/70 shor t ⇤encoded_data , /⇤ ( i ) Encoded bytes ⇤/71 shor t mode /⇤ ( i ) 0=PL, 1=Normal

⇤/72 ) {73 i n t k ;74 f l o a t decblock [BLOCKL_MAX] , dtmp ;7576 /⇤ check i f mode i s va l i d ⇤/7778 i f (mode<0 | | mode>1) {79 p r i n t f ("\nERROR � Wrong mode � 0 , 1 a l lowed \n") ;

e x i t (3 ) ; }8081 /⇤ do ac tua l decoding o f b lock ⇤/8283 iLBC_decode ( decblock , ( unsigned char ⇤) encoded_data ,84 iLBCdec_inst , mode) ;8586 /⇤ convert to shor t ⇤/878889909192 f o r ( k=0; k<iLBCdec_inst�>b lo ck l ; k++){93 dtmp=decblock [ k ] ;9495 i f (dtmp<MIN_SAMPLE)96 dtmp=MIN_SAMPLE;97 e l s e i f (dtmp>MAX_SAMPLE)98 dtmp=MAX_SAMPLE;99 decoded_data [ k ] = ( shor t ) dtmp ;

100 }101102 re turn ( iLBCdec_inst�>b lo ck l ) ;103 }104105 /⇤����������������������������������������������⇤

144

Page 151: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

106 ⇤ Main program to t e s t iLBC encoding and decoding107 ⇤108 ⇤ Usage :109 ⇤ exef i le_name . exe <i n f i l e > <by t e f i l e > <ou t f i l e > <

channel>110 ⇤111 ⇤ <i n f i l e > : Input f i l e , speech f o r encoder (16� b i t

pcm f i l e )112 ⇤ <by t e f i l e > : Bit stream output from the encoder113 ⇤ <ou t f i l e > : Output f i l e , decoded speech (16� b i t pcm

f i l e )114 ¡ ¡No hay que poner e l o u t f i l e en e l encoder por e s t a r

modi f icado ! !115 ⇤ <channel> : Bit e r r o r f i l e , op t i ona l (16� b i t )116 ⇤ 1 � Packet r e c e i v ed c o r r e c t l y117 ⇤ 0 � Packet Lost118 ⇤119 ⇤���������������������������������������������⇤/120121 NSNumber ⇤ iLBC_test_enc ( i n t argc , char ⇤argv [ ] , NSString ⇤

datos , i n t i t e r a c i o n )122 {123124 /⇤ Runtime s t a t i s t i c s ⇤/125126 f l o a t s t a r t t ime ;127 f l o a t runtime ;128 f l o a t outtime ;129130 FILE ⇤ i f i l e i d ,⇤ e f i l e i d ,⇤ o f i l e i d , ⇤ c f i l e i d ;131 shor t data [BLOCKL_MAX] ;132 shor t encoded_data [ILBCNOOFWORDS_MAX] , decoded_data [

BLOCKL_MAX] ;133 i n t l en ;134 shor t p l i , mode ;135 i n t blockcount = 0 ;136 i n t packe t l o s s count = 0 ;137138 /⇤ Create s t r u c t s ⇤/139 iLBC_Enc_Inst_t Enc_Inst ;140 iLBC_Dec_Inst_t Dec_Inst ;141142 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para

r e c o p i l a r l o s datos de medida ⇤/143 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que

se guardan l o s datos ⇤/144145146147 /⇤ get arguments and open f i l e s ⇤/148149 i f ( ( argc !=4) && ( argc !=5) ) {150 f p r i n t f ( s tde r r ,151 "\n⇤������������������������������⇤\n") ;152 f p r i n t f ( s tde r r ,153 " %s <20,30> input encoded decoded ( channel ) \n\n" ,154 argv [ 0 ] ) ;155 f p r i n t f ( s tde r r ,156 " mode : Frame s i z e f o r the encoding /decoding \n

") ;

145

Page 152: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

157 f p r i n t f ( s tde r r ,158 " 20 � 20 ms\n") ;159 f p r i n t f ( s tde r r ,160 " 30 � 30 ms\n") ;161 f p r i n t f ( s tde r r ,162 " input : Speech f o r encoder (16� b i t pcm f i l e ) \n

") ;163 f p r i n t f ( s tde r r ,164 " encoded : Encoded b i t stream\n") ;165 f p r i n t f ( s tde r r ,166 " decoded : Decoded speech (16� b i t pcm f i l e ) \n") ;167 f p r i n t f ( s tde r r ,168 " channel : Packet l o s s pattern , op t i ona l (16� b i t )

\n") ;169 f p r i n t f ( s tde r r ,170 " 1 � Packet r e c e i v ed c o r r e c t l y \n")

;171 f p r i n t f ( s tde r r ,172 " 0 � Packet Lost \n") ;173 f p r i n t f ( s tde r r ,174 "⇤������������������������������⇤\n\n") ;175 e x i t (1 ) ;176 }177 mode=a to i ( argv [ 1 ] ) ;178 i f (mode != 20 && mode != 30) {179 f p r i n t f ( s tde r r , "Wrong mode %s , must be 20 , or 30\n" ,180 argv [ 1 ] ) ;181 e x i t (2 ) ;182 }183 i f ( ( i f i l e i d=fopen ( argv [ 2 ] , " rb ") ) == NULL) {184 f p r i n t f ( s tde r r , " Cannot open input f i l e %s \n" , argv

[ 2 ] ) ;185 e x i t (2 ) ; }186187 i f ( ( e f i l e i d=fopen ( argv [ 3 ] , "wb") ) == NULL) {188 f p r i n t f ( s tde r r , "Cannot open encoded f i l e %s \n" ,189 argv [ 3 ] ) ; e x i t (1 ) ; }190 // i f ( ( o f i l e i d=fopen ( argv [ 4 ] , "wb") ) == NULL) {191 // f p r i n t f ( s tde r r , "Cannot open decoded f i l e %s \n" ,192 // argv [ 4 ] ) ; e x i t (1 ) ; }193 i f ( argc==5) {194 i f ( ( c f i l e i d=fopen ( argv [ 4 ] , " rb ") ) == NULL) {195 f p r i n t f ( s tde r r , "Cannot open channel f i l e %s \n" ,

argv [ 4 ] ) ;196 e x i t (1 ) ;197 }198 } e l s e {199 c f i l e i d=NULL;200 }201202 /⇤ pr in t i n f o ⇤/203204 f p r i n t f ( s tde r r , "\n") ;205 f p r i n t f ( s tde r r ,206 "⇤����������������������������������⇤\n") ;207 f p r i n t f ( s tde r r ,208 "⇤

⇤\n") ;209 f p r i n t f ( s tde r r ,

146

Page 153: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

210 "⇤ iLBC t e s t program⇤\n") ;

211 f p r i n t f ( s tde r r ,212 "⇤

⇤\n") ;213 f p r i n t f ( s tde r r ,214 "⇤

⇤\n") ;215 f p r i n t f ( s tde r r ,216 "⇤����������������������������������⇤\n") ;217 f p r i n t f ( s tde r r , "\nMode : %2d ms\n" , mode) ;218 f p r i n t f ( s tde r r , " Input f i l e : %s \n" , argv [ 2 ] ) ;219 f p r i n t f ( s tde r r , " Encoded f i l e : %s \n" , argv [ 3 ] ) ;220 // f p r i n t f ( s tde r r , " Output f i l e : %s \n" , argv [ 4 ] ) ;221 i f ( argc==5) {222 f p r i n t f ( s tde r r , " Channel f i l e : %s \n" , argv [ 4 ] ) ;223 }224 f p r i n t f ( s tde r r , "\ n") ;225226 /⇤ I n i t i a l i z a t i o n ⇤/227228 in i tEncode (&Enc_Inst , mode) ;229 // in i tDecode (&Dec_Inst , mode , 1) ;230231 /⇤ Runtime s t a t i s t i c s ⇤/232233 s t a r t t ime=c lock ( ) /( f l o a t )CLOCKS_PER_SEC;234235 /⇤ loop over input b locks ⇤/236237 /⇤ Medimos tiempo i n i c i a l ⇤/238 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;239240 whi l e ( f r ead ( data , s i z e o f ( shor t ) , Enc_Inst . b lock l , i f i l e i d )

==241 Enc_Inst . b l o c k l ) {242243 blockcount++;244245 /⇤ encoding ⇤/246247248249250251 f p r i n t f ( s tde r r , "��� Encoding block %i ��� " ,

b lockcount ) ;252 l en=encode(&Enc_Inst , encoded_data , data ) ;253 f p r i n t f ( s tde r r , "\ r ") ;254255 /⇤ wr i t e byte f i l e ⇤/256257 // fw r i t e ( encoded_data , s i z e o f ( unsigned char ) , len ,

e f i l e i d ) ;258259 /⇤ get channel data i f provided ⇤/260 i f ( argc==5) {261 i f ( f r ead (&p l i , s i z e o f ( shor t ) , 1 , c f i l e i d ) ) {

147

Page 154: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

262 i f ( ( p l i !=0)&&(p l i !=1) ) {263 f p r i n t f ( s tde r r , "Error in channel f i l e \n

") ;264 e x i t (0 ) ;265 }266 i f ( p l i==0) {267 /⇤ Packet l o s s �> remove i n f o from frame

⇤/268 memset ( encoded_data , 0 ,269 s i z e o f ( shor t ) ⇤ILBCNOOFWORDS_MAX) ;270 packe t l o s s count++;271 }272 } e l s e {273 f p r i n t f ( s tde r r , "Error . Channel f i l e too

shor t \n") ;274 e x i t (0 ) ;275 }276 } e l s e {277 p l i =1;278 }279280 /⇤ decoding ⇤/281 /⇤282 f p r i n t f ( s tde r r , "��� Decoding block %i ��� " ,

b lockcount ) ;283284 l en=decode(&Dec_Inst , decoded_data , encoded_data ,

p l i ) ;285 f p r i n t f ( s tde r r , "\ r ") ;286 ⇤/287 /⇤ wr i t e output f i l e ⇤/288 /⇤289 fw r i t e ( decoded_data , s i z e o f ( shor t ) , len , o f i l e i d ) ;290 ⇤/291 /⇤ Medimos tiempo de proceso de cada trama ⇤/292293 }294 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;295 //Esto no es n e c e s a r i o y l l e g a hasta e l s i g u i e n t e

comentario con dos //296 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a

l a func ion consumo ⇤/297 /⇤ i f (mode==20)298 f i chero_datos="i l b c 2 0 . dat " ;299 e l s e300 f i chero_datos="i l b c 3 0 . dat " ; ⇤/301 //Hasta aquí302303 //Es po s i b l e que deba qu i t a r l a s runtime s t a t i c i t i c s304305 /⇤ Runtime s t a t i s t i c s ⇤/306307 runtime = ( f l o a t ) ( c l o ck ( ) /( f l o a t )CLOCKS_PER_SEC�

s t a r t t ime ) ;308 outtime = ( f l o a t ) ( ( f l o a t ) b lockcount ⇤( f l o a t )mode/1000 .0 ) ;309 p r i n t f ("\n\nLength o f speech f i l e : %.1 f s \n" , outtime ) ;310 p r i n t f (" Packet l o s s : %.1 f % %\n" ,311 100 .0⇤ ( f l o a t ) packe t l o s s count /( f l o a t ) b lockcount ) ;312313

148

Page 155: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

314315316317 //Debemos preparar l a ruta de l a rch ivo de s a l i d a318319 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/320 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;321 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;322 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;323 NSNumber ⇤ l og=n i l ;324325 i f ( mode == 20) {326 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ c ’ , i t e r a c i on ,TIEMPODETRAMAILBC20) ;327 } e l s e {328 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ c ’ , i t e r a c i on ,TIEMPODETRAMAILBC30) ;329 }330331332 p r i n t f ("Time to run iLBC : " ) ;333 p r i n t f (" %.1 f s ( %.1 f % %of r ea l t ime ) \n\n" , runtime ,334 (100⇤ runtime/outtime ) ) ;335336 /⇤ c l o s e f i l e s ⇤/337338 f c l o s e ( i f i l e i d ) ;339 f c l o s e ( e f i l e i d ) ;340 // f c l o s e ( o f i l e i d ) ;341 i f ( argc==5) {342 f c l o s e ( c f i l e i d ) ;343 }344 re turn ( l og ) ;345 }

iLBC_test_dec.m

1 /⇤2 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez3 ⇤/4 /⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤56 iLBC Speech Coder ANSI�C Source Code78 iLBC_test . c9

10 Copyright (C) The In t e rn e t Soc i e ty (2004) .11 Al l Rights Reserved .1213 ⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤/1415 #inc lude <math . h>16 #inc lude <s t d l i b . h>17 #inc lude <s td i o . h>18 #inc lude <s t r i n g . h>

149

Page 156: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

19 #inc lude " iLBC_define . h"20 #inc lude "iLBC_encode . h"21 #inc lude "iLBC_decode . h"22 #inc lude "iLBC_test_dec . h"2324 /⇤ Runtime s t a t i s t i c s ⇤/25 #inc lude <time . h>2627 /⇤ Funciones para tomar medidas de consumo ⇤/28 #inc lude " . . / consumo . h"2930 #de f i n e ILBCNOOFWORDS_MAX (NO_OF_BYTES_30MS/2)3132 /⇤�����������������������������������������������⇤33 ⇤ Encoder i n t e r f a c e func t i on343536373839 ⇤����������������������������������������������⇤/4041 s t a t i c shor t encode ( /⇤ ( o ) Number o f bytes encoded ⇤/42 iLBC_Enc_Inst_t ⇤ iLBCenc_inst ,43 /⇤ ( i /o ) Encoder i n s t ance ⇤/44 shor t ⇤encoded_data , /⇤ ( o ) The encoded bytes ⇤/45 shor t ⇤data /⇤ ( i ) The s i g n a l b lock to

encode ⇤/46 ) {47 f l o a t b lock [BLOCKL_MAX] ;48 i n t k ;4950 /⇤ convert s i g n a l to f l o a t ⇤/5152 f o r ( k=0; k<iLBCenc_inst�>b lo ck l ; k++)53 block [ k ] = ( f l o a t ) data [ k ] ;5455 /⇤ do the ac tua l encoding ⇤/5657 iLBC_encode ( ( unsigned char ⇤) encoded_data , block ,

iLBCenc_inst ) ;585960 re turn ( iLBCenc_inst�>no_of_bytes ) ;61 }6263 /⇤�����������������������������������������������⇤64 ⇤ Decoder i n t e r f a c e func t i on65 ⇤����������������������������������������������⇤/6667 s t a t i c shor t decode ( /⇤ ( o ) Number o f decoded samples

⇤/68 iLBC_Dec_Inst_t ⇤ iLBCdec_inst , /⇤ ( i /o ) Decoder

i n s t anc e ⇤/69 shor t ⇤decoded_data , /⇤ ( o ) Decoded s i g n a l b lock

⇤/70 shor t ⇤encoded_data , /⇤ ( i ) Encoded bytes ⇤/71 shor t mode /⇤ ( i ) 0=PL, 1=Normal

⇤/72 ) {

150

Page 157: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

73 i n t k ;74 f l o a t decblock [BLOCKL_MAX] , dtmp ;7576 /⇤ check i f mode i s va l i d ⇤/7778 i f (mode<0 | | mode>1) {79 p r i n t f ("\nERROR � Wrong mode � 0 , 1 a l lowed \n") ;

e x i t (3 ) ; }8081 /⇤ do ac tua l decoding o f b lock ⇤/8283 iLBC_decode ( decblock , ( unsigned char ⇤) encoded_data ,84 iLBCdec_inst , mode) ;8586 /⇤ convert to shor t ⇤/878889909192 f o r ( k=0; k<iLBCdec_inst�>b lo ck l ; k++){93 dtmp=decblock [ k ] ;9495 i f (dtmp<MIN_SAMPLE)96 dtmp=MIN_SAMPLE;97 e l s e i f (dtmp>MAX_SAMPLE)98 dtmp=MAX_SAMPLE;99 decoded_data [ k ] = ( shor t ) dtmp ;

100 }101102 re turn ( iLBCdec_inst�>b lo ck l ) ;103 }104105 /⇤����������������������������������������������⇤106 ⇤ Main program to t e s t iLBC encoding and decoding107 ⇤108 ⇤ Usage :109 ⇤ exef i le_name . exe <i n f i l e > <by t e f i l e > <ou t f i l e > <

channel>110 ⇤111 ¡ ¡No hay que poner e l i n f i l e en e l decoder por e s t a r

modi f icado ! !112 ⇤ <i n f i l e > : Input f i l e , speech f o r encoder (16� b i t

pcm f i l e )113 ⇤ <by t e f i l e > : Bit stream output from the encoder114 ⇤ <ou t f i l e > : Output f i l e , decoded speech (16� b i t pcm

f i l e )115 ⇤ <channel> : Bit e r r o r f i l e , op t i ona l (16� b i t )116 ⇤ 1 � Packet r e c e i v ed c o r r e c t l y117 ⇤ 0 � Packet Lost118 ⇤119 ⇤���������������������������������������������⇤/120121 NSNumber ⇤ iLBC_test_dec ( i n t argc , char ⇤argv [ ] , NSString ⇤

datos , i n t i t e r a c i o n )122 {123124 /⇤ Runtime s t a t i s t i c s ⇤/125126 f l o a t s t a r t t ime ;

151

Page 158: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

127 f l o a t runtime ;128 f l o a t outtime ;129130 FILE ⇤ i f i l e i d ,⇤ e f i l e i d ,⇤ o f i l e i d , ⇤ c f i l e i d ;131 shor t data [BLOCKL_MAX] ;132 shor t encoded_data [ILBCNOOFWORDS_MAX] , decoded_data [

BLOCKL_MAX] ;133 i n t l en ;134 shor t p l i , mode ;135 i n t blockcount = 0 ;136 i n t b loquesTota l e s =0;137 i n t bytesForFrame=0;138 i n t packe t l o s s count = 0 ;139140 /⇤ Create s t r u c t s ⇤/141 iLBC_Enc_Inst_t Enc_Inst ;142 iLBC_Dec_Inst_t Dec_Inst ;143144 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para

r e c o p i l a r l o s datos de medida ⇤/145 char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que

se guardan l o s datos ⇤/146147148149 /⇤ get arguments and open f i l e s ⇤/150151 i f ( ( argc !=4) && ( argc !=5) ) {152 f p r i n t f ( s tde r r ,153 "\n⇤������������������������������⇤\n") ;154 f p r i n t f ( s tde r r ,155 " %s <20,30> input encoded decoded ( channel ) \n\n" ,156 argv [ 0 ] ) ;157 f p r i n t f ( s tde r r ,158 " mode : Frame s i z e f o r the encoding /decoding \n

") ;159 f p r i n t f ( s tde r r ,160 " 20 � 20 ms\n") ;161 f p r i n t f ( s tde r r ,162 " 30 � 30 ms\n") ;163 f p r i n t f ( s tde r r ,164 " input : Speech f o r encoder (16� b i t pcm f i l e ) \n

") ;165 f p r i n t f ( s tde r r ,166 " encoded : Encoded b i t stream\n") ;167 f p r i n t f ( s tde r r ,168 " decoded : Decoded speech (16� b i t pcm f i l e ) \n") ;169 f p r i n t f ( s tde r r ,170 " channel : Packet l o s s pattern , op t i ona l (16� b i t )

\n") ;171 f p r i n t f ( s tde r r ,172 " 1 � Packet r e c e i v ed c o r r e c t l y \n")

;173 f p r i n t f ( s tde r r ,174 " 0 � Packet Lost \n") ;175 f p r i n t f ( s tde r r ,176 "⇤������������������������������⇤\n\n") ;177 e x i t (1 ) ;178 }179 mode=a to i ( argv [ 1 ] ) ;

152

Page 159: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

180 i f (mode != 20 && mode != 30) {181 f p r i n t f ( s tde r r , "Wrong mode %s , must be 20 , or 30\n" ,182 argv [ 1 ] ) ;183 e x i t (2 ) ;184 }185 // i f ( ( i f i l e i d=fopen ( argv [ 2 ] , " rb ") ) == NULL) {186 // f p r i n t f ( s tde r r , " Cannot open input f i l e %s \n" , argv

[ 2 ] ) ;187 // e x i t (2 ) ; }188 //Debo mod i f i ca r l a forma de apertura de l a rch ivo intermedio189 i f ( ( e f i l e i d=fopen ( argv [ 2 ] , " rb ") ) == NULL) {190 f p r i n t f ( s tde r r , "Cannot open encoded f i l e %s \n" ,191 argv [ 2 ] ) ; e x i t (1 ) ; }192 i f ( ( o f i l e i d=fopen ( argv [ 3 ] , "wb") ) == NULL) {193 f p r i n t f ( s tde r r , "Cannot open decoded f i l e %s \n" ,194 argv [ 3 ] ) ; e x i t (1 ) ; }195 i f ( argc==5) {196 i f ( ( c f i l e i d=fopen ( argv [ 4 ] , " rb ") ) == NULL) {197 f p r i n t f ( s tde r r , "Cannot open channel f i l e %s \n" ,

argv [ 4 ] ) ;198 e x i t (1 ) ;199 }200 } e l s e {201 c f i l e i d=NULL;202 }203204 /⇤ pr in t i n f o ⇤/205206 f p r i n t f ( s tde r r , "\n") ;207 f p r i n t f ( s tde r r ,208 "⇤����������������������������������⇤\n") ;209 f p r i n t f ( s tde r r ,210 "⇤

⇤\n") ;211 f p r i n t f ( s tde r r ,212 "⇤ iLBC t e s t program

⇤\n") ;213 f p r i n t f ( s tde r r ,214 "⇤

⇤\n") ;215 f p r i n t f ( s tde r r ,216 "⇤

⇤\n") ;217 f p r i n t f ( s tde r r ,218 "⇤����������������������������������⇤\n") ;219 f p r i n t f ( s tde r r , "\nMode : %2d ms\n" , mode) ;220 // f p r i n t f ( s tde r r , " Input f i l e : %s \n" , argv [ 2 ] ) ;221 f p r i n t f ( s tde r r , " Encoded f i l e : %s \n" , argv [ 2 ] ) ;222 f p r i n t f ( s tde r r , " Output f i l e : %s \n" , argv [ 3 ] ) ;223 i f ( argc==5) {224 f p r i n t f ( s tde r r , " Channel f i l e : %s \n" , argv [ 4 ] ) ;225 }226 f p r i n t f ( s tde r r , "\ n") ;227228 /⇤ I n i t i a l i z a t i o n ⇤/229230 // in i tEncode(&Enc_Inst , mode) ;

153

Page 160: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

231 in i tDecode (&Dec_Inst , mode , 1) ;232233 /⇤ Runtime s t a t i s t i c s ⇤/234235 s t a r t t ime=c lock ( ) /( f l o a t )CLOCKS_PER_SEC;236237 /⇤ loop over input b locks ⇤/238239 /⇤ Medimos tiempo i n i c i a l ⇤/240 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;241242 // Modi f ico e l bloque while , para saber cuanto dura l a

d e c od i f i c a c i ó n243 // s i e l modo es 20 304 b i t s por frame �> frame 160

muestras 16 b i t s 8kHz �> 38 bytes por frame244 // s i e l modo es 30 400 b i t s por frame �> frame 240

muestras 16 b i t s 8kHz �> 50 bytes por frame245246 i f (mode==20)247 {248 bytesForFrame=38;249 }250 e l s e251 {252 bytesForFrame=50;253 }254 // Divido l a l ong i tud en bytes de l a rch ivo c od i f i c ado por

l o s bytes por frame segun e l t i po de c o d i f i c a c i o n255 NSData ⇤ c od i f i c ado = [ NSData dataWithContentsOfFile : [

NSString stringWithUTF8String : argv [ 2 ] ] ] ;256 b loquesTota l e s =[ c od i f i c ado l ength ] / bytesForFrame ;257 whi l e ( blockcount<bloquesTota l e s ) {258259 blockcount++;260261 /⇤ encoding ⇤/262263264265266 /⇤267 f p r i n t f ( s tde r r , "��� Encoding block %i ��� " ,

b lockcount ) ;268 l en=encode(&Enc_Inst , encoded_data , data ) ;269 f p r i n t f ( s tde r r , "\ r ") ;270271 /⇤ wr i t e byte f i l e ⇤/272 /⇤273 fw r i t e ( encoded_data , s i z e o f ( unsigned char ) , len ,

e f i l e i d ) ;274275 /⇤ get channel data i f provided ⇤/276 /⇤277 i f ( argc==6) {278 i f ( f r ead (&p l i , s i z e o f ( shor t ) , 1 , c f i l e i d ) ) {279 i f ( ( p l i !=0)&&(p l i !=1) ) {280 f p r i n t f ( s tde r r , "Error in channel f i l e \n

") ;281 e x i t (0 ) ;282 }

154

Page 161: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

283 i f ( p l i==0) {284 /⇤ Packet l o s s �> remove i n f o from frame

⇤/285 /⇤286 memset ( encoded_data , 0 ,287 s i z e o f ( shor t ) ⇤ILBCNOOFWORDS_MAX) ;288 packe t l o s s count++;289 }290 } e l s e {291 f p r i n t f ( s tde r r , "Error . Channel f i l e too

shor t \n") ;292 e x i t (0 ) ;293 }294 } e l s e {295 p l i =1;296 }297 ⇤/298 // Var iab le p l i =1 para no s imular perdida de b i t s299 p l i =1;300 f r ead ( encoded_data , s i z e o f ( unsigned char ) ,

bytesForFrame , e f i l e i d ) ;301 /⇤ decoding ⇤/302303 f p r i n t f ( s tde r r , "��� Decoding block %i ��� " ,

b lockcount ) ;304305 l en=decode(&Dec_Inst , decoded_data , encoded_data ,

p l i ) ;306 f p r i n t f ( s tde r r , "\ r ") ;307308 /⇤ wr i t e output f i l e ⇤/309310 // fw r i t e ( decoded_data , s i z e o f ( shor t ) , len , o f i l e i d ) ;311312 /⇤ Medimos tiempo de proceso de cada trama ⇤/313314 }315 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;316 //Esto no es n e c e s a r i o y l l e g a hasta e l s i g u i e n t e

comentario con dos //317 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a

l a func ion consumo ⇤/318 /⇤ i f (mode==20)319 f i chero_datos="i l b c 2 0 . dat " ;320 e l s e321 f i chero_datos="i l b c 3 0 . dat " ; ⇤/322 //Hasta aquí323324 //Es po s i b l e que deba qu i t a r l a s runtime s t a t i c i t i c s325326 /⇤ Runtime s t a t i s t i c s ⇤/327 runtime = ( f l o a t ) ( c l o ck ( ) /( f l o a t )CLOCKS_PER_SEC�

s t a r t t ime ) ;328 outtime = ( f l o a t ) ( ( f l o a t ) b lockcount ⇤( f l o a t )mode/1000 .0 ) ;329 p r i n t f ("\n\nLength o f speech f i l e : %.1 f s \n" , outtime ) ;330 p r i n t f (" Packet l o s s : %.1 f % %\n" ,331 100 .0⇤ ( f l o a t ) packe t l o s s count /( f l o a t ) b lockcount ) ;332333 //Debemos preparar l a ruta de l a rch ivo de s a l i d a334

155

Page 162: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

335 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/336 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains

( NSDocumentDirectory , NSUserDomainMask , YES) ;337 NSString ⇤documentsDirectory = [ paths objectAtIndex

: 0 ] ;338 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String] ;

339 NSNumber ⇤ l og=n i l ;340341 i f ( mode == 20) {342 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ d ’ , i t e r a c i on ,TIEMPODETRAMAILBC20) ;

343 } e l s e {344 log=consumo ( tabla_tiempos , 1 , datosSa l ida ,

blockcount , ’ d ’ , i t e r a c i on ,TIEMPODETRAMAILBC30) ;

345 }346347348349350351352353354 p r i n t f ("Time to run iLBC : " ) ;355 p r i n t f (" %.1 f s ( %.1 f % %of r ea l t ime ) \n\n" , runtime ,356 (100⇤ runtime/outtime ) ) ;357358 /⇤ c l o s e f i l e s ⇤/359360 // f c l o s e ( i f i l e i d ) ;361 f c l o s e ( e f i l e i d ) ;362 f c l o s e ( o f i l e i d ) ;363 i f ( argc==5) {364 f c l o s e ( c f i l e i d ) ;365 }366 re turn ( l og ) ;367 }

C.2.3. Códec G.723.1En esta subsección tenemos las modificaciones efectuadas al códec G.723.1

sobre las hechas en la subsección B.3.4, basicamente se usará el mismo códigopara las clases y las cabeceras y sólo se han hecho modificaciones en el códigodel codificador/descodificador.

g723.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Añadidas func i one s para tomar medidas de consumo .5 ⇤/

156

Page 163: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

67 /⇤8 ⇤⇤9 ⇤⇤ F i l e : " lbccodec . c"

10 ⇤⇤11 ⇤⇤ Desc r ip t i on : Top�l e v e l source code f o r G. 7 2 3 . 1 dual�r a t e

codec12 ⇤⇤13 ⇤⇤ Functions : main14 ⇤⇤ Pro c e s s_ f i l e s ( )15 ⇤⇤16 ⇤⇤17 ⇤/181920 /⇤21 ITU�T G.723 . 1 Software Package Release 2 ( June 2006)2223 ITU�T G.723 . 1 Speech Coder ANSI�C Source Code Vers ion

5 .224 copyr ight ( c ) 1995 , AudioCodes , DSP Group , France Telecom ,25 Un iv e r s i t e de Sherbrooke . Al l r i g h t s r e s e rved .26 Last modi f i ed : March 200627 ⇤/28 #import "g723 . h"2930 #inc lude <s td i o . h>31 #inc lude <s t d l i b . h>32 #inc lude <s t r i n g . h>33 #inc lude <time . h>3435 #inc lude " typede f . h"36 #inc lude "basop . h"37 #inc lude " cst_lbc . h"38 #inc lude " tab_lbc . h"39 #inc lude " lbccodec . h"40 #inc lude " coder . h"41 #inc lude "decod . h"42 #inc lude " exc_lbc . h"43 #inc lude " u t i l_ lbc . h"44 #inc lude "cod_cng . h"45 #inc lude "dec_cng . h"46 #inc lude "vad . h"4748 /⇤ Funciones para tomar medidas de consumo ⇤/49 #inc lude " . . / consumo . h"5051 /⇤ Global v a r i a b l e s ⇤/52 enum Wmode WrkMode = Both ;53 enum Crate WrkRate = Rate63 ;5455 i n t PackedFrameSize [ 2 ] = {56 24 ,57 2058 } ;5960 Flag UseHp = True ;61 Flag UsePf = True ;62 Flag UseVx = False ;63 Flag UsePr = True ;

157

Page 164: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

6465 char SignOn [ ] = "ITU�T G.723 . 1 ANSI C FIXED POINT CODEC Ver

5 .2 ( Re lease 2 , June 2006) \n" ;6667 NSNumber ⇤g723_1 ( i n t argc , char ⇤argv [ ] , NSString ⇤datos , i n t

i t e r a c i o n )68 {69 FILE ⇤ I fp , ⇤Ofp ; /⇤ I /O F i l e po i n t e r s ⇤/70 FILE ⇤Fep = NULL; /⇤ Frame e r a su r e s f i l e

po in t e r ⇤/71 FILE ⇤Ratp = NULL; /⇤ Rate f i l e po in t e r ⇤/7273 long FrCnt = 0 ;74 long FlLen ;7576 Word16 DataBuff [ Frame ] ;77 Word16 Crc ;78 char Rate_Rd ;7980 char Line [ 2 4 ] ;8182 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/83 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/8485 p r i n t f (" %s " , SignOn ) ;8687 /⇤ Process arguments and open I /O f i l e s ⇤/88 FlLen = Proces s_Fi l e s ( &Ifp , &Ofp , &Fep , &Ratp , argc , argv

) ;8990 /⇤91 I n i t coder and the decoder92 ⇤/93 Init_Coder ( ) ;94 Init_Decod ( ) ;9596 /⇤ I n i t Comfort Noise Functions ⇤/97 i f ( UseVx ) {98 Init_Vad ( ) ;99 Init_Cod_Cng ( ) ;

100 }101 Init_Dec_Cng ( ) ;102103 /⇤ Medimos tiempo i n i c i a l ⇤/104 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;105106 /⇤ Process a l l the input f i l e ⇤/107 do {108109 switch ( WrkMode ) {110111 case Both :112 i f (Ratp != NULL) {113 f r ead ( ( char ⇤)&Rate_Rd , s i z e o f ( char ) , 1 ,

Ratp ) ;114 WrkRate = (enum Crate )Rate_Rd ;115 }116 i f ( WrkRate == Rate53 ) reset_max_time ( ) ;

158

Page 165: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

117 Read_lbc ( DataBuff , Frame , I f p ) ;118 Coder ( DataBuff , Line ) ;119 Decod ( DataBuff , Line , (Word16) 0 ) ;120 Write_lbc ( DataBuff , Frame , Ofp ) ;121 break ;122123 case Cod :124 i f (Ratp != NULL) {125 f r ead ( ( char ⇤)&Rate_Rd , s i z e o f ( char ) , 1 ,

Ratp ) ;126 WrkRate = (enum Crate )Rate_Rd ;127 }128 i f ( WrkRate == Rate53 ) reset_max_time ( ) ;129 Read_lbc ( DataBuff , Frame , I f p ) ;130 Coder ( DataBuff , Line ) ;131 Line_Wr( Line , Ofp ) ;132 break ;133134 case Dec :135 i f (Line_Rd( Line , I f p ) == (�1) ) {136 FlLen = FrCnt ;137 break ;138 }139 i f ( Fep == NULL )140 Crc = (Word16) 0 ;141 e l s e142 f r ead ( ( char ⇤)&Crc , s i z e o f (Word16) , 1 , Fep

) ;143 Decod ( DataBuff , Line , Crc ) ;144 Write_lbc ( DataBuff , Frame , Ofp ) ;145 break ;146 }147148 FrCnt ++ ;149 i f ( UsePr ) {150 i f ( WrkMode == Dec ) {151 i f ( FrCnt < FlLen ) {152 f p r i n t f ( stdout , "Done : %6ld \ r " , FrCnt ) ;153 }154 }155 e l s e {156 f p r i n t f ( stdout , "Done : %6ld %3ld \ r " , FrCnt ,

FrCnt⇤100/FlLen ) ;157 }158 f f l u s h ( stdout ) ;159 }160161 /⇤ Medimos tiempo de proceso de cada trama ⇤/162163164 } whi l e ( FrCnt < FlLen ) ;165 //pongo 1 porque s o l o hay dos medic iones , p r i n c i p i o y f i n a l

de l proceso166 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;167168 i f ( I f p ) { ( void ) f c l o s e ( I f p ) ; }169 i f (Ofp ) { ( void ) f c l o s e (Ofp ) ; }170 i f (Fep ) { ( void ) f c l o s e (Fep ) ; }171 i f (Ratp ) { ( void ) f c l o s e (Ratp ) ; }172

159

Page 166: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

173 /⇤ Preparamos nombre de l f i c h e r o . dat para pa s a r s e l o a l afunc ion consumo ⇤/

174 /⇤ i f (WrkRate == Rate53 ) {175 f i chero_datos="g723_1_53 . dat " ;176 i f (UseVx) {177 f i chero_datos="g723_1_53_VAD. dat " ;178 }179 }180 e l s e {181 f i chero_datos="g723_1_63 . dat " ;182 i f (UseVx) {183 f i chero_datos="g723_1_63_VAD. dat " ;184 }185 }186 ⇤/187 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/188 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;189 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;190 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;191 NSNumber ⇤ l og=n i l ;192 i f ( WrkMode == Dec ) {193 log=consumo ( tabla_tiempos , 1 , datosSa l ida , FrCnt , ’ d ’ ,

i t e r a c i on ,TIEMPODETRAMAG723) ;194 } e l s e {195 log=consumo ( tabla_tiempos , 1 , datosSa l ida , FrCnt , ’ c ’ ,

i t e r a c i on ,TIEMPODETRAMAG723) ;196197 }198 re turn log ;199200 }201202203 /⇤204 This func t i on p r o c e s s e s the argument parameters . The

func t i on205 opens the IO f i l e s , and s e t s the g l oba l arguments

ac co rd ing ly206 to the command l i n e parameters .207 ⇤/208 long Proces s_Fi l e s ( FILE ⇤⇤ I fp , FILE ⇤⇤Ofp , FILE ⇤⇤Fep , FILE

⇤⇤Ratp ,209 i n t Argc , char ⇤Argv [ ]

)210 {211 i n t i ;212 long Flen ;213 char ⇤FerFileName = NULL ;214 char ⇤RateFileName = NULL ;215216 /⇤217 Process the argument l i s t , i f any218 ⇤/219 i f ( Argc < 3 ) {220 p r i n t f (" Usage : %s [ opt ions ] i n p u t f i l e o u t p u t f i l e \n" ,

Argv [ 0 ] ) ;221 e x i t (1 ) ;222 }

160

Page 167: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

223224 f o r ( i = 1 ; i < Argc�2 ; i ++ ) {225226 /⇤ Check the coder ra t e ⇤/227 i f ( ! strncmp ( "�r " , Argv [ i ] , 2) ) {228 i f ( ! strcmp ("63" , Argv [ i ]+2) ) {229 WrkRate = Rate63 ;230 cont inue ;231 }232233 e l s e i f ( ! strcmp ("53" , Argv [ i ]+2) ) {234 WrkRate = Rate53 ;235 cont inue ;236 }237238 e l s e {239 RateFileName = &Argv [ i ] [ 2 ] ;240 cont inue ;241 }242 }243244 /⇤ Check Working mode ⇤/245 i f ( ! strcmp("�b" , Argv [ i ] ) ) {246 WrkMode = Both ;247 cont inue ;248 }249250 i f ( ! strcmp("�c " , Argv [ i ] ) ) {251 WrkMode = Cod ;252 cont inue ;253 }254255 i f ( ! strcmp("�d" , Argv [ i ] ) ) {256 WrkMode = Dec ;257 cont inue ;258 }259260 i f ( ! strcmp("�v" , Argv [ i ] ) ) {261 UseVx = True ;262 cont inue ;263 }264265 i f ( ! strcmp("�Noh" , Argv [ i ] ) ) {266 UseHp = False ;267 cont inue ;268 }269270 i f ( ! strcmp("�Nop" , Argv [ i ] ) ) {271 UsePf = Fal se ;272 cont inue ;273 }274275 i f ( ! strncmp ( "� f " , Argv [ i ] , 2) ) {276 FerFileName = &Argv [ i ] [ 2 ] ;277 cont inue ;278 }279280 i f ( ! strcmp("�n" , Argv [ i ] ) ) {281 UsePr = False ;282 cont inue ;

161

Page 168: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

283 }284285 f p r i n t f ( s tde r r , " I l l e g a l argument , %s \n" , Argv [ i ] ) ;286 e x i t (1 ) ;287 }288289 ⇤ I f p = fopen ( Argv [ Argc�2] , " rb ") ;290 i f ( ⇤ I f p == NULL ) {291 f p r i n t f ( s tde r r , " I nva l i d input f i l e name : %s \n" , Argv [

Argc�2] ) ;292 e x i t (1 ) ;293 }294295 i f ( UsePr )296 p r i n t f (" Input f i l e : %s \n" , Argv [ Argc�2] ) ;297298 ⇤Ofp = fopen ( Argv [ Argc �1] , "wb") ;299 i f ( ⇤Ofp == NULL ) {300 f p r i n t f ( s tde r r , "Can ’ t open output f i l e : %s \n" , Argv [

Argc�1] ) ;301 e x i t (1 ) ;302 }303 i f ( UsePr )304 p r i n t f ("Output f i l e : %s \n" , Argv [ Argc�1] ) ;305306 /⇤ Open Fer f i l e i f r equ i r ed ⇤/307 i f ( WrkMode == Dec ) {308309 i f ( FerFileName != NULL ) {310 ⇤Fep = fopen ( FerFileName , " rb" ) ;311 i f ( ⇤Fep == NULL ) {312 f p r i n t f ( s tde r r , "Can ’ t open FER f i l e : %s \n" ,

FerFileName ) ;313 e x i t (1 ) ;314 }315 i f ( UsePr )316 p r i n t f ("FER f i l e : %s \n" , FerFileName ) ;317 }318 }319 e l s e {320 i f ( RateFileName != NULL ) {321 ⇤Ratp = fopen ( RateFileName , " rb" ) ;322 i f ( ⇤Ratp == NULL ) {323 f p r i n t f ( s tde r r , "Can ’ t open Rate f i l e : %s \n" ,

RateFileName ) ;324 e x i t (1 ) ;325 }326 i f ( UsePr )327 p r i n t f (" Rate f i l e : %s \n" , RateFileName )

;328 }329 }330331 /⇤ Options r epor t ⇤/332 i f ( UsePr ) {333334 p r i n t f (" Options : \ n") ;335 i f (WrkMode == Both )336 p r i n t f (" Encoder/Decoder\n") ;337 e l s e i f (WrkMode == Cod )

162

Page 169: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

338 p r i n t f (" Encoder\n") ;339 e l s e340 p r i n t f (" Decoder\n") ;341342343 i f ( WrkMode != Cod ) {344 i f ( UsePf == 0 )345 p r i n t f (" P o s t f i l t e r d i s ab l ed \n") ;346 e l s e347 p r i n t f (" P o s t f i l t e r enabled \n") ;348 }349350 i f ( WrkMode <= Cod ) {351 i f (⇤Ratp == NULL) {352 i f (WrkRate == Rate63 )353 p r i n t f (" Rate 6 .3 kb/ s \n") ;354 e l s e355 p r i n t f (" Rate 5 .3 kb/ s \n") ;356 }357 i f (UseHp == 0 )358 p r i n t f (" H i g hp a s s f i l t e r d i s ab l ed \n") ;359 e l s e360 p r i n t f (" H i g hp a s s f i l t e r enabled \n") ;361 i f (UseVx == 0 )362 p r i n t f ("VAD/CNG di sab l ed \n") ;363 e l s e364 p r i n t f ("VAD/CNG enabled \n") ;365 }366 }367368 /⇤369 Compute the f i l e l ength370 ⇤/371 f s e e k ( ⇤ I fp , 0L , SEEK_END ) ;372 Flen = f t e l l ( ⇤ I f p ) ;373 rewind ( ⇤ I f p ) ;374 i f ( WrkMode == Dec )375 Flen = 0 x 7 f f f f f f f L ;376 e l s e377 Flen /= s i z e o f (Word16) ⇤Frame ;378379 re turn Flen ;380 }

C.2.4. Códec G.729En esta subsección tenemos las modificaciones efectuadas al códec G.729 so-

bre las hechas en la subsección B.3.5, basicamente se usará el mismo código paralas clases y las cabeceras y sólo se han hecho modificaciones en los códigos delcodificador y descodificador, igual que antes se separa según la versión normalo la simplificada.

C.2.4.1. Versión normal

g729coder.m

163

Page 170: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤9 ITU�T G.729 Speech Coder with Annex B ANSI�C Source Code

10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l15 Al l r i g h t s r e s e rved .16 ⇤/171819 /⇤��������������������������������������������������⇤20 ⇤ Main program of the ITU�T G.729 8 kb i t / s encoder .

⇤21 ⇤

⇤22 ⇤ Usage : coder sp e e ch_f i l e b i t s t r e am_f i l e

⇤23 ⇤��������������������������������������������������⇤/2425 #inc lude <s td i o . h>26 #inc lude <s t d l i b . h>2728 #inc lude " typede f . h"29 #inc lude "basic_op . h"30 #inc lude " ld8k . h"31 #inc lude "dtx . h"32 #inc lude " oc t e t . h"33 #inc lude " coder . h"3435 /⇤ Funciones para tomar medidas de consumo ⇤/36 #inc lude " . . / consumo . h"3738 NSNumber ⇤ g729coder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )39 {40 FILE ⇤ f_speech ; /⇤ F i l e o f speech data

⇤/41 FILE ⇤ f_ s e r i a l ; /⇤ F i l e o f s e r i a l b i t s f o r

t ransmi s s i on ⇤/4243 extern Word16 ⇤new_speech ; /⇤ Pointer to new speech data

⇤/4445 Word16 prm [PRM_SIZE+1] ; /⇤ Analys i s parameters .

⇤/46 Word16 s e r i a l [ SERIAL_SIZE ] ; /⇤ Output b i t s t ream bu f f e r

⇤/47 Word16 syn [L_FRAME] ; /⇤ Buf f e r f o r s yn th e s i s speech

⇤/48

164

Page 171: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

49 Word16 i , frame ; /⇤ frame counter ⇤/50 Word32 count_frame ;5152 /⇤ For G.729B ⇤/53 Word16 nb_words ;54 Word16 vad_enable ;5556 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/57 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/5859 p r i n t f ("\n") ;60 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729 8 KBIT/S SPEECH CODER

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;61 p r i n t f (" (WITH ANNEX B)

\n") ;62 p r i n t f ("\n") ;63 p r i n t f("������������������� Fixed po int C s imu la t i on

�����������������\n") ;64 p r i n t f ("\n") ;65 p r i n t f("������������ Vers ion 1 .5 ( Re lease 2 , November 2006)

����������\n") ;66 p r i n t f ("\n") ;676869 /⇤����������������������������������������⇤70 ⇤ Open speech f i l e and r e s u l t f i l e ( output s e r i a l b i t stream )

⇤71 ⇤����������������������������������������⇤/7273 i f ( argc != 4 )74 {75 p r i n t f (" Usage : %s spe e ch_f i l e b i t s t r e am_f i l e VAD_flag\

n" , argv [ 0 ] ) ;76 p r i n t f ("\n") ;77 p r i n t f ("Format f o r sp e e ch_f i l e : \ n") ;78 p r i n t f (" Speech i s read from a binary f i l e o f 16 b i t s

PCM data . \ n") ;79 p r i n t f ("\n") ;80 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;81 p r i n t f (" One (2�byte ) synchron i za t i on word \n") ;82 p r i n t f (" One (2�byte ) s i z e word , \ n") ;83 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;84 p r i n t f ("\n") ;85 p r i n t f ("VAD f l a g : \ n") ;86 p r i n t f (" 0 to d i s ab l e the VAD\n") ;87 p r i n t f (" 1 to enable the VAD\n") ;88 e x i t (1 ) ;89 }9091 i f ( ( f_speech = fopen ( argv [ 1 ] , " rb ") ) == NULL) {92 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;93 e x i t (0 ) ;94 }95 p r i n t f (" Input speech f i l e : %s \n" , argv [ 1 ] ) ;9697 i f ( ( f_ s e r i a l = fopen ( argv [ 2 ] , "wb") ) == NULL) {

165

Page 172: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

98 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv[ 2 ] ) ;

99 e x i t (0 ) ;100 }101 p r i n t f (" Output b i t s t ream f i l e : %s \n" , argv [ 2 ] ) ;102103 vad_enable = (Word16) a t o i ( argv [ 3 ] ) ;104 i f ( vad_enable == 1)105 p r i n t f (" VAD enabled \n") ;106 e l s e107 p r i n t f (" VAD d i sab l ed \n") ;108109 #i f n d e f OCTET_TX_MODE110 p r i n t f (" OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;111 #end i f112113 /⇤����������������������������������������⇤114 ⇤ I n i t i a l i z a t i o n o f the coder .

⇤115 ⇤����������������������������������������⇤/116117 Init_Pre_Process ( ) ;118 Init_Coder_ld8k ( ) ;119 f o r ( i =0; i<PRM_SIZE; i++) prm [ i ] = (Word16) 0 ;120121 /⇤ f o r G.729B ⇤/122 Init_Cod_cng ( ) ;123124 /⇤ To f o r c e the input and output to be time�a l i gned the

va r i a b l e SYNC125 has to be de f ined . Note : the t e s t v e c t o r s were generated

with t h i s opt ion126 d i s ab l ed127 ⇤/128129 #i f d e f SYNC130 /⇤ Read L_NEXT f i r s t speech data ⇤/131132 f r ead (&new_speech[�L_NEXT] , s i z e o f (Word16) , L_NEXT, f_speech )

;133 #i f d e f HARDW134 /⇤ s e t 3 LSB’ s to zero ⇤/135 f o r ( i =0; i < L_NEXT; i++)136 new_speech[�L_NEXT+i ] = new_speech[�L_NEXT+i ] & 0xFFF8 ;137 #end i f138 Pre_Process(&g729b_new_speech[�L_NEXT] , L_NEXT) ;139 #end i f140141 /⇤ Loop f o r each "L_FRAME" speech data . ⇤/142143 frame =0;144 count_frame = 0L ;145146 /⇤ Medimos tiempo i n i c i a l ⇤/147 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;148149 whi l e ( f r ead ( new_speech , s i z e o f (Word16) , L_FRAME, f_speech )

== L_FRAME)150 {151

166

Page 173: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

152 p r i n t f ("Frame = %d\ r " , count_frame++) ;153154 #i f d e f HARDW155 /⇤ s e t 3 LSB’ s to zero ⇤/156 f o r ( i =0; i < L_FRAME; i++) g729b_new_speech [ i ] =

g729b_new_speech [ i ] & 0xFFF8 ;157 #end i f158159 i f ( frame == 32767) frame = 256 ;160 e l s e frame++;161162 Pre_Process ( new_speech , L_FRAME) ;163164 Coder_ld8k (prm , syn , frame , vad_enable ) ;165166 prm2bits_ld8k ( prm , s e r i a l ) ;167168 nb_words = add ( (Word16) s e r i a l [ 1 ] , 2) ;169 // fw r i t e ( s e r i a l , s i z e o f (Word16) , nb_words , f_ s e r i a l ) ;170171 }172 /⇤ Medimos tiempo f i n a l de proceso ⇤/173 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;174175 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/176 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;177 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;178 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;179 NSNumber ⇤ l og=n i l ;180 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame

, ’ c ’ , i t e r a c i on ,TIEMPODETRAMAG729) ;181182183 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;184185 re turn log ;186 }

g729decoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤9 ITU�T G.729 Speech Coder with Annex B ANSI�C Source Code

10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l

167

Page 174: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

15 Al l r i g h t s r e s e rved .16 ⇤/1718 /⇤������������������������������������������������⇤19 ⇤ Main program of the ITU�T G.729 8 kb i t / s decoder .

⇤20 ⇤

⇤21 ⇤ Usage : decoder b i t s t r e am_f i l e syn th_f i l e

⇤22 ⇤

⇤23 ⇤������������������������������������������������⇤/2425 #inc lude <s t d l i b . h>26 #inc lude <s td i o . h>2728 #inc lude " typede f . h"29 #inc lude "basic_op . h"30 #inc lude " ld8k . h"31 #inc lude "dtx . h"32 #inc lude " oc t e t . h"33 #inc lude " decoder . h"3435 /⇤ Funciones para tomar medidas de consumo ⇤/36 #inc lude " . . / consumo . h"3738 /⇤������������������������������������������������⇤39 ⇤ Main decoder rou t ine

⇤40 ⇤������������������������������������������������⇤/4142 NSNumber ⇤ g729decoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )43 {44 Word16 synth_buf [L_FRAME+M] , ⇤ synth ; /⇤ Synthe s i s

⇤/45 Word16 parm [PRM_SIZE+2] ; /⇤ Synthes i s parameters

⇤/46 Word16 Az_dec [MP1⇤2 ] , ⇤ptr_Az ; /⇤ Decoded Az f o r post� f i l t e r

⇤/47 Word16 T0_f i rst ; /⇤ Pitch lag in 1 s t subframe

⇤/48 Word16 pst_out [L_FRAME] ; /⇤ P o s t f i l t e r output

⇤/4950 Word16 vo i c i ng ; /⇤ vo i c i ng from prev ious frame

⇤/51 Word16 s f_vo ic ; /⇤ vo i c i ng f o r subframe

⇤/5253 Word16 i , Vad ;54 Word32 count_frame ;55 FILE ⇤ f_syn , ⇤ f_ s e r i a l ;5657 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/58 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

168

Page 175: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

guardan l o s datos ⇤/59 i n t vad_enable=0; /⇤ Bandera que i nd i c a e l uso de VAD ⇤/6061 p r i n t f ("\n") ;62 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729 8 KBIT/S SPEECH DECODER

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;63 p r i n t f (" (WITH ANNEX B)

\n") ;64 p r i n t f ("\n") ;65 p r i n t f("������������������� Fixed po int C s imu la t i on

�������������������\n") ;66 p r i n t f ("\n") ;67 p r i n t f("������������ Vers ion 1 .5 ( Re lease 2 , November 2006)

������������\n") ;68 p r i n t f ("\n") ;6970 /⇤ Passed arguments ⇤/7172 i f ( argc != 3 )73 {74 p r i n t f (" Usage : %s b i t s t r e am_f i l e output speech_f i l e \n" ,

argv [ 0 ] ) ;75 p r i n t f ("\n") ;76 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;77 p r i n t f (" One (2�byte ) synchron i za t i on word , \ n") ;78 p r i n t f (" One (2�byte ) s i z e word , \ n") ;79 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;80 p r i n t f ("\n") ;81 p r i n t f ("Format f o r output speech_f i l e : \ n") ;82 p r i n t f (" Output i s wr i t t en to a binary f i l e o f 16 b i t s

data . \ n") ;83 e x i t ( 1 ) ;84 }8586 /⇤ Open f i l e f o r s yn th e s i s and packed s e r i a l stream ⇤/8788 i f ( ( f_ s e r i a l = fopen ( argv [ 1 ] , " rb ") ) == NULL )89 {90 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;91 e x i t (0 ) ;92 }9394 i f ( ( f_syn = fopen ( argv [ 2 ] , "wb") ) == NULL )95 {96 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 2 ] ) ;97 e x i t (0 ) ;98 }99 p r i n t f (" Input b i t s t ream f i l e : %s \n" , argv [ 1 ] ) ;

100 p r i n t f (" Synthes i s speech f i l e : %s \n" , argv [ 2 ] ) ;101102 #i f n d e f OCTET_TX_MODE103 p r i n t f ("OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;104 #end i f105106 /⇤������������������������������������������������⇤107 ⇤ I n i t i a l i z a t i o n o f decoder

⇤108 ⇤������������������������������������������������⇤/

169

Page 176: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

109110 f o r ( i =0; i<M; i++) synth_buf [ i ] = 0 ;111 synth = synth_buf + M;112113 Init_Decod_ld8k ( ) ;114 In i t_Post_Fi l te r ( ) ;115 Init_Post_Process ( ) ;116 vo i c i ng = 60 ;117118 /⇤ f o r G.729b ⇤/119 Init_Dec_cng ( ) ;120121 /⇤������������������������������������������������⇤122 ⇤ Loop f o r each "L_FRAME" speech data

⇤123 ⇤������������������������������������������������⇤/124125 count_frame = 0L ;126127 /⇤ Medimos tiempo i n i c i a l ⇤/128 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;129130 whi l e ( read_frame ( f_s e r i a l , parm) != 0) {131132 p r i n t f ("Frame = %d\ r " , count_frame++) ;133134 Decod_ld8k (parm , vo ic ing , synth , Az_dec , &T0_first , &Vad) ;135136 /⇤ P o s t f i l t e r ⇤/137 vo i c i ng = 0 ;138 ptr_Az = Az_dec ;139 f o r ( i =0; i<L_FRAME; i+=L_SUBFR) {140 Post ( T0_first , &synth [ i ] , ptr_Az , &pst_out [ i ] , &sf_voic ,

Vad) ;141 i f ( s f_vo ic != 0) { vo i c i ng = sf_vo ic ; }142 ptr_Az += MP1;143 }144 Copy(&synth_buf [L_FRAME] , &synth_buf [ 0 ] , M) ;145146 Post_Process ( pst_out , L_FRAME) ;147148 #i f d e f HARDW149 {150 Word16 ⇤my_pt ;151 Word16 my_temp ;152 i n t my_i ;153 my_pt = pst_out ;154 f o r (my_i=0; my_i < L_FRAME; my_i++) {155 my_temp = ⇤my_pt ;156 my_temp = g729b_add ( my_temp, (Word16) 4) ; /⇤ Rounding

on 13 b i t ⇤/157 my_temp = my_temp & 0xFFF8 ; /⇤ mask on 13 b i t ⇤/158 ⇤my_pt++ = my_temp ;159 }160 }161 #end i f162163 fw r i t e ( pst_out , s i z e o f (Word16) , L_FRAME, f_syn ) ;164165 /⇤ Vemos s i se hace uso de VAD ⇤/

170

Page 177: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

166 i f ( ! Vad)167 vad_enable=1;168 /⇤ Medimos tiempo de proceso de cada trama ⇤/169 }170 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;171 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/172 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;173 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;174 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;175 NSNumber ⇤ l og=n i l ;176 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame , ’ d ’ ,

i t e r a c i on ,TIEMPODETRAMAG729) ;177178179 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;180181 re turn log ;182 }

C.2.4.2. Versión simplificada

g729acoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤9 ITU�T G.729A Speech Coder with Annex B ANSI�C Source Code

10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l15 Al l r i g h t s r e s e rved .16 ⇤/1718 /⇤��������������������������������������������������⇤19 ⇤ Main program of the ITU�T G.729A 8 kb i t / s encoder .

⇤20 ⇤

⇤21 ⇤ Usage : coder sp e e ch_f i l e b i t s t r e am_f i l e

⇤22 ⇤��������������������������������������������������⇤/2324 #inc lude <s td i o . h>25 #inc lude <s t d l i b . h>26

171

Page 178: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

27 #inc lude " typede f . h"28 #inc lude "basic_op . h"29 #inc lude " ld8a . h"30 #inc lude "dtx . h"31 #inc lude " oc t e t . h"32 #inc lude " g729acoder . h"3334 /⇤ Funciones para tomar medidas de consumo ⇤/35 #inc lude " . . / consumo . h"3637 NSNumber ⇤ g729acoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos ,

i n t i t e r a c i o n )38 {39 FILE ⇤ f_speech ; /⇤ F i l e o f speech data

⇤/40 FILE ⇤ f_ s e r i a l ; /⇤ F i l e o f s e r i a l b i t s f o r

t ransmi s s i on ⇤/4142 extern Word16 ⇤new_speech ; /⇤ Pointer to new speech data

⇤/4344 Word16 prm [PRM_SIZE+1] ; /⇤ Analys i s parameters + frame

type ⇤/45 Word16 s e r i a l [ SERIAL_SIZE ] ; /⇤ Output b i t s t ream bu f f e r

⇤/4647 Word16 frame ; /⇤ frame counter ⇤/48 Word32 count_frame ;4950 /⇤ For G.729B ⇤/51 Word16 nb_words ;52 Word16 vad_enable ;5354 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/55 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/5657 p r i n t f ("\n") ;58 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729A 8 KBIT/S SPEECH CODER

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;59 p r i n t f (" (WITH ANNEX B)

\n") ;60 p r i n t f ("\n") ;61 p r i n t f("������������������� Fixed po int C s imu la t i on

�����������������\n") ;62 p r i n t f ("\n") ;63 p r i n t f("������������ Vers ion 1 .5 ( Re lease 2 , November 2006)

����������\n") ;64 p r i n t f ("\n") ;656667 /⇤����������������������������������������⇤68 ⇤ Open speech f i l e and r e s u l t f i l e ( output s e r i a l b i t stream )

⇤69 ⇤����������������������������������������⇤/7071 i f ( argc != 4 ) {72 p r i n t f (" Usage : %s spe e ch_f i l e b i t s t r e am_f i l e VAD_flag\n" ,

argv [ 0 ] ) ;

172

Page 179: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

73 p r i n t f ("\n") ;74 p r i n t f ("Format f o r sp e e ch_f i l e : \ n") ;75 p r i n t f (" Speech i s read from a binary f i l e o f 16 b i t s PCM

data . \ n") ;76 p r i n t f ("\n") ;77 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;78 p r i n t f (" One (2�byte ) synchron i za t i on word \n") ;79 p r i n t f (" One (2�byte ) s i z e word , \ n") ;80 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;81 p r i n t f ("\n") ;82 p r i n t f ("VAD f l a g : \ n") ;83 p r i n t f (" 0 to d i s ab l e the VAD\n") ;84 p r i n t f (" 1 to enable the VAD\n") ;85 e x i t (1 ) ;86 }8788 i f ( ( f_speech = fopen ( argv [ 1 ] , " rb ") ) == NULL) {89 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;90 e x i t (0 ) ;91 }92 p r i n t f (" Input speech f i l e : %s \n" , argv [ 1 ] ) ;9394 i f ( ( f_ s e r i a l = fopen ( argv [ 2 ] , "wb") ) == NULL) {95 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 2 ] ) ;96 e x i t (0 ) ;97 }98 p r i n t f (" Output b i t s t ream f i l e : %s \n" , argv [ 2 ] ) ;99

100 vad_enable = (Word16) a t o i ( argv [ 3 ] ) ;101 i f ( vad_enable == 1)102 p r i n t f (" VAD enabled \n") ;103 e l s e104 p r i n t f (" VAD d i sab l ed \n") ;105106 #i f n d e f OCTET_TX_MODE107 p r i n t f (" OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;108 #end i f109110 /⇤����������������������������������������⇤111 ⇤ I n i t i a l i z a t i o n o f the coder .

⇤112 ⇤����������������������������������������⇤/113114 Init_Pre_Process ( ) ;115 Init_Coder_ld8a ( ) ;116 Set_zero (prm , PRM_SIZE+1) ;117118 /⇤ f o r G.729B ⇤/119 Init_Cod_cng ( ) ;120121122 /⇤ Loop f o r each "L_FRAME" speech data . ⇤/123124 frame = 0 ;125 count_frame = 0L ;126127 /⇤ Medimos tiempo i n i c i a l ⇤/128 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;

173

Page 180: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

129130 whi l e ( f r ead ( new_speech , s i z e o f (Word16) , L_FRAME, f_speech )

== L_FRAME)131 {132 p r i n t f ("Frame = %d\ r " , count_frame++) ;133134 i f ( frame == 32767) frame = 256 ;135 e l s e frame++;136137 Pre_Process ( new_speech , L_FRAME) ;138 Coder_ld8a (prm , frame , vad_enable ) ;139 prm2bits_ld8k ( prm , s e r i a l ) ;140 nb_words = s e r i a l [ 1 ] + (Word16) 2 ;141 // fw r i t e ( s e r i a l , s i z e o f (Word16) , nb_words , f_ s e r i a l ) ;142143 }144 /⇤ Medimos tiempo f i n a l de proceso ⇤/145 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;146147 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/148 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;149 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;150 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;151 NSNumber ⇤ l og=n i l ;152 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame , ’ c ’ ,

i t e r a c i on ,TIEMPODETRAMAG729) ;153154155 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;156157 re turn log ;158 }

g729adecoder.m

1 /⇤2 Modif icado por Jorge Lopez3 Modif icado por Pablo I s i d o r o Ca r r i l l o Alvarez4 Anadidas func i one s para tomar medidas de consumo .5 ⇤/67 /⇤ ITU�T G.729 Software Package Release 2 (November 2006) ⇤/8 /⇤9 ITU�T G.729A Speech Coder with Annex B ANSI�C Source Code

10 Vers ion 1 .5 Last modi f i ed : October 20061112 Copyright ( c ) 1996 ,13 AT&T, France Telecom , NTT, Un iv e r s i t e de Sherbrooke , Lucent

Technolog ies ,14 Rockwell I n t e r n a t i o n a l15 Al l r i g h t s r e s e rved .16 ⇤/1718 /⇤������������������������������������������������⇤

174

Page 181: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

19 ⇤ Main program of the G.729A 8 .0 kb i t / s decoder .⇤

20 ⇤

⇤21 ⇤ Usage : decoder b i t s t r e am_f i l e syn th_f i l e

⇤22 ⇤

⇤23 ⇤������������������������������������������������⇤/2425 #inc lude <s t d l i b . h>26 #inc lude <s td i o . h>2728 #inc lude " typede f . h"29 #inc lude "basic_op . h"30 #inc lude " ld8a . h"31 #inc lude "dtx . h"32 #inc lude " oc t e t . h"33 #inc lude " g729adecoder . h"3435 /⇤ Funciones para tomar medidas de consumo ⇤/36 #inc lude " . . / consumo . h"3738 Word16 bad_lsf ; /⇤ bad LSF i nd i c a t o r ⇤/394041 /⇤42 This v a r i ab l e should be always s e t to zero un l e s s

t ransmi s s i on e r r o r s43 in LSP i nd i c e s are detec ted .44 This v a r i ab l e i s u s e f u l i f the channel coding de s i gne r

dec ide s to45 perform e r r o r check ing on these important parameters . I f an

e r r o r i s46 detec ted on the LSP ind i c e s , the cor re spond ing f l a g i s47 s e t to 1 s i g n a l l i n g to the decoder to perform parameter

s ub s t i t u t i o n .48 (The f l a g s should be s e t back to 0 f o r c o r r e c t t ransmi s s i on )

.49 ⇤/5051 /⇤������������������������������������������������⇤52 ⇤ Main decoder rou t ine

⇤53 ⇤������������������������������������������������⇤/5455 NSNumber ⇤ g729adecoder ( i n t argc , char ⇤argv [ ] , NSString ⇤datos

, i n t i t e r a c i o n )56 {57 Word16 synth_buf [L_FRAME+M] , ⇤ synth ; /⇤ Synthe s i s

⇤/58 Word16 parm [PRM_SIZE+2] ; /⇤ Synthe s i s parameters

⇤/59 Word16 Az_dec [MP1⇤ 2 ] ; /⇤ Decoded Az f o r post�

f i l t e r ⇤/60 Word16 T2 [ 2 ] ; /⇤ Pitch lag f o r 2

subframes ⇤/61

175

Page 182: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

6263 Word16 i , Vad ;64 Word32 count_frame ;65 FILE ⇤ f_syn , ⇤ f_ s e r i a l ;6667 s t r u c t rusage tabla_tiempos [TAM_MAX] ; /⇤ Para r e c o p i l a r

l o s datos de medida ⇤/68 // char ⇤ f i che ro_datos=NULL; /⇤ Nombre de l f i c h e r o en que se

guardan l o s datos ⇤/69 i n t vad_enable=0; /⇤ Bandera que i nd i c a e l uso de VAD ⇤/7071 p r i n t f ("\n") ;72 p r i n t f ("⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤ ITU G.729A 8 .0 KBIT/S SPEECH DECODER

⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤⇤\n") ;73 p r i n t f (" (WITH ANNEX B)

\n") ;74 p r i n t f ("\n") ;75 p r i n t f("������������������ Fixed po int C s imu la t i on

��������������������\n") ;76 p r i n t f ("\n") ;77 p r i n t f("������������� Vers ion 1 .5 ( Re lease 2 , November 2006)

������������\n") ;78 p r i n t f ("\n") ;7980 /⇤ Passed arguments ⇤/8182 i f ( argc != 3) {83 p r i n t f (" Usage : %s b i t s t r e am_f i l e output speech_f i l e \n" , argv

[ 0 ] ) ;84 p r i n t f ("\n") ;85 p r i n t f ("Format f o r b i t s t r e am_f i l e : \ n") ;86 p r i n t f (" One (2�byte ) synchron i za t i on word \n") ;87 p r i n t f (" One (2�byte ) s i z e word , \ n") ;88 p r i n t f (" 80 words (2�byte ) conta in ing 80 b i t s . \ n") ;89 p r i n t f ("\n") ;90 p r i n t f ("Format f o r output speech_f i l e : \ n") ;91 p r i n t f (" Synthe s i s i s wr i t t en to a binary f i l e o f 16 b i t s

data . \ n") ;92 e x i t ( 1 ) ;93 }9495 /⇤ Open f i l e f o r s yn th e s i s and packed s e r i a l stream ⇤/9697 i f ( ( f_ s e r i a l = fopen ( argv [ 1 ] , " rb ") ) == NULL )98 {99 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 1 ] ) ;100 e x i t (0 ) ;101 }102103 i f ( ( f_syn = fopen ( argv [ 2 ] , "wb") ) == NULL )104 {105 p r i n t f (" %s � Error opening f i l e %s ! ! \ n" , argv [ 0 ] , argv

[ 2 ] ) ;106 e x i t (0 ) ;107 }108109 p r i n t f (" Input b i t s t ream f i l e : %s \n" , argv [ 1 ] ) ;110 p r i n t f (" Synthes i s speech f i l e : %s \n" , argv [ 2 ] ) ;111

176

Page 183: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

112 #i f n d e f OCTET_TX_MODE113 p r i n t f ("OCTET TRANSMISSION MODE i s d i s ab l ed \n") ;114 #end i f115116 /⇤������������������������������������������������⇤117 ⇤ I n i t i a l i z a t i o n o f decoder

⇤118 ⇤������������������������������������������������⇤/119120 f o r ( i =0; i<M; i++) synth_buf [ i ] = 0 ;121 synth = synth_buf + M;122123 bad_lsf = 0 ; /⇤ I n i t i a l i z e bad LSF i nd i c a t o r ⇤/124 Init_Decod_ld8a ( ) ;125 In i t_Post_Fi l te r ( ) ;126 Init_Post_Process ( ) ;127128 /⇤ f o r G.729b ⇤/129 Init_Dec_cng ( ) ;130131 /⇤������������������������������������������������⇤132 ⇤ Loop f o r each "L_FRAME" speech data

⇤133 ⇤������������������������������������������������⇤/134135 count_frame = 0L ;136137 /⇤ Medimos tiempo i n i c i a l ⇤/138 get rusage (RUSAGE_SELF,&tabla_tiempos [ 0 ] ) ;139140 whi l e ( read_frame ( f_s e r i a l , parm) != 0)141 {142 p r i n t f ("Frame = %d\ r " , count_frame++) ;143144 Decod_ld8a (parm , synth , Az_dec , T2 , &Vad) ;145 Post_Fi l ter ( synth , Az_dec , T2 , Vad) ; /⇤ Post� f i l t e r

⇤/146 Post_Process ( synth , L_FRAME) ;147148 fw r i t e ( synth , s i z e o f ( shor t ) , L_FRAME, f_syn ) ;149150 /⇤ Vemos s i se hace uso de VAD ⇤/151 i f ( ! Vad)152 vad_enable=1;153 }154155 get rusage (RUSAGE_SELF,&tabla_tiempos [ 1 ] ) ;156 /⇤ Procesamos l a s medidas de consumo r e c o l e c t ada s ⇤/157 NSArray ⇤paths = NSSearchPathForDirectoriesInDomains (

NSDocumentDirectory , NSUserDomainMask , YES) ;158 NSString ⇤documentsDirectory = [ paths objectAtIndex : 0 ] ;159 const char ⇤ dato sSa l ida = [ [ documentsDirectory

stringByAppendingPathComponent : datos ] UTF8String ] ;160 NSNumber ⇤ l og=n i l ;161 log=consumo ( tabla_tiempos , 1 , datosSa l ida , count_frame , ’ d ’ ,

i t e r a c i on ,TIEMPODETRAMAG729A) ;162163164 p r i n t f (" %dframes proce s s ed \n" , count_frame ) ;165

177

Page 184: Metodología de medida de gasto energético para códecs de ...bibing.us.es › proyectos › abreproy › 12143 › descargar... · En la actualidad, los dispositivos móviles ofrecen

166 re turn log ;167 }

178