Escolar Documentos
Profissional Documentos
Cultura Documentos
+ +
> + +
=
0 1 , 1 , 1 ) 1 , ( , , 0
0 1 , 1 , 1 ) 1 , ( , , 1
) , (
m n E m n E m n E m n E
m n E m n E m n E m n E
m n F (1)
En la siguiente figura se muestra un ejemplo de un bloque de 256
sub-huellas de 32 bits, extrados con este esquema a partir de un trozo de
O Fortuna de Carl Orff. Un bit a 1 corresponde a un pxel blanco y uno a
0, a un pxel negro. La fig. 7a corresponde al bloque obtenido a partir de la
versin en calidad CD, mientras que el 7b ha sido obtenido a partir de la
versin comprimida en MP3 (32kbps). Aunque idealmente ambas figuras
deberan ser idnticas, no lo son, algunos de los bits cambian. Estos bits
errneos, que aparecen en negro en la figura 7c, se usan como medida de
similaridad en el esquema.
Fig.7: (a)Bloque de huellas de la versin original, (b)de la versin comprimida en mp3, (c) diferencia de ambas
(BER= 0.078)
Los recursos de computacin requeridos para el algoritmo propuesto
son limitados. Puesto que el algoritmo solo tiene en cuenta frecuencias por
debajo de 2KHz, el archivo de audio es primero submuestreado a un flujo
de audio mono con una tasa de muestreo de 5 KHz (en realidad,
44100/8=5512,5 Hz). Las sub-huellas han sido diseadas de tal forma que
sean robustas contra degradaciones de la seal. Por tanto se pueden usar
filtros de submuestreo muy sencillos sin introducir ninguna degradacin en
el comportamiento del sistema. Se usan 16 filtros FIR. La operacin que
ms requiere computacionalmente es la transformada de Fourier de todas
las tramas de audio. En la seal de audio submuestreada, la trama tiene
una longitud de 2048 muestras. Si la transformada se implementa con una
FFT, el algoritmo ha demostrado poder ejecutarse eficientemente en
aparatos porttiles tales como una PDA o un telfono mvil.
3.1.2 Algoritmo de Bsqueda
Aunque no ser objeto de este proyecto (nos centraremos en analizar
y proponer mejoras al algoritmo de extraccin), vamos a presentar
tambin, ms brevemente, el algoritmo de bsqueda en la base de datos,
una vez que ya se ha extrado la huella.
La tarea no es trivial. En vez de buscar por una huella con todos los
bits exactamente iguales, lo que hay que encontrar es la huella ms similar.
Pongamos por ejemplo una base de datos de tamao moderado, con 10.000
canciones de una duracin media de 5 minutos. Esto corresponde a unos
250 millones de sub-huellas. Para identificar un bloque originado a partir de
un trozo de audio desconocido hay que encontrar cual entre 250 millones da
la tasa de error mnima. Esto es realizable por fuerza bruta, en un
ordenador con una capacidad de anlisis de 200.000 bloques por segundo
tardara unos 20 minutos, lo cual no es viable en la prctica.
Se propone un algoritmo ms eficiente. Se calcula la BER slo para
una serie de candidatos, que contienen una alta probabilidad de ser la
mejor posicin en la base de datos. En una versin simple del algoritmo se
hace la suposicin de que es muy probable que, por lo menos una sub-
huella (32 bits, recordemos) tenga una coincidencia exacta en la posicin
ptima de la base de datos. Si esto es vlido, slo hay que comprobar las
posiciones en las que una de las 256 sub-huellas del bloque a identificar
coincida. Como ejemplo, en la fig.8 se muestra el nmero de errores por
sub-huella para la huella mostrada en la fig.7. Se observa que de hecho hay
17 sub-huellas de las 256 que no tienen errores.
Fig.8: Bits errneos por sub-huella para el caso de O Fortuna de Orff
Si asumimos que la huella original de la fig. 7a est en la base de
datos, su posicin estar entre las candidatas seleccionadas cuando el audio
a identificar sea la versin mp3 de la fig. 7b.
Las posiciones de una base de datos donde se encuentra una sub-
huella de 32 bits especfica se obtienen usando la arquitectura de base de
datos de la fig.8.
Fig.9: Esquema de la base de datos
La base de datos contiene una Lookup Table (LUT) con todas las
posibles sub-huellas de 32 bits como entrada. Cada entrada apunta a una
lista con punteros a las posiciones en la base de datos real donde se
encuentran las respectivas huellas de 32 bits. En sistemas prcticos con
memorias limitadas una tabla que contenga 2
32
entradas no es factible o no
es prctica. Adems, la LUT estar rellena de una forma dispersa, porque
solo un nmero limitado de canciones pueden almacenarse en memoria. Por
tanto, en la prctica, se usa una tabla de hash en vez de una LUT.
Si volvemos a hacer cuentas, para una base de datos de 10.000
elementos, tendremos unos 250 millones de sub-huellas. Por tanto, el
nmero medio de posiciones en una lista ser 0,058 (=256*10
6
/2
32
). Si
suponemos que todas las sub-huellas son igualmente probables, el nmero
medio de comparaciones por identificacin sera 15 (=0,058*256). En la
prctica se observa que la distribucin de las sub-huellas es no uniforme, lo
que hace aumentar el nmero de comparaciones en un factor de 20 ms o
menos. Aun as, en un buen ordenador, 300 comparaciones se pueden
hacer en 1,5 milisegundos. Por lo tanto este algoritmo es unas 800.000
veces ms rpido que la bsqueda simple.
Se haba supuesto que una de las sub-huellas estaba libre de errores,
lo cual es casi siempre cierto para seales con degradacin ms o menos
suave. Para seales fuertemente degradadas la suposicin no es siempre
vlida. Si esto no ocurre, se mira si hay sub-huellas con un solo error y, en
vez de buscar en la base de datos posiciones donde ocurra una de las 256
huellas buscamos posiciones con una distancia de Hamming de 1 (es decir,
un bit cambiado) con respecto a todas las 256 sub-huellas. Esto
incrementar el nmero de bsquedas en un factor de 33, lo que todava es
asumible. Pero, si el nmero mnimo de bits errneos en una sub-huella es
3, el tiempo de bsqueda se incrementa en un factor de 5489, lo que ya no
es asumible. Es interesante observar que el factor de no-uniformidad de 20
va disminuyendo al ir aumentando el nmero de bits a conmutar.
Puesto que este mtodo lleva muy rpido a tiempos de bsqueda
inaceptables se propone otro enfoque que usa decodificacin suave. Es
decir, se propone estimar y usar la probabilidad de que un bit de una huella
sea recibido correctamente. Las sub-huellas se obtienen comparando y
umbralizando diferencias de energa. Si la diferencia de energa est muy
cerca del umbral es razonablemente probable que el bit sea errneo y
viceversa. Derivando la informacin de fiabilidad de cada bit de la sub-
huella a es posible expandir una huella dada en una lista de probables sub-
huellas. Asumiendo que una de las ms probables tiene una coincidencia
exacta en la posicin ptima de la base de datos, la identificacin se hace
como antes. Lo que se hace es ordenar los 32 bits de menos a ms fiables y
se va haciendo la lista de sub-huellas probables conmutando solo los menos
fiables. Ms concretamente, la lista consiste en todas las sub-huellas con los
N bits ms fiables fijados y el resto variables. Por ejemplo, si la informacin
de fiabilidad es perfecta y el nmero mnimo de errores por sub-huella es 3,
puede identificarse el bloque con slo 8 (=2
3
) bsquedas, que, comparado
con 5489 es una gran mejora. Por supuesto, la informacin de fiabilidad no
es perfecta y la mejora es menos, pero aun as sigue siendo sustancial. Lo
podemos ver en la siguiente figura:
Fig. 10: Bits errneos por sub-huella (en gris) y fiabilidad del bit errneo ms fiable (en negro) de la versin
mp3@32kbps de O Fortuna de Orff.
Por ejemplo, la primera sub-huella tiene 8 errores. Estos 8 bits
errneos no son los 8 ms dbiles, porque uno de ellos tiene una fiabilidad
de 27. Sin embargo, la sub-huella tiene slo un error, que resulta ser el
tercero menos fiable. Por tanto, este bloque habra sido apuntado al lugar
correcto cuando se conmutaran los 3 bits ms dbiles. La cancin se habra
identificado bien.
Acabamos dando un ejemplo de como funciona el esquema de la
fig.8. La ltima sub-huella extrada del bloque de la figura es 0x00000001.
Primero el bloque es comparado con las posiciones en la base de datos
donde se encuentra dicha sub-huella. La LUT slo apunta a una posicin
para dicha huella, una cierta posicin p de la cancin 1. Ahora se calcula la
BER entre el bloque y los valores entre la posicin p-255 y p de la cancin
almacenada. Si la BER est por debajo de 0,35, la probabilidad de que
corresponda a esa cancin es alta, si no, o bien la cancin no est en la
base de datos o la sub-huella tiene un error. Asumimos que el menos fiable
es el 1 del final y la sub-huella ms probables es 0x00000000. sta tiene
dos candidatos, en la cancin 1 en la 2. Si el bloque tiene una BER por
debajo del umbral al comparar con alguna de las dos, se dir que hay
coincidencia. Si no, bien se usan otras sub-huellas probables o se coge
alguna de las otras 254 sub-huellas, donde se repite el proceso. Si todas las
256 sub-huellas y sus sub-huellas ms probables han generado posiciones
candidatas y ninguna ha dado una BER por debajo del umbral, el algoritmo
decide que no puede identificar la cancin.
Como conclusin, podemos resumir el sistema segn los parmetros
de diseo de este tipo de sistemas:
- Tamao de huella: Se extrae una huella de 32 bits cada 11,8
milisegundos, lo que da una tasa de 2,6 kbps.
- Granularidad: Un bloque consistente en 256 sub-huellas y
correspondiente a 3 segundos de audio es la unidad bsica de identificacin.
- Velocidad de bsqueda y escalabilidad: Usando un algoritmo en dos
fases una base de datos de huellas que contenga 20.000 canciones y
maneje docenas de peticiones por segundo puede ser ejecutada en un
ordenador moderno.
3.2 Anlisis prcticos a realizar
Una vez expuesto el algoritmo usado por Philips, el primer objetivo
del presente proyecto es realizar una serie de anlisis prcticos del mismo,
sobre todo de dos parmetros fundamentales para describir la actuacin de
todo sistema: La Probabilidad de Falso Positivo y la Robustez ante
degradaciones de la seal.
Para ello, se ha programado en Matlab el algoritmo de extraccin de
huellas, junto con una serie de funciones de comprobacin de la BER entre
dos huellas dadas. Todos estos cdigos se incluyen en el Anexo 1 del
proyecto.
Una vez demostrada la idoneidad o no del sistema, se propondrn
una serie de opciones de preprocesado de la seal de audio antes de ser
introducida en el sistema y se realizarn los mismos anlisis para
comprobar si dichas opciones suponen una mejora en las prestaciones o no.
Para esto se usarn las funciones anteriormente mencionadas junto con
otras que sern necesarias para programar los distintos algoritmos de
preprocesado.
3.2.1 Probabilidad de falso positivo
Diremos que dos seales de audio de 3 segundos son iguales si la
distancia Hamming (es decir, el nmero de bits errneos) entre las huellas
derivadas de ambos bloques est por debajo de un cierto umbral T. El valor
T de dicho umbral condiciona directamente la probabilidad de falso positivo,
P, es decir, la probabilidad de que dos seales de audio distintas sean
consideradas iguales. Mientras ms pequeo sea dicho umbral,
evidentemente menor ser la probabilidad de que esto pase. Pero, por otro
lado, mientras ms pequeo sea T, mayor ser la probabilidad de que dos
seales iguales sean consideradas diferentes (Probabilidad de Falso
Negativo).
Si empezamos con un anlisis terico del problema, para analizar la
eleccin de dicho umbral T, asumimos que el proceso de extraccin de
huellas da como resultado unos bits aleatorios e i.i.d. (independientes e
idnticamente distribuidos). El nmero de bits errneos tendr una
distribucin binomial (n,p), donde n es el nmero de bits extrados y p
(=0,5) es la probabilidad de extraer un 1 o un 0. Puesto que n (=32*256)
es grande en nuestra aplicacin, la distribucin binomial puede aproximarse
por una distribucin normal de media m=n*p y desviacin estndar
= ) 1 ( p np . Dado un bloque de huellas F
1
, la probabilidad de que un
bloque seleccionado aleatoriamente F
2
tenga menos de T=a*n errores con
respecto a F
1
viene dada por:
P
f
( )=
( )
( )
|
\
|
=
n erfc dx e
n
x
2
2 1
2
1
2
1
2 1
2
2
(2)
Donde denota la probabilidad de error, la BER.
Sin embargo, en la prctica las sub-huellas tienen una alta
correlacin a lo largo del eje temporal. Esta correlacin es debida no slo a
la inherente correlacin temporal existente en el audio, sino tambin al gran
solapamiento de las tramas usadas en la extraccin de huellas. Una
correlacin ms alta implica una desviacin estndar ms grande. Esto se
demuestra en la siguiente discusin.
Asumamos una fuente binaria simtrica con alfabeto {-1,1}, tal que
la probabilidad del smbolo x
i
y del smbolo x
i+1
sean iguales es q. Entonces
se podra demostrar que
E[x
i
x
i+k
]=a
|k|
(3)
donde a=2*q-1. Si la fuente Z es el XOR de dos secuencias como esa
X e Y, entonces Z es simtrica y
E[z
i
z
i+k
]=a
2|k|
(4)
Para N grande, la desviacin estndar de la media Z
N
sobre N
muestras consecutivas de Z puede ser descrita aproximadamente por una
distribucin normal de media 0 y de desviacin estndar igual a
( )
2
2
1
1
a N
a
+
(5)
Trasladando este razonamiento al caso de bits de las huellas, un
factor de correlacin a entre bits de huellas consecutivas implica un
incremento en la desviacin estndar en un factor
( )
2
2
1
1
a
a
+
(6)
En [10], para determinar la distribucin de la BER con bloques reales
lo que se hizo fue generar una base de datos de 10.000 canciones. Despus
se determin la BER de 100.000 pares de bloques seleccionados
aleatoriamente. La desviacin estndar de la distribucin resultante se
midi en 0,0148, aproximadamente 3 veces mayor de los 0,0055 que se
esperaran de bits aleatorios i.i.d.
En la figura 10 se muestra la funcin densidad de probabilidad de la
distribucin de la BER medida y de una distribucin normal de media 0,5 y
desviacin estndar 0,0148. La PDF de la BER es una aproximacin
bastante cercana a la distribucin normal. Para BERs por debajo de 0,45 se
observan algunos valores atpicos debido a un nmero insuficiente de
valores.
Fig. 11: Comparacin de la PDF de la BER dibujada con + y la distribucin normal
Para incorporar la mayor desviacin estndar de la distribucin de la
BER la frmula () es modificada incluyendo un factor 3.
P
f
( )=
( )
|
\
|
n erfc
2 3
2 1
2
1
(7)
Usando esta frmula con un umbral de = 0,35 y sustituyendo en la
frmula anterior se llega a un resultado terico de FPR=3,6*10
-20
.
En la prctica, lo primero que se nos podra ocurrir hacer es coger un
trozo cualquiera de 3 segundos y compararlo con un archivo de audio de
varias horas. Si se compara con un archivo de una hora, el nmero de
comparaciones es del orden de las 300.000. Como hemos visto en el
anlisis terico, la BER es del orden de 10
-20
, as que este enfoque directo
es inviable. Lo que habr que hacer es obtener el histograma de dichas
medidas de error, su media, su desviacin estndar y su funcin densidad
de probabilidad y, a partir de ah, obtener una FPR terica, tal y como se
hace en [10]. Para obtener la f.d.p. a partir de una serie de medidas se usa
la herramienta de Matlab, Distribution Fitting Tool (Herramienta de Ajuste
de Distribucin), que nos permite representar la f.d.p. de un conjunto de
datos, que en nuestro caso ser el vector de probabilidades de error y
encontrar una distribucin que se ajuste bien a la distribucin emprica.
Vamos a realizar el ajuste con una distribucin normal, ya que previamente
se ha usado otra instruccin de Matlab, normplot, que nos permite saber,
observando una simple grfica si los datos en un determinado vector tienen
una distribucin normal. Si la tienen, en la grfica se observar una recta,
mientras que si la distribucin que siguen es otra aparecern curvaturas. El
resultado de la orden normplot se muestra en la siguiente figura:
0.44 0.46 0.48 0.5 0.52 0.54 0.56
0.001
0.003
0.01
0.02
0.05
0.10
0.25
0.50
0.75
0.90
0.95
0.98
0.99
0.997
0.999
Data
P
r
o
b
a
b
i
l
i
t
y
Normal Probability Plot
10
-0.35
10
-0.33
10
-0.31
10
-0.29
10
-0.27
10
-0.25
0.001
0.003
0.01
0.02
0.05
0.10
0.25
0.50
0.75
0.90
0.96
0.99
0.999
Data
P
r
o
b
a
b
i
l
i
t
y
Weibull Probability Plot
Fig 12a: Resultado de la orden normplot Fig 12b: Resultado de weibplot
El dibujo tiene tres elementos grficos. Los signos + muestran la
probabilidad emprica contra el valor de los datos para cada punto en la
muestra. La lnea continua roja conecta los percentiles 25 y 75 de los datos
y representa un ajuste lineal robusto (es decir, insensible a los extremos de
la muestra). La lnea punteada extiende la lnea continua hasta los extremos
de la muestra.
Si todos los datos caen cerca de la lnea la asuncin de normalidad es
razonable, y en este caso podemos observar que solo en los casos muy
extremos, es decir, para probabilidades por debajo de 0.001 o por encima
de 0.999 se aleja de la recta. Como comparacin, si usamos weibplot, que
hace lo mismo pero suponiendo que la distribucin es una distribucin de
Weibull el resultado se observa en la fig. 11b. Comparando ambas, se
puede observar fcilmente por qu vamos a trabajar con la suposicin de
que la distribucin del error es normal. Sin embargo, por definicin, la BER
no puede ser negativa, as que trabajaremos con una f.d.p. lognormal
Una vez hecho esto ejecutamos dfittool, para cargar la herramienta
de ajuste y definimos un ajuste lognormal. El resultado del ajuste se
presenta en la siguiente figura y la siguiente tabla:
Distribution: Lognormal
Log likelihood: 281939
Domain: 0 < y < Inf
Mean: 0.500153
Variance: 0.000247017
Parameter Estimate Std. Err.
mu -0.693335 9.78455e-005
sigma 0.0314162 6.91877e-005
Estimated covariance of parameter estimates:
mu sigma
mu 9.57374e-009 1.48481e-020
sigma 1.48481e-020 4.78694e-009
Fig 13: Comparacin de la f.d.p. de la BER y de una f.d.p lognormal
El ltimo paso que nos queda es obtener la FPR en s misma, que
ser simplemente la probabilidad de que una distribucin lognormal de
media -0.693335 y desviacin tpica 0.0314162 est por debajo de 0.35.
Una posible manera de hacerlo es integrando la f.d.p de una lognormal
entre 0 y 0.35, pero dicha integracin resulta complicada, por lo que
finalmente se ha optado por hacerlo en matlab. Si observamos la fig. 12,
arriba de la grfica tenemos la opcin evaluate, que evala varios
parmetros de la f.d.p estimada. La probabilidad de falso positivo ser
simplemente el valor de la funcin de cuanta (c.d.f., cumulative density
function) para x=0.35. Lo podemos ver en la siguiente figura:
Fig. 14: Evaluacin de la FPR
FPR= 3.82612e-30
Comparado con el resultado terico de Haitsma [10], se ve que hay
una diferencia apreciable en los rdenes de magnitud. Esto se debe a que
nosotros hemos usado una distribucin lognormal, que calcula la
probabilidad acumulada entre 0 y 0.35 y en el de Haitsma se usa una
normal, que lo hace entre - y 0.35. De hecho, si nosotros realizamos este
mismo anlisis con una distribucin normal el resultado que se obtiene es
del orden de 10
-22
. En realidad, si se piensa bien, esta diferencia de los
rdenes de magnitud no tiene una gran importancia, el hecho importante
era demostrar que la probabilidad de que se produzca un falso positivo en
una aplicacin normal es prcticamente despreciable, lo cual, a la vista del
resultado, se puede afirmar sin miedo a equivocarse mucho.
3.2.2 Anlisis experimental de robustez
Con este anlisis pretendemos demostrar la robustez del esquema
propuesto. Es decir, tratamos de responder la cuestin de si la BER entre la
versin original y la versin degradada de un clip de audio est por debajo o
no del umbral , que sigue siendo igual a 0.35.
Para ello vamos a coger cuatro extractos cortos (estreo, 44100 Hz,
16 bps) de diferentes archivos de audio de diferentes gneros musicales: el
ya mencionado anteriormente The Dream Of Unreality de Pictures Of
Shorelines, un fragmento hablado de A Day in the Life de The Beatles,
Drugs or Me de Jimmy Eat World y un fragmento de Chariots Of Fire de
Vangelis.
A cada uno de los extractos se les ha sometido a una serie de
degradaciones de la seal, usando para ello el programa Adobe Audition. En
la siguiente figura se muestra la apariencia general del programa:
Fig. 15: Apariencia general de Adobe Audition
Los procesos a los que han sido sometidos los fragmentos de audio
son los siguientes:
Codificacin/decodificacin MP3 a 128 kbps y 32 kbps.
Compresin de Amplitud con las siguientes tasas de compresin:
8.94:1 para |A| -28.6 dB; 1.73:1 para -46.4 dB<|A|<-28.6 dB;
1:1.61 para |A| -46.4 dB.
Fig 16: Compresin en Audition
Ecualizacin Un ecualizador tpico de 10 bandas con los siguientes
parmetros:
Fig.17: Ecualizador utilizado
Adicin de eco
Filtrado paso de banda usando un filtro Butterworth de segundo
orden con frecuencias de corte de 100 Hz y 6000 Hz.
Fig.18: Filtro Butterworth en Audition
Modificacin de la escala temporal en un +4% y -4%. Solo
cambia el tempo, el tono permanece inalterado.
Fig. 19: Expansin de un -4% en Audition
Cambio lineal de la velocidad del +1%, -1%, +4%, -4%. Cambian
tanto el tono como el tempo. No incluimos imagen ya que el men es
el mismo que en la anterior transformacin, sealando en modo de
expansin la opcin Volver a muestrear.
Adicin de Ruido blanco uniforme.
Fig.20: Generacin de ruido blanco
Resampling consistente en submuestreo y posterior sobremuestreo
a 22050 Hz y otra vez a 44100 Hz.
Despus de realizar dichas transformaciones (por separado, a ningn
clip de audio se le hacen dos transformaciones distintas), se mide la BER
entre el fragmento original y el fragmento degradado para cada una de las
cuatro canciones originales. Los resultados se muestran en la siguiente
tabla:
Procesado Pictures Beatles Jimmy Eat
World
Vangelis
MP3@128 kbps 0.0851 0.0379 0.0666 0.0796
MP3@32 kbps 0.2313 0.0961 0.0984 0.1406
Comp. Amplitud 0.1430 0.0522 0.0722 0.1308
Ecualizacin 0.0343 0.0161 0.0142 0.0134
Adicin de Eco 0.1707 0.0904 0.1216 0.1423
Filtrado paso banda 0.0357 0.0078 0.0106 0.0099
Esc. Tiempo +4% 0.1571 0.2208 0.1488 0.1819
Esc. Tiempo -4% 0.1980 0.1925 0.2259 0.2260
Veloc. Lineal +1% 0.1590 0.1622 0.1254 0.1057
Veloc. Lineal -1% 0.1795 0.1403 0.2695 0.2303
Veloc. Lineal +4% 0.4312 0.4437 0.3571 0.3260
Veloc. Lineal -4% 0.5288 0.4343 0.5435 0.5592
Adicin Ruido 0.0809 0.0611 0.0487 0.0541
Resampling 0.000 0.000 0.000 0.000
Tabla 1: BER para los distintos tipos de degradacin de seal
Vemos que slo en los casos sealados en rojo se supera el umbral
de error de 0.35. Corresponden con el caso de los cambios lineales de
velocidad del 4%, tanto en un sentido como en el contrario. Esto es debido
a la desviacin del tramado (desalineamiento temporal) y al escalado
espectral (desalineamiento frecuencial).
.
4. Mejoras Propuestas en Preprocesado
En el esquema terico de un sistema de audio fingerprinting usado
para identificacin se inclua la posibilidad de hacer un preprocesado de la
seal de audio, pero hasta ahora no se ha usado ningn preprocesado en
los anlisis realizados. Grficamente, lo que se est haciendo es lo
siguiente:
Fig. 21: Esquema general de preprocesado
Lo que vemos en la grfica es que el preprocesado debe ser
considerado como el primer paso dentro del mtodo o algoritmo que se
utilice para obtener la huella. En nuestro caso vamos a seguir utilizando el
algoritmo de Philips, con varias opciones de preprocesado, viendo en qu
medida mejoran lo que tenamos previamente. La primera opcin ser un
filtrado paso bajo [26], mientras que la segunda ser un anlisis llamado
DDA (Distortion Discrminant Analysis) [27].
4.1 Filtrado Paso Bajo
4.1.1 Introduccin terica
Las tcnicas para tratar con una distorsin conocida son sencillas
pero la distorsin real causada por la difusin es normalmente desconocida.
Podemos asumir el canal como una posible combinacin de todas las
posibles distorsiones tales como ecualizaciones, fuentes de ruido e incluso
manipulaciones de DJs. Para eliminar algunos efectos de dichas
distorsiones, podemos asumir que son causadas por un canal LTI, lineal e
invariante en el tiempo (o lentamente variante) que puede ser aproximado
por un filtro lineal C() que cambia lentamente con el tiempo. En el dominio
logartmico de Fourier podemos escribir que
| ) ( | ln | ) ( | ln | ) ( | ln X C Y + = (8)
Donde X() e Y() son las seales transmitidas y recibidas
respectivamente. Si el canal que distorsiona H() es lentamente variante
podemos disear un filtro que aplicado a la secuencia temporal es capaz de
minimizar los efectos del canal. El filtro con el que trabajaremos ser
1
1
98 . 0 1
1
99 . 0 ) (
=
z
z
z H (9)
Vemos que dicho filtro presenta un polo en z=0.98 y un cero en z=1.
Su respuesta en frecuencia puede observarse en la siguiente grfica:
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Fig.22: Funcin de Transferencia de H(z)
Vemos que slo se va a filtrar la continua.
4.1.2 Resultados prcticos
En la prctica el filtrado slo supondr una orden de Matlab, que se
incluye justo antes de llamar a la funcin que calcula la huella. Es decir, las
huellas que comparamos sern distintas puesto que trabajarn con las
seales filtradas en lugar de las originales. Por lo dems, los anlisis
realizados sern los mismos, el anlisis de falso positivo y el anlisis de
robustez.
Respecto al falso positivo, se sigue al pie de la letra el proceso del
apartado anterior. Con dfittool se saca la curva que mejor se adapta a la
distribucin emprica de la BER, que en este caso vuelve a ser una
lognormal con la media y varianza que se observan en el siguiente cuadro:
Distribution: Lognormal
Log likelihood: 281946
Domain: 0 < y < Inf
Mean: 0.500151
Variance: 0.000246986
Parameter Estimate Std. Err.
mu -0.693338 9.78397e-005
sigma 0.0314143 6.91836e-005
Estimated covariance of parameter estimates:
mu sigma
mu 9.5726e-009 1.15996e-020
sigma 1.15996e-020 4.78637e-009
Fig. 23: Ajuste de los datos empricos mediante una distribucin lognormal
Evaluando la funcin de cuanta en x=0.35 se vuelve a llegar a la
Probabilidad de Falso Positivo, que en este caso resulta ser:
FPR= 3.80196e-30
Comparando este valor con el que se tena previamente se observa
una ligersima mejora, tan ligera que puede considerarse que dicho
algoritmo no provoca un cambio reseable en trminos de falso positivo.
El siguiente anlisis a realizar es el anlisis de robustez. Se usarn los
mismos archivos y se realizarn los mismos anlisis que en el caso de
Philips sin preprocesado. Los resultados se recogen en la siguiente tabla:
Procesado Pictures Beatles Jimmy Eat
World
Vangelis
MP3@128 kbps 0.0851 0.0380 0.0668 0.0796
MP3@32 kbps 0.2314 0.0960 0.0986 0.1406
Comp. Amplitud 0.1430 0.0522 0.0792 0.1308
Ecualizacin 0.0343 0.0161 0.0140 0.0134
Adicin de Eco 0.1707 0.0904 0.1216 0.1423
Filtrado paso banda 0.0357 0.0078 0.0106 0.0099
Esc. Tiempo +4% 0.1570 0.2208 0.1488 0.1819
Esc. Tiempo -4% 0.1980 0.1923 0.2259 0.2260
Veloc. Lineal +1% 0.1590 0.1623 0.1254 0.1056
Veloc. Lineal -1% 0.1794 0.1403 0.2694 0.2305
Veloc. Lineal +4% 0.4312 0.4438 0.3574 0.3260
Veloc. Lineal -4% 0.5288 0.4342 0.5438 0.5592
Adicin Ruido 0.0809 0.0611 0.0487 0.0540
Resampling 0.0000 0.0000 0.0000 0.0000
Tabla 2: BER para distintas degradaciones filtradas
En la siguiente tabla se muestra una comparacin de la mejora
obtenida en probabilidad de error. En verde se representa una disminucin
de la BER y en rojo, un aumento.
Procesado Pictures Beatles Jimmy Eat
World
Vangelis
MP3@128 kbps 0 0.0001 0.0002 0
MP3@32 kbps 0.0001 0.0001 0.0002 0
Comp. Amplitud 0 0 0 0
Ecualizacin 0 0 0.0002 0
Adicin de Eco 0 0 0 0
Filtrado paso banda 0 0 0 0
Esc. Tiempo +4% 0.0001 0 0 0
Esc. Tiempo -4% 0 0,0002 0 0
Veloc. Lineal +1% 0 0.0001 0 0.0001
Veloc. Lineal -1% 0.0001 0 0.0001 0.0002
Veloc. Lineal +4% 0 0.0001 0.0003 0
Veloc. Lineal -4% 0 0,0001 0.0003 0
Adicin Ruido 0 0 0 0.0001
Resampling 0 0 0 0
Tabla 3: Mejora por el uso del filtrado
La misma informacin expresada en la tabla la vamos a representar
grficamente en cuatro grficas, una para cada archivo. En cada una de
ellas representaremos dos curvas de errores, una sin preprocesar y otra
despus de preprocesar. En el eje X los nmeros del 1-14 se corresponden
a las 14 medidas realizadas de la siguiente forma:
1 MP3@128 kbps 8 Esc. Tiempo -4%
2 MP3@32 kbps 9 Veloc. Lineal +1%
3 Comp. Amplitud 10 Veloc. Lineal -1%
4 Ecualizacin 11 Veloc. Lineal +4%
5 Adicin de Eco 12 Veloc. Lineal -4%
6 Filtrado paso banda 13 Adicin Ruido
7 Esc. Tiempo +4% 14 Resampling
Pictures
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig.24: Comparacin de la BER con y sin preprocesado para el primer archivo
Beatles
0
0,05
0,1
0,15
0,2
0,25
0,3
0,35
0,4
0,45
0,5
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig.25: Comparacin de la BER para el segundo archivo
Jimmy
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig. 26: Comparacin de la BER para el tercer archivo
Vangelis
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig. 27: Comparacin de la BER para el cuarto archivo
Vemos que el efecto del preprocesado sobre la robustez es tambin
mnimo. Una posible razn es que ninguno de los elementos de nuestro
banco de pruebas contiene la distorsin para la que fue pensado, que es la
que se produce por la emisin a travs de radio. Adems, el filtrado es
dbil, y, por la propia concepcin del sistema de Philips, las huellas se
obtienen como diferencia de energas de las bandas, as que todas las
bandas se ven igualmente afectadas por el filtrado.
Sea por las razones que sean, la conclusin a la que llegamos es que
no merece la pena usar este preprocesado, simplemente porque no
introduce ninguna mejora reseable.
4.2 Distortion Discriminant Analysis
4.2.1 Introduccin terica
En [27] se describe un nuevo algoritmo, llamado DDA (Distortion
Discriminant Analysis) para extraer automticamente a partir del audio
caractersticas robustas frente al ruido. Las caractersticas son computadas
por una red neuronal lineal, convolucional donde cada capa realiza una
versin de la reduccin dimensional mediante el Anlisis del Componente
Principal orientado (OPCA).
Para datos de grandes dimensiones tales como el audio, OPCA puede
ser aplicado en capas. Consideremos, por ejemplo, la extraccin de una
huella de dimensin 64 a partir de 6 segundos de audio. Si primero
convertimos la seal de audio a mono y submuestreamos a 11025 Hz, la
extraccin de caractersticas debe mapear un vector de dimensin 66150 a
un vector de dimensin 64. Resolver directamente el problema de
autovalores generalizados es en este caso irrealizable. En vez de esto, OPCA
puede ser aplicado en dos capas, donde la primera capa opera con un
espectro logartmico computado en una ventana pequea y la segunda
opera con vectores que se construyen agregando los vectores producidos
por la primera capa. Es a este enfoque a lo que se le llama DDA. DDA es un
mtodo lineal; las proyecciones que ocurren en una capa dada pueden ser
vistas como una convolucin. Por tanto DDA puede ser vista como una red
neuronal lineal y convolucional donde los pesos se escogen usando OPCA.
El sistema con el que se va a trabajar en primer lugar convierte la
seal de audio estreo a mono y luego submuestrea a 11025 Hz. La seal
es a continuacin dividida en tramas de longitud fija de 372 ms que se
solapan por la mitad. A cada trama se le aplica una MCLT (Modulated
Complex Lapped Transform, una Transformada de Fourier enventanada)
[28]. Tomando el logaritmo del mdulo de cada coeficiente MCLT se obtiene
un espectro logartmico. La MCLT se considera una extensin de la MLT,
pero haciendo uso de la informacin de fase al ser compleja. En MCLT se
definen las funciones base de anlisis (transformada directa) y sntesis
(transformada inversa) p
a
(n,k) y p
s
(n,k) como modulacin en coseno y en
seno de las ventanas de anlisis y sntesis, h
a
(n) y h
s
(n):
(
\
|
+ = =
M
n n h n h
s a
2 2
1
sin ) ( ) (
(10)
( ) ) , ( ) , ( , k n jp k n p k n p
s
a
c
a a
=
(11)
(
\
|
+
|
\
| +
+ =
M
k
M
n
M
n h k n p
a
c
a
2
1
2
1
cos
2
) ( ) , ( (12)
(
\
|
+
|
\
| +
+ =
M
k
M
n
M
n h k n p
a
s
a
2
1
2
1
sin
2
) ( ) , ( (13)
( ) [ ] ) , ( ) , (
2
1
, k n jp k n p k n p
s
s
c
s s
+ =
(14)
(
\
|
+
|
\
| +
+ =
M
k
M
n
M
n h k n p
s
c
s
2
1
2
1
cos
2
) ( ) , ( (15)
(
\
|
+
|
\
| +
+ =
M
k
M
n
M
n h k n p
a
s
a
2
1
2
1
sin
2
) ( ) , ( (16)
Donde el ndice de tiempo n vara de 0 a 2M-1 y el eje de frecuencias
k vara de 0 a M-1 siendo M el tamao del bloque de entrada. Los
coeficientes MCLT X(k) se computan a partir del bloque de entrada x(n)
como
=
=
1 2
0
) , ( ) ( ) (
M
n
a
k n p n x k X
(17)
Por cada M muestras reales de la seal de entrada se obtienen M
coeficientes en frecuencia complejos [29].
Una vez que se tiene el flujo de audio transformado, se El flujo de
audio realizan dos pasos de preprocesado en cada trama que suprimen las
distorsiones especficas y fcilmente identificables. Ambos pasos se realizan
por separado, es decir, primero haremos todos los estudios para la seal
resultante de aplicar el primer paso y luego los haremos para la seal
resultante de aplicar slo el segundo. La posibilidad de combinarlos ambos o
combinarlos con otros posibles preprocesados queda fuera del objetivo de
este proyecto.
4.2.2- Primer Paso de Preprocesado
El primer paso de preprocesado elimina distorsiones causadas por
ecualizacin en frecuencia y ajuste de volumen. Este paso aplica un filtro
paso-bajo al espectro logartmico tomando la DCT (Transformada del
Coseno) del espectro, multiplicando cada coeficiente DCT por un valor que
va linealmente desde 1 para el primer coeficiente a 0 para el sexto y
superiores y entonces realizando la DCT inversa. Esto da como resultado
una suave aproximacin A al espectro logartmico. A es a continuacin
bajado 6 dB y cortado en -70 dB. El vector de salida de este primer paso de
preprocesado es la diferencia componente a componente entre el espectro
logartmico y A si la diferencia es positiva y cero en caso contrario.
Esta seal est en el dominio MCLT, por lo que antes de introducirla
en el algoritmo de Philips hay que hacer la MCLT inversa. Anlogamente a
como se defini la transformada directa en (17), a partir de una seal
transformada Y(k) (que puede ser igual a X(k) o no), se define la seal en
el dominio del tiempo y(n) como:
=
=
1
0
) , ( ) ( ) (
M
k
s
k n p k Y n y
(18)
Lo que no queda claro en [28] es como realizar la superposicin de
las diversas y(n). Si se observa bien, por cada M muestras de Y(k), la
frmula indicada anteriormente obtiene 2M muestras, que deben
superponerse, ya que, como hemos indicado anteriormente, por cada M
nuevas muestras de x(n) se obtienen M nuevas muestras transformadas.
Para inferir el funcionamiento de la transformada, se ha propuesto un
ejemplo concreto, con un vector de longitud 16 y tamao de trama M=4:
x(n)=[1 1 1 1 1 2 3 4 1 0 1 0 1 1 1 1]
Al ser M=4, se divide x(n) en 4 tramas de tamao=2M=8. A cada una
de estas tramas se le hace la transformada aplicando las ecuaciones (10)-
(13) y (17), dando como resultado:
x
1
(n)=[1 1 1 1 1 2 3 4]
X
1
(k)=[3.6913+ j1.7315
1.0614 j0.5158
0.3573 j0.2452
0.0381 + j0.1501]
x
2
(n)=[1 2 3 4 1 0 1 0]
X
2
(k)=[2.6173+ j5.2301
-2.9375 j1.0898
0.8656 j1.6310
0.9239 + j0.1585]
x
3
(n)=[1 0 1 0 1 1 1 1]
X
3
(k)=[1.6913+ j1.0381
0.4619 + j0.1913
0.1913 + j0.4619
-0.9619 - j0.3087]
x
4
(n)=[1 1 1 1 1 1 1 1]
X
4
(k)=[2+ j2
0 + j0
0+ j0
0 + j0]
Una vez realizado este paso, lo que hacemos a continuacin es hacer
aplicar las ecuaciones (14)-(16) y (18) para realizar la transformada
inversa. As, se obtienen como resultado:
y
1
(n)
y
2
(n)
y
3
(n)
y
4
(n)
0.0381 - j0.3098
0.3087 - j0.6290
0.6913 j0.7807
0.9619 j0.4862
0.9619 j0.4967
1.3827 j0.1416
0.9260 +j0.5513
0.1522 +j0.3330
0.0381 - j0.3487
0.6173 j1.0655
2.0740 j1.5274
3.8478 +j0.8742
0.9619 +j2.8086
0.0000 j0.8361
0.3087 +j0.7568
0.0000 +j0.2791
0.0381 - j0.0688
0.0000 - j0.4619
0.6913 j0.2310
0.0000 j0.1913
0.9619 j0.5845
0.6913 +j0.4619
0.3087 +j0.2310
0.0381 +j0.1913
0.0381 - j0.1913
0.3087 - j0.4619
0.6913 j0.4619
0.9619 j0.1913
0.9619 +j0.1913
0.6913 +j0.4619
0.3087 +j0.4619
0.0381 +j0.1913
Lo siguiente que hay que saber es cmo recuperar la seal original
x(n) (de longitud 16 y real) a partir de estos 32 elementos complejos. Lo
primero que observamos es que si sumamos las partes reales de los ltimos
cuatro elementos de cada una de las listas con las partes reales de los
cuatro primeros de la lista siguiente se obtiene lo siguiente:
0.9619
0.6913 +
0.3087
0.0381
0.0381
0.3087 =
0.6913
0.9619
1
1
1
1
0.9619
1.3827 +
0.9260
0.1522
0.0381
0.6173 =
2.0740
3.8478
1
2
3
4
0.9619
0.0000+
0.3087
0.0000
0.0381
0.0000 =
0.6913
0.0000
1
0
1
0
0.9619
0.6913+
0.3087
0.0381
0.0381
0.3087 =
0.6913
0.9619
1
1
1
1
Vemos que dichos valores coinciden con los valores de x(n). Y no es
fruto de la casualidad para este ejemplo concreto, para otras seales x(n),
de la misma longitud o ms largas se comprueba lo mismo. El hecho de
enlazar la primera con la ltima es porque al hacer la MCLT tambin lo
hemos enlazado. En [28] ese aspecto no queda claro, podra haberse hecho
tambin rellenando con ceros media trama al inicio y media trama al final,
pero hemos optado por esta posibilidad. Evidentemente, este es el
algoritmo que simularemos en Matlab (ver anexo).
Por ltimo, lo que falta antes de introducir la seal resultante de la
transformada inversa en el algoritmo de Philips es volver a submuestrear,
de 11025 Hz a los 5512,5 Hz a los que trabaja dicho algoritmo. Una vez
hecho esto ya podemos realizar los anlisis de falso positivo y de robustez.
4.2.2.1- Anlisis de falso positivo
El anlisis vuelve a ser anlogo a los anteriores y se utilizan los
mismos archivos, el extracto de 3 segundos de Pictures y el trozo de 20
minutos sacado de la radio comercial. Utilizando dfittool, la distribucin
que mejor se asemeja al error vuelve a ser una lognormal, con los
siguientes parmetros:
Distribution: Lognormal
Log likelihood: 33842.2
Domain: 0 < y < Inf
Mean: 0.499933
Variance: 0.000279045
Parameter Estimate Std. Err.
mu -0.69384 0.000296932
sigma 0.0334045 0.000209975
Estimated covariance of parameter estimates:
mu sigma
mu 8.81684e-008 -3.61613e-021
sigma -3.61613e-021 4.40894e-008
Fig. 28: Distribucin de la BER comparada con una distribucin lognormal
Evaluando la funcin de cuanta para x=0.35 se llega a la siguiente
Probabilidad de Falso Positivo (marcada en rojo):
Fig. 29: Probabilidad de falso positivo
Comparando este valor, se ve que es mayor que el obtenido en los
dos anlisis anteriores, sin embargo podemos aplicar aqu el mismo
razonamiento que aplicamos la primera vez. Un cambio en el valor del
orden de 10
-30
a 10
-27
no es grave, podemos seguir considerndolo
despreciable. El principal problema que observamos es que aumenta mucho
la complejidad computacional del anlisis, que dura del orden de 10-15
veces ms que sin el preprocesado. Una posible solucin sera haber
utilizado un algoritmo rpido para la MCLT, descrito en [28], que obtiene la
transformada a partir de una DCT-IV y una DST-IV, pero dada la
complejidad y la dificultad para programarlo se ha optado por no utilizarlo y
quedarnos con el primer algoritmo.
4.2.2.2- Anlisis de Robustez
El anlisis realizado es exactamente el mismo de los apartados
anteriores, con los mismos archivos de tres segundos de msica. En la
siguiente tabla se recogen los resultados obtenidos para la BER:
Procesado Pictures Beatles Jimmy Eat
World
Vangelis
MP3@128 kbps 0.1411 0.0964 0.0960 0.1393
MP3@32 kbps 0.2232 0.1544 0.1481 0.2026
Comp. Amplitud 0.0803 0.0950 0.0539 0.0643
Ecualizacin 0.0367 0.0294 0.0281 0.0388
Adicin de Eco 0.1356 0.2107 0.1160 0.1144
Filtrado paso banda 0.0106 0.0053 0.0053 0.0085
Esc. Tiempo +4% 0.1304 0.2010 0.1365 0.1413
Esc. Tiempo -4% 0.1482 0.1431 0.1135 0.1272
Veloc. Lineal +1% 0.1718 0.1596 0.1297 0.1576
Veloc. Lineal -1% 0.1896 0.1615 0.2602 0.2775
Veloc. Lineal +4% 0.3907 0.4196 0.3824 0.3185
Veloc. Lineal -4% 0.4705 0.4315 0.4542 0.4080
Adicin Ruido 0.0922 0.1863 0.0565 0.0681
Resampling 0.0000 0.0000 0.0000 0.0000
Tabla 4: BER para las distintas degradaciones preprocesadas
Al igual que en el apartado anterior, en la siguiente tabla se recoge la
comparacin de la BER obtenida con la BER que se obtuvo sin realizar
ningn preprocesado. Los valores en rojo indican un incremento de la BER
respecto a la original y los valores en verde, una disminucin del error:
Procesado Pictures Beatles Jimmy Eat
World
Vangelis
MP3@128 kbps 0,056 0,0585 0,0294 0,0597
MP3@32 kbps 0,0081 0,0583 0,0497 0,062
Comp. Amplitud 0,0627 0,0428 0,0253 0,0665
Ecualizacin 0,0024 0,0133 0,0139 0,0254
Adicin de Eco 0,0351 0,1203 0,0056 0,0279
Filtrado paso banda 0,0251 0,0025 0,0053 0,0014
Esc. Tiempo +4% 0,0267 0,0198 0,0123 0,0406
Esc. Tiempo -4% 0,0498 0,0494 0,1124 0,0988
Veloc. Lineal +1% 0,0128 0,0026 0,0043 0,0519
Veloc. Lineal -1% 0,0101 0,0212 0,0093 0,0472
Veloc. Lineal +4% 0,0405 0,0241 0,0253 0,0075
Veloc. Lineal -4% 0,0583 0,0028 0,0893 0,1512
Adicin Ruido 0,0113 0,1252 0,0078 0,014
Resampling 0 0 0 0
Tabla 5: Comparacin de las BER con y sin preprocesado
A continuacin volveremos a representar en grficas independientes
los resultados para cada uno de los cuatro archivos. En este apartado
resultarn ms interesantes que en el anterior, donde el preprocesado
prcticamente no introduca ningn cambio en las probabilidades de error.
La correspondencia entre los nmeros en el eje de abscisas y las
distorsiones de la seal es la misma del apartado anterior:
1 MP3@128 kbps 8 Esc. Tiempo -4%
2 MP3@32 kbps 9 Veloc. Lineal +1%
3 Comp. Amplitud 10 Veloc. Lineal -1%
4 Ecualizacin 11 Veloc. Lineal +4%
5 Adicin de Eco 12 Veloc. Lineal -4%
6 Filtrado paso banda 13 Adicin Ruido
7 Esc. Tiempo +4% 14 Resampling
Pictures
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig.30: Comparacin de la BER con y sin preprocesado para el primer archivo
Beatles
0
0,05
0,1
0,15
0,2
0,25
0,3
0,35
0,4
0,45
0,5
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig.31: Comparacin de la BER para el segundo archivo
Jimmy
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig.32: Comparacin de la BER para el tercer archivo
Vangelis
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.
Fig.33: Comparacin de la BER para el cuarto archivo
En la tabla y en las grficas se observan resultados interesantes. Para
el archivo Beatles A Day in The Life, que es hablado los resultados son
en general peores que en los otros tres, que contienen msica. Vemos que,
en general, para compresin de amplitud, eco, filtrado paso banda y
escalado el preprocesado es til ya que disminuye la probabilidad de error,
mientras que para seales con ruido no lo es.
4.2.3- Segundo paso de preprocesado
El segundo paso elimina distorsiones en la seal que no pueden ser
detectadas por el odo humano. Este paso hace el exponente del espectro
logartmico y entonces genera un umbral perceptual dependiente de la
frecuencia mediante un algoritmo descrito en [30]. La seal preprocesada
final es la diferencia en dB entre el espectro logartmico y el umbral
perceptual logartmico si la diferencia es positiva y cero en caso contrario.
Los datos finales preprocesados consisten en 2048 coeficientes reales (y,
por tanto 2048 bandas) por trama.
4.2.3.1- Anlisis de Falso Positivo
Las funciones que vamos a utilizar tanto para este anlisis como para
el siguiente se encuentran en el Anexo 3. Agradecemos al seor Malvar, de
Microsoft la deferencia de habernos enviado las funciones hthres.m y
thrabs.m, necesarias para generar el umbral perceptual dependiente de la
frecuencia.
Por lo dems, el proceso se hace igual que siempre. Obtenemos la
distribucin del error y, con la herramienta dfittool de Matlab encontramos
la distribucin que mejor se ajusta. Vuelve a ser, como en los casos
anteriores, la distribucin lognormal, con los siguientes parmetros:
Distribution: Lognormal
Log likelihood: 34354.3
Domain: 0 < y < Inf
Mean: 0.500182
Variance: 0.00025732
Parameter Estimate Std. Err.
mu -0.693297 0.000285003
sigma 0.0320625 0.000201539
Estimated covariance of parameter estimates:
mu sigma
mu 8.12265e-008 -7.30711e-021
sigma -7.30711e-021 4.06181e-008
En la siguiente grfica se muestra la distribucin del error y la
distribucin lognormal, superpuestas
Fig. 34: Distribucin de la BER y distribucin lognormal
Finalmente, el valor de probabilidad de falso positivo que se obtiene
se muestra en la siguiente grfica:
Fig.35: Probabilidad de Falso Positivo
Podemos observar que es ligeramente peor que el original, pero
ligeramente mejor que el que se obtena en el anlisis anterior. De todas
formas, lo importante es que podemos seguir diciendo que la probabilidad
de falso positivo sigue siendo prcticamente despreciable.
4.2.3.2- Anlisis de robustez
El proceso vuelve a ser el mismo, con los mismos archivos de los
anteriores anlisis as que pasamos directamente a los resultados, que se
muestran en la siguiente tabla:
Procesado Pictures Beatles Jimmy Eat
World
Vangelis
MP3@128 kbps 0.1353 0.1083 0.1050 0.1067
MP3@32 kbps 0.2050 0.1668 0.1489 0.1749
Comp. Amplitud 0.0924 0.1249 0.0587 0.0606
Ecualizacin 0.0496 0.0353 0.0335 0.0329
Adicin de Eco 0.1231 0.2124 0.1369 0.1339
Filtrado paso banda 0.0032 0.0005 0.0005 0.0006
Esc. Tiempo +4% 0.1501 0.2125 0.1600 0.1709
Esc. Tiempo -4% 0.1731 0.1536 0.1303 0.1499
Veloc. Lineal +1% 0.1844 0.1838 0.1610 0.1613
Veloc. Lineal -1% 0.2071 0.1836 0.2860 0.2810
Veloc. Lineal +4% 0.3892 0.4582 0.3572 0.3175
Veloc. Lineal -4% 0.4688 0.4420 0.4317 0.3964
Adicin Ruido 0.0719 0.1825 0.0442 0.0376
Resampling 0 0 0 0.0000
Tabla 6: BER para los distintos tipos de degradacin
En la siguiente tabla se muestra la comparacin entre los resultados
obtenidos en este anlisis y los resultados sin ningn preprocesado. Los
nmeros indican la diferencia entre ambos (en rojo implica que en este
anlisis es mayor y en verde, que es menor).
Procesado Pictures Beatles Jimmy Eat
World
Vangelis
MP3@128 kbps 0,0502 0,0704 0,0384 0,0271
MP3@32 kbps 0,0263 0,0707 0,0505 0,0343
Comp. Amplitud 0,0506 0,0727 0,0205 0,0702
Ecualizacin 0,0153 0,0192 0,0193 0,0195
Adicin de Eco 0,0476 0,122 0,0153 0,0084
Filtrado paso banda 0,0325 0,0073 0,0101 0,0093
Esc. Tiempo +4% 0,007 0,0083 0,0112 0,011
Esc. Tiempo -4% 0,0249 0,0389 0,0956 0,0761
Veloc. Lineal +1% 0,0254 0,0216 0,0356 0,0556
Veloc. Lineal -1% 0,0276 0,0433 0,0165 0,0507
Veloc. Lineal +4% 0,042 0,0145 0,0001 0,0085
Veloc. Lineal -4% 0,06 0,0077 0,1118 0,1628
Adicin Ruido 0,009 0,1214 0,0045 0,0165
Resampling 0 0 0 0
Tabla 7: Comparacin de la BER con este preprocesado y con ninguno
De la tabla podemos extraer varias conclusiones. Primero, parece que
el algoritmo funciona mejor para el primer y el cuarto archivo, funciona
regular para el archivo de Jimmy y, al igual que en el paso anterior,
bastante mal para el archivo de los Beatles. Si lo analizamos por
distorsiones, funciona bien para seales filtradas paso-banda, seales con
escala de tiempo modificada y con cambio lineal de la velocidad y para
seales con ruido.
Para representar los resultados grficamente se ha considerado
interesante incluir en las grficas tambin los resultados del anlisis
anterior, el del primer paso. As, se obtienen las siguientes grficas, donde
los nmeros en el eje de abscisas se corresponden con las siguientes
distorsiones:
1 MP3@128 kbps 8 Esc. Tiempo -4%
2 MP3@32 kbps 9 Veloc. Lineal +1%
3 Comp. Amplitud 10 Veloc. Lineal -1%
4 Ecualizacin 11 Veloc. Lineal +4%
5 Adicin de Eco 12 Veloc. Lineal -4%
6 Filtrado paso banda 13 Adicin Ruido
7 Esc. Tiempo +4% 14 Resampling
Pictures
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.1
Con preproc.2
Fig.36: Comparacin de la BER sin preprocesado y con preprocesados para el primer archivo
Beatles
0
0,05
0,1
0,15
0,2
0,25
0,3
0,35
0,4
0,45
0,5
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.1
Con preproc.2
Fig.37: Comparacin de la BER sin preprocesado y con preprocesados para el segundo archivo
Jimmy
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.1
Con preproc.2
Fig.38: Comparacin de la BER sin preprocesado y con preprocesados para el tercer archivo
Vangelis
0
0,1
0,2
0,3
0,4
0,5
0,6
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sin preproc
Con preproc.1
Con preproc.2
Fig.39: Comparacin de la BER sin preprocesado y con preprocesados para el cuarto archivo
Se puede observar que este preprocesado no mejora al anterior para
la mayora de las medidas, solo es mejor en todos los casos para seales
con ruido y para seales filtradas paso bajo.
5. Referencias
[1]. Audio Fingerprinting: Concepts And Applications, Pedro Cano,
Eloi Batlle, Emilia Gomez, Leandro de C.T.Gomes, and Madeleine Bonnet
;
Studies in Computational Intelligence (SCI) 2, 233245, 2005.
[2]. Mixed watermarking fingerprinting approach for integrity
verification of audio recordings. Gmez E, Cano P, Gomes L de C T,
Batlle E, Bonnet M (2002) Proc. of the Int. Telecommunications Symposium,
Natal, Brazil.
[3]. A perceptual audio hashing algorithm: a tool for robust audio
identification and information hiding, M. Mihak y R. Venkatesan, in 4th
Int. Information Hiding Workshop, Pittsburg, PA, April 2001.
[4]. Robust audio hashing for content identification Haitsma J,
Kalker T, Oostveen J. Proc. of the Content-Based Multimedia Indexing,
Firenze, Italy (2001)
[5]. Audio Watermarking and Fingerprinting: For Which
Applications?, Pedro Cano, Eloi Batlle, Emilia Gomez, Leandro de
C.T.Gomes, and Madeleine Bonnet, Journal of New Music Research 32(1)
pps. 6582, 2003.
[6]. Digital watermarks for audio signals Boney, L., Tewfik, A., &
Hamdy, K. (1996). IEEE Proceedings Multimedia.
[7]. Techniques for data hiding. Bender, W., Gruhl, D., Morimoto, N.,
& Lu, A., (1996). IBM System Journal vol. 35, pp. 313-336.
[8]. Digital watermarking of audio signals using a psychoacoustic
auditory model and spread-spectrum theory. Garcia, R. A. (1999).
107th AES Convention.
[9]. A review of audio fingerprinting, Cano, P., E. Batlle, T. Kalker,
and J. Haitsma Journal of VLSI Signal Processing 41, 271284, 2005
[10]. A Highly Robust Audio Fingerprinting System, Jaap Haitsma,
Ton Kalker, in Proceedings of the International Symposium on Music
Information Retrieval, Paris, France, 2002.
[11]. Detection and Logging Advertisements Using its Sound, J.
Lourens, in Proc. of the COMSIG, Johannesburg, 1990.
[12]. Identification of highly distorted audio material for querying
large scale databases, F. Kurth, A. Ribbrock, and M. Clausen, in Proc.
AES 112th Int. Conv., Munich, Germany, May 2002.
[13]. Short-Term Sound Stream Characterisation for Reliable, Real-
Time Occurrence Monitoring of Given Sound-Prints, G. Richly, L.
Varga, F. Kovs, and G. Hossz, in Proc.10th Mediterranean Electrotechnical
Conference, MEleCon, 2000.
[14]. Content-based identification of audio material using mpeg-7
low level description, E. Allamanche, J. Herre, O. Helmuth, B. Frba, T.
Kasten, and M. Cremer in Proc. of the Int. Symp. Of Music Information
Retrieval, Indiana, USA, Oct. 2001.
[15]. A new approach to the automatic recognition of musical
recordings, C. Papaodysseus, G. Roussopoulos, D. Fragoulis, T.
Panagopoulos, and C. Alexiou, J. Audio Eng. Soc., vol. 49, no. 1/2, 2001, pp.
2335.
[16]. Very Quick Audio Searching: Introducing Global Pruning to the
Time-Series Active Search, A. Kimura, K. Kashino, T. Kurozumi, and H.
Murase, in Proc. of Int. Conf. on Computational Intelligence and Multimedia
Applications, Salt Lake City, Utah, May 2001.
[17]. Modulation frequency features for audio fingerprinting, S.
Sukittanon and L. Atlas in Proc. of the ICASSP, May 2002.
[18]. Extracting Noise-Robust Features from Audio Data, C. Burges,
J. Platt, and S. Jana, in Proc. of the ICASSP, Florida, USA, May 2002.
[19]. Robust Sound Modelling for Song Detection in Broadcast
Audio, P. Cano, E. Batlle, H. Mayer, and H. Neuschmied, in Proc. AES
112th Int. Conv., Munich, Germany, May 2002.
[20]. Method and article of manufacture for content-based analysis,
storage, retrieval and segmentation of audio information, T. Blum, D.
Keislar, J. Wheaton, and E. Wold, U.S. Patent 5,918,223, June 1999.
[21]. Automatic Song Identification in Noisy Broadcast Audio, E.
Batlle, J. Masip, and E. Guaus, in Proc. of the SIP, Aug. 2002.
[22]. Fast Subsequence Matching in Time-Series Databases, C.
Faloutsos, M. Ranganathan, and Y. Manolopoulos in Proc. On the ACM
SIGMOD, Minneapolis, MN, 1994, pp. 419429.
[23]. Modern Information Retrieval, R. Baeza-Yates and B. Ribeiro-Neto
Addison Wesley, 1999.
[24]. Audio Fingerprinting: Nearest Neighbour Search in High
Dimensional Binary Spaces, M. Miller, M. Rodriguez, and I. Cox in 5th
IEEE Int. Workshop on Multimedia Signal Processing: Special session on
Media Recognition, US Virgin Islands, USA, Dec. 2002.
[25]. System and Methods for Recognizing Sound and Music
Signals in High Noise and Distortion, A.L.-C.Wang and J. Smith II, U.S.
Patent Application Publication US 2002/0083060 A1, 2002.
[26]. System Analysis and Performance Tuning for Broadcast Audio
Fingerprinting, E. Battle, J. Masip, P. Cano, Proc. of the 6
th
Int.
Conference on Digital Audio Effects, London, 6-11 September 2003
[27]. Distortion Discriminant Analysis for Audio Fingerprinting,
Christopher J.C. Burges, John C. Platt and Soumya Jana, IEEE Transactions
on Speech and Audio Processing, Vol. XX, NO. Y, Month ZZ
[28]. A Modulated Complex Lapped Transform and its Applications
to Audio Processing H. Malvar IEEE Transactions on Speech and Audio
Processing 1999 pag. 1421-1424
[29]. The Modulated Lapped Transform, Its Time-Varying Forms and
Its Applications to Audio Coding Standards Seymour Shlien IEEE
Transactions on Speech and Audio Processing Vol.5 No4 July 1997
[30]. Auditory masking in audio compression, H. Malvar, in Audio
Anecdotes, K. Greenebaum, Ed. A. K. Peters Ltd., 2001.
Anexo 1: Funciones usadas para el algoritmo de
Philips
Funcin principal para el clculo de la huella
% archivo: fingerprint_princ.m
%
% Funcin que, dado un archivo de audio, calcula su huella.
%
function F=fingerprint(audio)
Fs=44100/8; %frecuencia de muestreo de la seal de audio
N=2048; %numero de muestras por frame
overlap=31/32; %factor de overlap
desplaz=floor(N-N*overlap); %desplazamiento de la ventana para cumplir
con el factor de overlap
num_band=33; %numero de bandas en que dividimos cada frame
f_inferior=300; %frecuencia inferior para la division en bandas
f_superior=2000; %frecuencia superior para la division en bandas
ventana=hanning(N);
%Para solventar el problema de que el numero de muestras no es
%mltiplo de N, nos quedarnos con el numero entero de muestras de la
%seal mas alto posible que sea multiplo de 'desplaz'
numero_fingers=floor((length(audio)-N)/desplaz); %numero de huellas
sin contar la primera
audio=audio(1:(N+numero_fingers*desplaz));
Eperanterior=zeros(num_band,1); %energa de las bandas del frame
anterior
m=1; %ndices para guardar los bits de los fingerprints
%Calculo del vector para la divisin en 33 bandas separadas
%logartmicamente entre 300 Hz y 2000 Hz
indice=logspace(log10(f_inferior),log10(f_superior),num_band+1);
indice=round(indice*N/Fs);
%Bucle que divide la seal en tramas y las procesa
for k=0:desplaz:length(audio)-N
frame=audio(k+1:k+N,1);
frame=ventana.*frame;
FRAME=abs(fft(frame));
% Se divide la trama en bandas
bandaSup=FRAME(indice(num_band):indice(num_band+1),1);
for k=num_band:-1:2
banda=FRAME(indice(k-1):indice(k),1);
% Se llama a la funcin que calcula la energa de las bandas
Eactual=calc_energia(banda);
Esuperior=calc_energia(bandaSup);
%Se obtiene el bit F(m,k-1) de la huella
F(m,k-1)=bit_derivation(Eactual,Esuperior,Eperanterior(k-
1,1),Eperanterior(k,1));
%actualizamos variables
bandaSup=banda;
Eperanterior(k,1)=Esuperior;
%Para evitar coger un valor equivocado al llamar a
"bit_derivation"
if k==2
Eperanterior(k-1,1)=Eactual;
end
end
m=m+1;
end
Funcin que calcula la energa de las bandas
% archivo: calc_energia.m
%
% Funcin que calcula la energa de una banda,
% empleada para el calculo del fingerprints
function E=calc_energ(x)
[M,N]=size(x);
if M>=N
E=x'*x;
else
E=x*x';
end
Funcin que calcula cada bit de la huella
% Archivo: bit_derivation.m
%
% Funcin que calcula un bit de la fingerprint
%
% Parmetros:
% e: energa de la banda
% e_banterior: energa de la banda anterior
% e_tanterior: energa de la banda en el periodo anterior
% e_tb: energa de la banda posterior en el periodo anterior
function F=bit_derivation(e,e_banterior,e_tanterior,e_tb)
ED=e-e_banterior-(e_tanterior-e_tb);
if ED>0
F=1;
else
F=0;
end
Script del anlisis de falso positivo
% archivo: falsopositivo.m
%
% Script con todo el proceso del anlisis de falso positivo
%
clear all;
%Proceso completo del anlisis de falso positivo
Fs=44100/8; %frecuencia de muestreo
alpha=0.35; %umbral
% cargamos el bloque de 3 segundos y obtenemos su huella
audio1=readwav('pictures5512_3sg.wav');
f1=fingerprint_princ(audio1);
[m,n]=size(f1);
% cargamos el archivo con el que vamos a comparar, entero
audio2=readwav('1123075521_5512_20min.wav');
f2=fingerprint_princ(audio2);
%se comparan ambas huellas
d=busqueda(f1,f2);
d=d./(m*n); %BER de cada comparacin
% sacamos la media y la desviacin estndar y llamamos a la
herramienta
% dfittool
media=mean(d)
desv=std(d)
dfittool
Funcin para leer archivos de audio
Esta funcin debi ser utilizada por una incompatibilidad entre los
archivos tratados con Adobe Audition y la orden wavread de Matlab. La
presente funcin hace lo mismo que wavread.
function [y,fs,wmode,fidx]=readwav(filename,mode,nmax,nskip)
%READWAV Read a .WAV format sound file
[Y,FS,WMODE,FIDX]=(FILENAME,MODE,NMAX,NSKIP)
%
% Input Parameters:
%
% FILENAME gives the name of the file (with optional .WAV extension)
or alternatively
% can be the FIDX output from a previous call to
READWAV
% MODE specifies the following (*=default):
%
% Scaling: 's' Auto scale to make data peak = +-1
% 'r' Raw unscaled data (integer values)
% 'q' Scaled to make 0dBm0 be unity mean square
% 'p' * Scaled to make +-1 equal full scale
% 'o' Scale to bin centre rather than bin edge (e.g.
127 rather than 127.5 for 8 bit values)
% (can be combined with n+p,r,s modes)
% 'n' Scale to negative peak rather than positive peak
(e.g. 128.5 rather than 127.5 for 8 bit values)
% (can be combined with o+p,r,s modes)
% Offset: 'y' * Correct for offset in <=8 bit PCM data
% 'z' No offset correction
% File I/O: 'f' Do not close file on exit
% 'd' Look in data directory: voicebox('dir_data')
%
% NMAX maximum number of samples to read (or -1 for unlimited
[default])
% NSKIP number of samples to skip from start of file
% (or -1 to continue from previous read when FIDX is
given instead of FILENAME [default])
%
% Output Parameters:
%
% Y data matrix of dimension (samples,channels)
% FS sample frequency in Hz
% WMODE mode string needed for WRITEWAV to recreate the data file
% FIDX Information row vector containing the element listed
below.
%
% (1) file id
% (2) current position in file
% (3) dataoff byte offset in file to start of data
% (4) nsamp number of samples
% (5) nchan number of channels
% (6) nbyte bytes per data value
% (7) bits number of bits of precision
% (8) code Data format: 1=PCM, 2=ADPCM, 6=A-law, 7=Mu-law
% (9) fs sample frequency
%
% If no output parameters are specified, header information will be
printed.
%
% For stereo data, y(:,1) is the left channel and y(:,2) the right
%
% See also WRITEWAV.
% *** Note on scaling ***
% If we want to scale signal values in the range +-1 to an integer
in the
% range [-128,127] then we have four plausible choices corresponding
to
% scale factors of (a) 127, (b) 127.5, (c) 128 or (d) 128.5 but each
choice
% has disadvantages.
% For forward scaling: (c) and (d) cause clipping on inputs of +1.
% For reverse scaling: (a) and (b) can generate output values < -1.
% Any of these scalings can be selected via the mode input: (a) 'o',
(b) default, (c) 'on', (d) 'n'
% Copyright (C) Mike Brookes 1998-2003
% Version: $Id: readwav.m,v 1.5 2006/11/06 08:16:02 dmb Exp $
%
% VOICEBOX is a MATLAB toolbox for speech processing.
% Home page:
http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%
% This program is free software; you can redistribute it and/or
modify
% it under the terms of the GNU General Public License as published
by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You can obtain a copy of the GNU General Public License from
% ftp://prep.ai.mit.edu/pub/gnu/COPYING-2.0 or by writing to
% Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139,
USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%
if nargin<1 error('Usage:
[y,fs,wmode,fidx]=READWAV(filename,mode,nmax,nskip)'); end
if nargin<2 mode='p';
else mode = [mode(:).' 'p'];
end
k=find((mode>='p') & (mode<='s'));
mno=all(mode~='o'); % scale to input limits not
output limits
sc=mode(k(1));
z=128*all(mode~='z');
info=zeros(1,9);
if ischar(filename)
if any(mode=='d')
filename=fullfile(voicebox('dir_data'),filename);
end
fid=fopen(filename,'rb','l');
if fid == -1
fn=[filename,'.wav'];
fid=fopen(fn,'rb','l');
if fid ~= -1 filename=fn; end
end
if fid == -1 error(sprintf('Can't open %s for input',filename));
end
info(1)=fid;
else
info=filename;
fid=info(1);
end
if ~info(3)
fseek(fid,8,-1); % read riff chunk
header=fread(fid,4,'uchar');
if header' ~= 'WAVE' fclose(fid); error(sprintf('File does not
begin with a WAVE chunck')); end
fmt=0;
data=0;
while ~data % loop until FMT and DATA chuncks
both found
header=fread(fid,4,'char');
len=fread(fid,1,'ulong');
if header' == 'fmt ' % ******* found FMT chunk
*********
fmt=1;
info(8)=fread(fid,1,'ushort'); % format: 1=PCM, 6=A-
law, 7-Mu-law
info(5)=fread(fid,1,'ushort'); % number of channels
fs=fread(fid,1,'ulong'); % sample rate in Hz
info(9)=fs; % sample rate in Hz
rate=fread(fid,1,'ulong'); % average bytes per
second (ignore)
align=fread(fid,1,'ushort'); % block alignment in
bytes (ignore)
info(7)=fread(fid,1,'ushort'); % bits per sample
fseek(fid,len-16,0); % skip to end of
header
if any([1 6 7]==info(8)) info(6)=ceil(info(7)/8);
else info(6)=1; sc='r';
end
elseif header' == 'data' % ******* found DATA chunk
*********
if ~fmt fclose(fid); error(sprintf('File %s does not contain
a FMT chunck',filename)); end
info(4) = fix(len/(info(6)*info(5)));
info(3)=ftell(fid);
data=1;
else % ******* found unwanted chunk
*********
fseek(fid,len,0);
end
end
else
fs=info(9);
end
if nargin<4 nskip=info(2);
elseif nskip<0 nskip=info(2);
end
ksamples=info(4)-nskip;
if nargin>2
if nmax>=0
ksamples=min(nmax,ksamples);
end
elseif ~nargout
ksamples=min(5,ksamples);
end
if ksamples>0
info(2)=nskip+ksamples;
pk=pow2(0.5,8*info(6))*(1+(mno/2-
all(mode~='n'))/pow2(0.5,info(7))); % use modes o and n to determine
effective peak
fseek(fid,info(3)+info(6)*info(5)*nskip,-1);
nsamples=info(5)*ksamples;
if info(6)<3
if info(6)<2
y=fread(fid,nsamples,'uchar');
if info(8)==1 y=y-z;
elseif info(8)==6
y=pcma2lin(y,213,1);
pk=4032+mno*64;
pkp=pk;
elseif info(8)==7
y=pcmu2lin(y,1);
pk=8031+mno*128;
pkp=pk;
end
else
y=fread(fid,nsamples,'short');
end
else % 3 or 4 byte values
if info(6)<4
y=fread(fid,3*nsamples,'uchar');
y=reshape(y,3,nsamples);
y=([1 256 65536]*y-pow2(fix(pow2(y(3,:),-7)),24)).';
else
y=fread(fid,nsamples,'long');
end
end
if sc ~= 'r'
if sc=='s'
sf=1/max(max(abs(y)),1);
elseif sc=='p'
sf=1/pk;
else
if info(8)==7
sf=2.03761563/pk;
else
sf=2.03033976/pk;
end
end
y=sf*y;
else % mode = 'r' - output raw values
if info(8)==1 y=y*pow2(1,info(7)-8*info(6)); end % shift to get
the bits correct
end
if info(5)>1 y = reshape(y,info(5),ksamples).'; end
else
y=[];
end
if all(mode~='f') fclose(fid); end
if nargout>2
wmode=setstr([sc 'z'-z/128]);
if info(8)==1 % PCM modes
if ~mno wmode=[wmode 'o']; end
if any(mode=='n') wmode=[wmode 'n']; end
wmode=[wmode num2str(info(7))];
elseif info(8)==6
wmode = [wmode 'a'];
elseif info(8)==7
wmode = [wmode 'u'];
end
fidx=info;
elseif ~nargout
codes=' '*ones(9,6); codes(1+[1 2 6 7],:)=['PCM ';'ADPCM ';'A-law
';'Mu-law'];
fprintf(1,'\n%d Hz sample rate\n%d channel x %d samples = %.3g
seconds\ndata type %d: %d bit %s\n',info([9 5 4]),info(4)/info(9),
info([8 7]),char(codes(1+max(0,min(8,info(8))),:)));
end
Funcin que calcula el error entre dos trozos de audio
% archivo: busqueda.m
%
% Funcin que va comparando dos huellas y obteniendo el error
% En las matrices entrada van los fingerprints correspondientes a los
3
% segundos de deteccin de la seal de audio (matriz de dimensin
256x32) y los fingerprints del anuncio
% (matriz de dimensin x32)
function d=busqueda(detectado,anuncio)
[m1,n1]=size(detectado);
[m2,n2]=size(anuncio);
for k=1:m2-m1
d(k)=sum(sum(abs(anuncio(k:k+m1-1,:)-detectado)));
end
Script del anlisis de robustez
% Archivo: robustez.m
%
% Script para calcular la BER entre dos trozos de audio
%
clear all;
Fs=44100/8; %frecuencia de muestreo
% cargamos el bloque de 3 segundos original y obtenemos su huella
audio1=readwav('jimmy_3sg_5512.wav');
f1=fingerprint_princ(audio1);
[m1,n1]=size(f1);
% cargamos el bloque modificado con el que vamos a comparar
audio2=readwav('jimmy_3sg_comp_5512.wav');
f2=fingerprint_princ(audio2);
[m2,n2]=size(f2);
% para tener en cuenta el hecho de que por la distorsin
% puede que los dos trozos sean de distinta duracin
if m1<m2
d=busqueda(f1,f2);
d=d./(m1*n1);
BER=min(d)
else if m1==m2
BER=sum(sum(abs(f2-f1)))/(m1*n1)
else
d=busqueda(f2,f1);
d=d./(m2*n2);
BER=min(d)
end
end
Anexo 2: Funciones usadas para el preprocesado
de filtrado
Script del anlisis de falso positivo
% Archivo: falsopositivo_filt.m
%
% Script que realiza el anlisis de falso positivo, se diferencia del
% anterior en la inclusin de la orden filter, que filtra el audio
% antes de calcular la huella
clear all;
%Proceso completo del anlisis de falso positivo
Fs=44100/8; %frecuencia de muestreo
alpha=0.35; %umbral
% cargamos el bloque de 3 segundos y obtenemos su huella
audio1=readwav('pictures5512_3sg.wav');
audio1filt=filter([0.99 -0.99],[1 -0.98],audio1);
f1=fingerprint_princ(audio1filt);
[m,n]=size(f1);
% cargamos el archivo con el que vamos a comparar, entero
audio2=readwav('1123075521_20min.wav');
audio2filt=filter([0.99 -0.99],[1 -0.98],audio2);
f2=fingerprint_princ(audio2filt)
%se comparan ambas huellas
d=busqueda(f1,f2);
d=d./(m*n); %BER de cada comparacin
% sacamos la media y la desviacin estndar
media=mean(d)
desv=std(d)
dfittool
Script del anlisis de robustez
% Archivo: robustez_filt.m
%
% Script para calcular la BER entre dos trozos de audio, tambin se
% diferencia del anterior en la inclusin de la orden filter
%
clear all;
Fs=44100/8; %frecuencia de muestreo
% cargamos el bloque de 3 segundos original y obtenemos su huella
audio1=readwav('vangelis_3sg_5512.wav');
audio1filt=filter([0.99; -0.99],[1; -0.98],audio1);
f1=fingerprint_princ(audio1filt);
[m1,n1]=size(f1);
% cargamos el bloque modificado con el que vamos a comparar
audio2=readwav('vangelis_3sg_lsc-1_5512.wav');
audio2filt=filter([0.99; -0.99],[1; -0.98],audio2);
f2=fingerprint_princ(audio2filt);
[m2,n2]=size(f2);
if m1<m2
d=busqueda(f1,f2);
d=d./(m1*n1);
BER=min(d)
else if m1==m2
BER=sum(sum(abs(f2-f1)))/(m1*n1)
else
d=busqueda(f2,f1);
d=d./(m2*n2);
BER=min(d)
end
end
Anexo 3: Funciones usadas en el preprocesado
de DDA
Script del anlisis de falso positivo
% Archivo: falsopositivo_dda.m
%
% Script para el anlisis de falso positivo. Se diferencia de
% los anteriores en que se llama a la funcin preprocdda, que es la
que
% hace el preprocesado en s mismo y en que se trabaja a 44100 Hz
clear all;
%Proceso completo del anlisis de falso positivo
Fs=44100; %frecuencia de muestreo
alpha=0.35; %umbral
% cargamos el bloque de 3 segundos y obtenemos su huella
audio11=readwav('pictures44100_3sg.wav');
preproc1=preprocdda(audio11);
audio1=decimate(preproc1,2); %de 11025 Hz a 5512,5
f1=fingerprint_princ(audio1);
[m,n]=size(f1);
% cargamos el archivo con el que vamos a comparar, entero
audio21=readwav('1123075521_5512_20min.wav');
preproc2=preprocdda(audio21.');
audio2=decimate(preproc2,2); % de 11025 Hz a 5512,5
f2=fingerprint_princ(audio2);
%se comparan ambas huellas
d=busqueda(f1,f2);
d=d./(m*n); %BER de cada comparacin
% sacamos la media y la desviacin estndar
media=mean(d)
desv=std(d)
Script del anlisis de robustez
% Archivo: robustez_dda.m
%
% Script para calcular la BER entre dos trozos de audio con
preprocesado
% DDA. Se diferencia de los anteriores en que se cargan los archivos a
% 44100 Hz
%
clear all;
% cargamos el bloque de 3 segundos original y obtenemos su huella
audio11=readwav('vangelis44100_3sg.wav');
preproc1=preprocdda(audio11);
audio1=decimate(preproc1,2); %se pasa de 11025 Hz a 5512 Hz
f1=fingerprint_princ(audio1);
[m1,n1]=size(f1);
% cargamos el bloque modificado con el que vamos a comparar
audio21=readwav('vangelis44100_3sg_lsc-4.wav');
preproc2=preprocdda(audio21);
audio2=decimate(preproc2,2); %se pasa de 11025 Hz a 5512 Hz
f2=fingerprint_princ(audio2);
[m2,n2]=size(f2);
if m1<m2
d=busqueda(f1,f2);
d=d./(m1*n1);
BER=min(d)
else if m1==m2
BER=sum(sum(abs(f2-f1)))/(m1*n1)
else
d=busqueda(f2,f1);
d=d./(m2*n2);
BER=min(d)
end
end
Funcin que hace el primer paso de preprocesado
% Archivo: preprocdda.m
%
% Funcin que realiza el primer paso de preprocesado del algoritmo DDA
%
function x=preprocdda(audio)
Fs=11025; %frecuencia de muestreo
N=4096; %numero de muestras por frame
overlap=1/2; %factor de solapamiento
desplaz=floor(N-N*overlap); %desplazamiento para comenzar cada trama
%antes de nada se submuestrea el audio a Fs
audio11025=decimate(audio,4);
% para calcular el numero de tramas
numtramas=floor((length(audio11025)-N)/desplaz); %numero de tramas sin
contar la primera
audio11025=audio11025(1:(N+numtramas*desplaz));
%Generamos el espectro logartmico
transf=mclt(audio11025,desplaz);
spect=10*log10(abs(transf));
%ya tenemos el espectro logartmico, ahora hay que realizar el primer
paso
%propiamente dicho
%Primero hay que realizar la DCT
for k=0:desplaz:length(spect)-desplaz
transdct(k+1:k+desplaz)=dct(spect(k+1:k+desplaz));
%se filtra paso-bajo, cogiendo solo los componentes principales
ramp=[1 0.8 0.6 0.4 0.2 zeros(1,desplaz-5)];
transdct(k+1:k+desplaz)=transdct(k+1:k+desplaz).*ramp;
%y se hace la transformada inversa
A(k+1:k+desplaz)=idct(transdct(k+1:k+desplaz));
for i=1:desplaz
A(k+i)=A(k+i)-6; %se bajan 6 dB
if A(k+i)<=-70
A(k+i)=-70;
end
if spect(k+i)-A(k+i)>0
xt(k+i)=spect(k+i)-A(k+i); %xt todava en el dominio
mclt, ahora hay que antitransformar
else
xt(k+i)=0;
end
end
end
% se vuelve a pasar a dominio del tiempo
x=imclt(xt,desplaz);
Funcin que hace la transformada MCLT
% Archivo: mclt.m
%
% Funcin que calcula la transformada MCLT de las distintas tramas
% de una seal de audio, de longitud M
function trans=mclt(x,M)
N=2*M;
j=sqrt(-1);
n=0;
k=0;
m=0;
%Ventana de anlisis
ha=zeros(2*M,1);
pa=zeros(2*M,M);
mclt=zeros(length(x),1);
%Ahora se computa la transformada
n=1:2*M;
ha=-sin(((n-1)+1/2)*pi/(2*M));
% creamos la matriz de anlisis, pa(n,k)
for k=1:M
for n=1:2*M
pa(n,k)=ha(n)*sqrt(2/M)*cos(((n-1)+(M+1)/2)*((k-
1)+1/2)*pi/M)-j*ha(n)*sqrt(2/M)*sin(((n-1)+(M+1)/2)*((k-1)+1/2)*pi/M);
end
end
%dividimos la seal en tramas de longitud 2M y multiplicamos por
%la matriz pa, dando lugar a transformadas de longitud M
for m=0:M:length(x)-N
frame=x(m+1:m+N);
trans(m+1:m+M)=pa.'*frame.';
if m==length(x)-N % para mandar la ltima
trama
frame=[x(m+M+1:m+N) x(1:M)];
trans(m+M+1:m+N)=pa.'*frame.';
end
end
Funcin que realiza la transformada MCLT inversa
% Archivo: imclt.m
%
% Funcin que realiza la transformada MCLT inversa, con tramas de
% longitud M
function y=imclt(x,M)
j=sqrt(-1);
n=0;
k=0;
m=0;
y=zeros(length(x),1);
yp=zeros(2*M,1); % transformadas parciales
ypant=zeros(M,1);
hs=zeros(2*M,1); %Ventana de anlisis
ps=zeros(2*M,M);
%Ahora se computa la transformada
n=1:2*M;
hs=-sin(((n-1)+1/2)*pi/(2*M));
% se genera la matriz de sntesis, ps(n,k)
for k=1:M
for n=1:2*M
ps(n,k)=1/2*hs(n)*sqrt(2/M)*[cos(((n-1)+(M+1)/2)*((k-
1)+1/2)*pi/M)+j*sin(((n-1)+(M+1)/2)*((k-1)+1/2)*pi/M)];
end
end
% En el algoritmo, para sacar la primera trama hace falta la ltima
% transformada parcial
ypant=ps*x(length(x)-M+1:length(x)).';
% se van sacando todas las tramas a partir de la transformada parcial
de
% dicha trama y de la anterior
for m=0:M:length(x)-M
yp=ps*x(m+1:m+M).'; %resultado parcial
y(m+1:m+M)=real(yp(1:M))+real(ypant(M+1:2*M));
ypant=yp;
end
Funcin que hace el segundo paso de preprocesado
% Archivo: preprocdda2.m
%
% Funcin que realiza el segundo paso de preprocesado del algoritmo
DDA
%
function x=preprocdda2(audio)
Fs=11025; %frecuencia de muestreo
N=4096; %numero de muestras por frame
overlap=1/2; %factor de solapamiento
desplaz=floor(N-N*overlap); %desplazamiento para comenzar cada trama
%antes de nada se submuestrea el audio a Fs
audio11025=decimate(audio,4);
% para calcular el numero de tramas
numtramas=floor((length(audio11025)-N)/desplaz); %numero de tramas sin
contar la primera
audio11025=audio11025(1:(N+numtramas*desplaz));
%Generamos el espectro logartmico
transf=mclt(audio11025,desplaz);
spect=10*log10(abs(transf));
%segundo paso
spectexp=10.^(spect/10); % se eleva el espectro logartmico
for k=0:desplaz:length(spect)-desplaz
Ht(k+1:k+desplaz)=hthres(spectexp(k+1:k+desplaz),Fs); %umbral
auditivo en u.n.
HtdB(k+1:k+desplaz)=10*log10(Ht(k+1:k+desplaz));
for i=1:desplaz
if spect(k+i)-HtdB(k+i)>=0
xt(k+i)=spect(k+i)-HtdB(k+i);
else
xt(k+i)=0;
end
end
end
% se vuelve a pasar a dominio del tiempo
x=imclt(xt,desplaz);
Funciones para obtener el umbral de audicin
% HTHRES Hearing threshold
%
% H. S. Malvar - Nov'00, (c) H. S. Malvar
%
% Syntax: Ht = hthres(X,fs)
%
% X = vector of frequency magnitude components
% fs = sampling frequency, in Hz
% Ht = vector of thresholds, in rms
function Ht = hthres(X,fs)
Dabs = 60; % in dB, how much to bring down Fletcher-Munson curves;
% it depends on the assumed playback level
Thmin = -60; % in dB, how far down can any threshold go
Thmax = 60; % in dB, how far up can any threshold go
Rfac = 8; % Power reduction factor in dB for masking within the
% same bark frequency band
% Bark subbands upper limits
Bh = [100 200 300 400 510 630 770 920 1080 1270 1480 1720 2000 2320
2700 3150 3700 4400 5300 6400 7700 9500 12000 15500 22050];
P = X.*X; % power spectrum
TdB = 0*P; % Threshold in dB
Nbands = length(X);
f=[0:Nbands-1]'*fs/(2*(Nbands-1)); % subband center frequencies, in Hz
% Loop to generate Bark power spectrum and Bark center thresholds
dindx = Nbands*2/fs; % # of coefficients per Hz
stop = 0;
i1 = 1;
il=[]; iu=[];
for i = 1:25 % scan all 25 Bark bands
% i-th Bark subband covers original subbands i1 to i2
i2 = round(Bh(i)*dindx);
if i2 > Nbands
i2 = Nbands;
stop = 1; % stop loop if signal bandwidth is reached
end
il = [il;i1];
iu = [iu;i2];
% Average RMS signal amplitude over Bark band [i1,i2]
Arms = sqrt(mean(P(i1:i2)));
% average signal amplitude over Bark band [i1,i2], in dB
Adb = 20*log10(Arms+eps);
% Tr = relative threshold given power level within i-th band
Tr = Adb - Rfac; % center threshold
Sbu(i) = Tr;
i1 = i2+1;
if stop break; end;
end
Lsb = i; % number of Barks covered for the given fs
% Cross-Bark spreading
Sbu = Sbu';
Sb = Sbu;
pl = -100;
pr = -100;
pli = Sbu(1);
for i = 1:Lsb
if i < Lsb; pr = Sbu(i+1)-25; else pr = -100; end
if pli > pl; pl = pli; end
pl = pl - 10;
if pl > Sb(i); Sb(i) = pl; end
if pr > Sb(i); Sb(i) = pr; end
pli = Sbu(i);
end
% Adjust thresholds considering absolute masking
for i = 1:Lsb
i1 = il(i);
i2 = iu(i);
Tr = Sb(i);
% Ta = Fletcher-Munson absolute threshold
Ta = mean(thrabs(f(i1:i2)))-Dabs;
if Tr < Ta; Tr = Ta; end
% Clip at minimum and maximum levels
if Tr < Thmin; Tr = Thmin; end
if Tr > Thmax; Tr = Thmax; end
Sb(i) = Tr; % save dB thresholds in vector Sb
TdB(i1:i2) = Tr; % same threshold for all bands within Bark band
end
Ht = 10.^(TdB/20); % convert from power to rms levels
%THRABS Absolute hearing threshold (Fletcher-Munson)
%
% H. S. Malvar - Nov'00, (c) H. S. Malvar
%
% Syntax: T = thrabs(f)
%
% f = frequency, in Hz (or a vector of frequencies)
% T = corresponding absolute threshold of hearing, in dB SPL
function T=thrabs(f)
fk = f/1000;
% Approximation to the F&M curves
T = 3.64*(fk.^(-.8))-6.5*exp(-.6*(fk-3.3).^2)+1e-3*fk.^4;
Agradecimientos
Antes de dar por acabada esta memoria, es el momento de dedicar
algunas palabras a todos aquellos que han formado parte del (largo)
proceso que culmina con el presente proyecto.
A veces parece que estos aos se han pasado volando, que no ha
sido tanto el tiempo transcurrido, pero han sido muchas las maanas,
muchas las tardes, que se han hecho llevaderas gracias a la buena
compaa y a los buenos amigos con los que he tenido la suerte de
coincidir. Algunos podrn venir a la presentacin, otros ya son personas de
provecho y tendrn que trabajar, pero sea como sea se merecen todo mi
agradecimiento por todos estos aos. Y a todos los que, fuera de la escuela,
se interesan por lo que hago, por como me va y confan en m, aqu incluyo
a los amigos de toda la vida (desde el instituto juntos, ya son aos!) y en
general a todos los que han estado pendientes desde la distancia, incluso
desde fuera de nuestras fronteras.
Tambin me gustara agradecer al tutor Dr. Jos Ramn Cerquides
por su ayuda para sacar adelante el proyecto en momentos en los que
pareca que se iba a atascar por carecer de algn material necesario para su
realizacin (buen momento para agradecer tambin al seor Malvar de
Microsoft, gran detalle el suyo) y a los miembros del tribunal.
Debo agradecer tambin su ayuda a mi compaero Alejandro Alvrez,
que ha estado trabajando en un proyecto similar al mo y ha compartido
conmigo su trabajo.
Y, por ltimo y ms importante a la familia, toda entera. Empezando
por mi hermano, siempre a mi lado y ahora marcndome el camino a
seguir, por supuesto mis padres, que me han aportado todo el apoyo y la
confianza necesarios para poder afrontar esto tranquilamente, sin otras
preocupaciones, sin presin y apoyndome tambin en todo lo que han
considerado mejor para m aunque ello les cueste tenerme lejos. Y a todos
los dems, por estar siempre atentos y, aunque muchas veces no sepan
exactamente en qu estoy trabajando, interesarse por saber como me va.