Objetivos:
- Importar un código en lenguaje C a nuestra aplicación
android, mediante Cygwin y la herramienta NDK-build.
-Realizar la FTT de la señal grabada, calcular la energía de
cada frecuencia de ésta y obtener la banda de frecuencia que contiene la mayor
energía.
Lo primero que hicimos fue descargarnos una herramienta que
fuese capaz de construir una librería android “.so” a partir de un código en
lenguaje C, que fue el NDK-build. Para poder generarla necesitamos también
instalar un terminal, en este caso, el Cygwin.
Todo esto era necesario ya que el código en C tenía un método
que realizaba la FFT de una señal a partir de sus muestras y era justo lo que necesitábamos.
La otra opción era realizarlo mediante el filtrado de la práctica normal pero
la FFT nos abría un abanico de funcionalidades.
Lo primero que tuvimos que hacer fue crear un directorio “jni”
dentro de nuestro proyecto “AudioSense”. En este directorio incluimos tanto el
archivo “.mk”, donde definimos el nombre de la librería “.so” a crear y la ruta
del fichero C, como el fichero C, a partir del cual creamos la librería y el cual
contiene el método de la FFT.
Desde Cygwin, situados dentro de la carpeta “jni” arriba
nombrada, ejecutamos el NDK-build, el cual nos genera en ese proyecto la
librería deseada.
Para un correcto funcionamiento, en el código, tuvimos que
declarar el método como “native” además de cargar la librería.
El primer problema que nos encontramos es que al “llamar” a
la método realfft() compilaba pero no
era reconocido en la ejecución.
Para solucionar esto tuvimos que añadir algunos prefijos al
nombre del método para fijar mejor su
ubicación y que fuese “reconocido” (y también a los métodos llamados dentro de
éste) y añadir varios argumentos al
propio método (JNIEnv y jobject).
Volvimos a realizar el proceso arriba explicado desde el
Cygwin y el método ya era reconocido tanto en la compilación como en la
ejecución.
Una vez hecho todo esto, obtuvimos la FFT de la señal mediante el método realfft(), al cual le pasábamos
como argumento 257 muestras de la señal grabada. Este método nos devuelve 128
valores de la FFT de la señal repartidos entre 0 y 4KHz (tanto su parte real
como su parte imaginaria).
A partir de estos valores, calculamos la energía en cada
frecuencia y luego obtuvimos, mediante una media ponderada, la “frecuencia
central” de la banda que acumula mayor energía. Mediante el valor de esta “frecuencia
central” y la energía total calcularemos
los parámetros de vibración.
Nuestro siguiente objetivo es un ecualizador gráfico para
comprobar la funcionalidad de todo lo arriba explicado.
No hay comentarios:
Publicar un comentario