#include "_xfft.h"
Ir al código fuente de este archivo.
Funciones | |
SPL_FLOAT | Hz2Log (SPL_FLOAT f) |
SPL_FLOAT | Log2Hz (SPL_FLOAT f) |
SPL_FLOAT | Hz2Log10 (SPL_FLOAT f) |
SPL_FLOAT | Log102Hz (SPL_FLOAT f) |
SPL_FLOAT | Hz2Mel (SPL_FLOAT f) |
SPL_FLOAT | Mel2Hz (SPL_FLOAT f) |
SPL_FLOAT | Hz2Bark (SPL_FLOAT f) |
SPL_FLOAT | Bark2Hz (SPL_FLOAT f) |
SPL_FLOAT | Hz2Bin (SPL_FLOAT f, SPL_FLOAT fres) |
SPL_FLOAT | Bin2Hz (SPL_FLOAT f, SPL_FLOAT fres) |
SPL_FLOAT | FbandScaleConvert (SPL_FLOAT f, XFBAND_SCALE from, XFBAND_SCALE to, SPL_FLOAT Fres) |
Conversión de escalas de frecuencia. | |
PRIVATE SPL_BOOL | fband_calcfilters (pFBAND r) |
uso interno | |
PUBLIC pFBAND XAPI | fband_construct (SPL_INT np, SPL_INT nband, XFBAND_FILTER filter, XFBAND_SCALE scale, SPL_FLOAT minfreq, SPL_FLOAT maxfreq, SPL_FLOAT fs, XFFT_WIN win, XFFT_WIN_FUNC winfunc) |
Inicialización de _FBAND. | |
PUBLIC SPL_VOID XAPI | fband_destruct (pFBAND r) |
Destructor para una estructura _FBAND. | |
PUBLIC SPL_BOOL XAPI | fband_setwin (pFBAND r, XFFT_WIN win, XFFT_WIN_FUNC winfunc) |
Modifica el tipo de enventanado. | |
PUBLIC SPL_BOOL XAPI | fband_setnp (pFBAND r, SPL_INT np) |
Fija la longitud de los vectores de entrada. | |
PUBLIC SPL_BOOL XAPI | fband_setnband (pFBAND r, SPL_INT nband) |
Fija el número de bandas. | |
PUBLIC SPL_BOOL XAPI | fband_setfilters (pFBAND r, XFBAND_FILTER filter, XFBAND_SCALE scale) |
Cambia el tipo de filtrado. | |
PUBLIC SPL_BOOL XAPI | fband_setfreqlimits (pFBAND r, SPL_FLOAT minfreq, SPL_FLOAT maxfreq) |
Cambia los límites de frecuencia. | |
PUBLIC SPL_BOOL XAPI | fband_setminfreq (pFBAND r, SPL_FLOAT minfreq) |
Cambia el límite inferior de frecuencia. | |
PUBLIC SPL_BOOL XAPI | fband_setmaxfreq (pFBAND r, SPL_FLOAT maxfreq) |
Cambia el límite superior de frecuencia. | |
PUBLIC SPL_BOOL XAPI | fband_setsrate (pFBAND r, SPL_FLOAT srate) |
Cambia la frecuencia de muestreo de las tramas. | |
PUBLIC SPL_INT XAPI | fband_getnp (pFBAND r) |
Devuelve el número de puntos de los vectores de entrada. | |
PUBLIC SPL_INT XAPI | fband_getnband (pFBAND r) |
Devuelve el número de bandas. | |
PUBLIC XFFT_WIN XAPI | fband_getwin (pFBAND r) |
Devuelve el tipo de enventanado utilizado. | |
PUBLIC SPL_pFLOAT XAPI | fband_getwinvec (pFBAND r) |
Devuelve el vector que contiene la ventana. | |
PUBLIC XFFT_WIN_FUNC XAPI | fband_getwinfunc (pFBAND r) |
Devuelve el puntero a la función de enventanado suministrada por el usuario. | |
PUBLIC SPL_pFLOAT XAPI | fband_getpband (pFBAND r) |
Acceso al vector de salida. | |
PUBLIC SPL_FLOAT XAPI | fband_getminfreq (pFBAND r) |
Acceso al límite inferior de frecuencia. | |
PUBLIC SPL_FLOAT XAPI | fband_getmaxfreq (pFBAND r) |
Acceso al límite superior de frecuencia. | |
PUBLIC SPL_FLOAT XAPI | fband_getsrate (pFBAND r) |
Acceso a la frecuencia de muestreo de las secuencias. | |
PUBLIC SPL_VOID XAPI | fband_dofband (pFBAND r) |
uso interno | |
PUBLIC SPL_VOID XAPI | fband_fband (pFBAND r, SPL_pFLOAT invec) |
Calcula la potencia por bandas de una secuencia. | |
PUBLIC SPL_VOID XAPI | fband_fband_i (pFBAND r, SPL_pINT invec) |
Calcula la potencia por bandas de una secuencia real de valores enteros. | |
PUBLIC SPL_VOID XAPI | fband_fband_i16 (pFBAND r, pINT16 invec) |
Calcula la potencia por bandas de una secuencia real de valores INT16. | |
PUBLIC SPL_VOID XAPI | fband_fband_i32 (pFBAND r, pINT32 invec) |
Calcula la potencia por bandas de una secuencia real de valores INT32. | |
PUBLIC SPL_VOID XAPI | fband_fband_u32 (pFBAND r, pUINT32 invec) |
Calcula la potencia por bandas de una secuencia real de valores UINT32. | |
PUBLIC SPL_VOID XAPI | fband_fband_f32 (pFBAND r, pFLOAT32 invec) |
Calcula la potencia por bandas de una secuencia real de valores FLOAT32. | |
PUBLIC SPL_VOID API | fband2mfcc (pFBAND r, SPL_pFLOAT mfcc, SPL_INT nceps, SPL_INT lift) |
Función para el cálculo de coeficientes MFCC a partir de FBAND. |
Los coeficientes por bandas se definen como la potencia de señal que cae dentro de un banco de filtros. La forma y escala de estos filtros viene determinada por valores tipo XFBAND_FILTER y XFBAND_SCALE respectivamente.
La potencia de cada banda se estima mediante el cálculo de la FFT de la secuencia y un posterior filtrado en frecuencia.
Definición en el archivo xfft4.c.
SPL_FLOAT FbandScaleConvert | ( | SPL_FLOAT | f, | |
XFBAND_SCALE | from, | |||
XFBAND_SCALE | to, | |||
SPL_FLOAT | Fres | |||
) |
Permite convertir de forma sencilla entre las diferentes escalas de frecuencia definidas por XFBAND_SCALE: Frecuencias lineales, en escala logarítmica, escala Mel, bins de un análisis FFT...
f | Valor a convertir | |
from | Escala a la que está el valor f | |
to | Escala a la que se quiere convertir | |
Fres | Resolución frecuencial del análisis FFT (sólo para los casos en los que from o to sean XFBAND_SCALE_BIN. Para cualquier otro caso, poner a 0) |
f
convertido a la escala to
PUBLIC pFBAND XAPI fband_construct | ( | SPL_INT | np, | |
SPL_INT | nband, | |||
XFBAND_FILTER | filter, | |||
XFBAND_SCALE | scale, | |||
SPL_FLOAT | minfreq, | |||
SPL_FLOAT | maxfreq, | |||
SPL_FLOAT | fs, | |||
XFFT_WIN | win, | |||
XFFT_WIN_FUNC | winfunc | |||
) |
Inicializa una estructura _FBAND para el cálculo de potencia por bandas
np | Número de puntos del vector de entrada (del que se quiere calcular la potencia por bandas). Ha de ser mayor que cero, pero no forzosamente potencia de dos. En caso de que no sea potencia de dos, se rellena automáticamente con ceros | |
nband | Número de bandas. Ha de ser mayor acero | |
filter | Forma del filtro de frecuencia a aplicar | |
scale | Escala en la que se deben distribuir las bandas. En escala lineal (XFBAND_SCALE_LIN) todos los filtros tienen el mismo ancho de banda y están equiespaciados. En otras escalas los filtros tienen el mismo ancho de banda y están equiespaciados si las frecuencias se miden en la escala indicada. Esto significa que, vistos en Herzios, su ancho de banda y su posición varía con la frecuencia. | |
minfreq | Frecuencia mínima a considerar (eh Hz). Los nband filtros se distribuyen entre minfreq y maxfreq . | |
maxfreq | Frecuencia máxima a considerar (eh Hz). Los nband filtros se distribuyen entre minfreq y maxfreq . Si se deja a 0 se considera la frecuencia de Nyquist=fs/2 | |
fs | Frecuencia de muestreo de la señal de entrada. Necesario para poder calcular a qué frecuencia corresponde cada bin FFT. | |
win | Codigo que identifica el tipo de ventana a utilizar. Estos tipos est�n definidos en xfft.h (XFFT_WIN). Si se utiliza una ventana, sera de np puntos aunque si el numero de puntos de la fft es menor, se utiliza este otro valor. | |
winfunc | Puntero a una funcion que que suministra el usuario, y que sigue el prototipo indicado (xfft.h). Esta funcion se utiliza para obtener la ventana cuando en win se envia XFFT_WIN_USER. Si este puntero es NULL y se envia XFFT_WIN_USER en win , no se utiliza ningun enventanado (ventana rectangular). |
fband_
???(). Devuelve NULL
si la inicialización falla PUBLIC SPL_VOID XAPI fband_destruct | ( | pFBAND | r | ) |
Destruye una estructura _FBAND. Es necesario llamar a esta función después de haber llamado a fband_construct(), una vez se ha terminado de calcular las potencias por banda
r | puntero a la estructura que se quiere destruir |
PUBLIC SPL_BOOL XAPI fband_setwin | ( | pFBAND | r, | |
XFFT_WIN | win, | |||
XFFT_WIN_FUNC | winfunc | |||
) |
Modifica el tipo de enventanado a utilizar. Los tipos de ventanas están definidos en xfft.h (XFFT_WIN). Si se indica ventana XFFT_WIN_NONE o XFFT_WIN_RECT, se usa ventana rectangular. Si se indica XFFT_WIN_USER, entonces se utilizara la ventana obtenida a traves de la funcion que el usuario suministra. En xfft.h se explica el prototipo que debe seguir esta funcion.
La ventana se maneja de forma optimizada: aunque se active y desactive sucesivamente no se hace ni una cuenta mientras no se cambie su longitud o se cambie de tipo de ventana.
r | Puntero a la estructura _FBAND que se quiere modificar. | |
win | Codigo que identifica el tipo de ventana a utilizar. Estos tipos est�n definidos en xfft.h. | |
winfunc | Puntero a una funcion que que suministra el usuario, y que sigue el prototipo indicado (xfft.h). Esta funcion se utiliza para obtener la ventana cuando en win se envia XFFT_WIN_USER. Si este puntero es NULL y se envia XFFT_WIN_USER en win , no se utiliza ningun enventanado (ventana rectangular). |
PUBLIC SPL_BOOL XAPI fband_setnp | ( | pFBAND | r, | |
SPL_INT | np | |||
) |
Permite modificar el número de puntos de los vectores de entrada (aquellos cuya potencia por bandas se quiere calcular).
r | Puntero a la estructura _FBAND que se quiere modificar. | |
np | Número de puntos de los vectores de entrada. Ha de ser mayor que cero, pero no forzosamente potencia de dos. |
PUBLIC SPL_BOOL XAPI fband_setnband | ( | pFBAND | r, | |
SPL_INT | nband | |||
) |
Permite modificar el número de bandas de frecuencia
r | Puntero a la estructura _FBAND que se quiere modificar. | |
nband | Número de bandas. Ha de ser mayor que cero. |
PUBLIC SPL_BOOL XAPI fband_setfilters | ( | pFBAND | r, | |
XFBAND_FILTER | filter, | |||
XFBAND_SCALE | scale | |||
) |
r | Puntero a la estructura _FBAND que se quiere modificar. | |
filter | Forma del filtro que se quiere aplicar | |
scale | Escala en la que calcular los filtros |
PUBLIC SPL_BOOL XAPI fband_setfreqlimits | ( | pFBAND | r, | |
SPL_FLOAT | minfreq, | |||
SPL_FLOAT | maxfreq | |||
) |
r | Puntero a la estructura _FBAND que se quiere modificar. | |
minfreq | Frecuencia mínima a considerar (eh Hz). | |
maxfreq | Frecuencia máxima a considerar (eh Hz). |
PUBLIC SPL_BOOL XAPI fband_setminfreq | ( | pFBAND | r, | |
SPL_FLOAT | minfreq | |||
) |
r | Puntero a la estructura _FBAND que se quiere modificar. | |
minfreq | Frecuencia mínima a considerar (eh Hz). |
PUBLIC SPL_BOOL XAPI fband_setmaxfreq | ( | pFBAND | r, | |
SPL_FLOAT | maxfreq | |||
) |
r | Puntero a la estructura _FBAND que se quiere modificar. | |
maxfreq | Frecuencia máxima a considerar (eh Hz). |
PUBLIC SPL_BOOL XAPI fband_setsrate | ( | pFBAND | r, | |
SPL_FLOAT | srate | |||
) |
PUBLIC SPL_INT XAPI fband_getnp | ( | pFBAND | r | ) |
PUBLIC SPL_INT XAPI fband_getnband | ( | pFBAND | r | ) |
PUBLIC SPL_pFLOAT XAPI fband_getwinvec | ( | pFBAND | r | ) |
Permite acceder al vector que contiene la ventana utilizada. La longitud de esta ventana viene dada por fband_getnp().
r | Puntero a la estructura _FBAND. |
PUBLIC XFFT_WIN_FUNC XAPI fband_getwinfunc | ( | pFBAND | r | ) |
PUBLIC SPL_pFLOAT XAPI fband_getpband | ( | pFBAND | r | ) |
Permite acceder al vector de la potencia por bandas calculada. El usuario debe haber calculado una potencia por bandas previamente. Este vector es de uso interno y no debe borrarse, aunque se puede modificar.
El vector devuelto tiene fband_getvecnp() puntos
r | Puntero a la estructura _FBAND. |
PUBLIC SPL_FLOAT XAPI fband_getminfreq | ( | pFBAND | r | ) |
Permite conocer el límite inferior de frecuencia. La potencia por bandas se está calculando con fband_getvecnp() bandas situadas entre fband_getminfreq() y fband_getmaxfreq().
Devuelve la verdadera frecuencia inferior, que puede verse modificada con respecto a la indicada en fband_construct() o fband_setfreqlimits() debido a la resolución frecuencial de la FFT.
r | Puntero a la estructura _FBAND. |
PUBLIC SPL_FLOAT XAPI fband_getmaxfreq | ( | pFBAND | r | ) |
Permite conocer el límite superior de frecuencia. La potencia por bandas se está calculando con fband_getvecnp() bandas situadas entre fband_getminfreq() y fband_getmaxfreq().
Devuelve la verdadera frecuencia superior, que puede verse modificada con respecto a la indicada en fband_construct() o fband_setfreqlimits() debido a la resolución frecuencial de la FFT.
r | Puntero a la estructura _FBAND. |
PUBLIC SPL_FLOAT XAPI fband_getsrate | ( | pFBAND | r | ) |
PUBLIC SPL_VOID XAPI fband_fband | ( | pFBAND | r, | |
SPL_pFLOAT | invec | |||
) |
Calcula la potencia por bandas de una secuencia real de valores flotantes. Esta potencia por bandas puede recuperarse mediante fband_getpband()
Previamente se ha tenido que construir la estructura FBAND mediante fband_construct().
r | Puntero a la estructura _FBAND. | |
invec | Vector que contiene la secuencia de valores flotantes cuya potencia por bandas se quiere calcular. Debe tener fband_getnp() puntos. |
PUBLIC SPL_VOID XAPI fband_fband_i | ( | pFBAND | r, | |
SPL_pINT | invec | |||
) |
r | Puntero a la estructura _FBAND | |
invec | Vector que contiene la secuencia de valores enteros. Debe tener rfft_getnp() puntos. |
PUBLIC SPL_VOID XAPI fband_fband_i16 | ( | pFBAND | r, | |
pINT16 | invec | |||
) |
r | Puntero a la estructura _FBAND | |
invec | Vector que contiene la secuencia de valores enteros. Debe tener rfft_getnp() puntos. |
PUBLIC SPL_VOID XAPI fband_fband_i32 | ( | pFBAND | r, | |
pINT32 | invec | |||
) |
r | Puntero a la estructura _FBAND | |
invec | Vector que contiene la secuencia de valores enteros. Debe tener rfft_getnp() puntos. |
PUBLIC SPL_VOID XAPI fband_fband_u32 | ( | pFBAND | r, | |
pUINT32 | invec | |||
) |
r | Puntero a la estructura _FBAND | |
invec | Vector que contiene la secuencia de valores enteros. Debe tener rfft_getnp() puntos. |
PUBLIC SPL_VOID XAPI fband_fband_f32 | ( | pFBAND | r, | |
pFLOAT32 | invec | |||
) |
r | Puntero a la estructura _FBAND | |
invec | Vector que contiene la secuencia de valores enteros. Debe tener rfft_getnp() puntos. |
PUBLIC SPL_VOID API fband2mfcc | ( | pFBAND | r, | |
SPL_pFLOAT | mfcc, | |||
SPL_INT | nceps, | |||
SPL_INT | lift | |||
) |
Esta función aplica una DCT discreta de nceps
puntos al vector de potencia por bandas contenido en r
, lo que proporciona coeficientes mel cepstrum.
r | Puntero a la estructura _FBAND con la potencia por bandas. La potencia por bandas ya debe estar calculada (se debe haber llamado a fband_fband). | |
mfcc | Puntero al buffer que va a recoger los coeficientes MFCC. Debe tener nceps puntos | |
nceps | Número de coeficientes a calcular. Es igual al orden de la DCT a aplicar. | |
lift | Coeficiente de liftering. 0 para no aplicar liftering |