Separação de fontes de sinais de áudio Gustavo Leitão Programa de Pós-Graduação em Engenharia Elética e Computação – PPGEE Processos Estocásticos 09 de Dezembro de 2009 Resumo Este trabalho realiza um estudo para a aplicação prática de técnicas de separação de áudio em gravações onde envolva mais de uma fonte sonora e mais de uma fonte de captura simultaneamente. As técnicas analisadas foram a separação cega utilizando o método de análise de componentes independentes (ICA) e a separação “não cega” através de algoritmo genético. Abstract This work makes a study for the practical application of separation techniques in audio recording which involve more than one sound source and more than one source captures simultaneously. The techniques analyzed were blind source separation using independent component analysis (ICA) and the separation "not blind" through genetic algorithm. 1. Introdução Para se entender melhor analisaremos a Figura 1. o problema, mas também uma fração do sinal emitido por s2. Analogamente, o sinal captado pelo microfone s2 também será uma mistura dos dois sinais das fontes s1 e s2. O problema mostrado acima pode ser modelado idealmente da seguinte forma: a a a a Sendo a um coeficiente que pondera amistura os sinais (por exemplo, distância do microfone, tempo de propagação do som, etc.). Assume-se que tais coeficientes são desconhecidos, pois não é possível determinar seus valores sem conhecer a estrutura física exata do ambiente. A fim de se facilitar a notação, as equações (1) e (2) podem ser reescritas a forma matricial como: Deseja-se, a partir dos sinais capturados x1 e x2, obter os sinais originados pelas fontes s1 e s2. Se a matriz de mistura A fosse conhecida, o problema poderia ser resolvido simplesmente calculando-se a sua inversa e obtendo novamente os sinais originais da seguinte forma: Como a matriz A não é conhecida necessita-se de um algoritmo que estime esta matriz a fim de se obter o sinal de cada fonte. Figura 1 – Esquemático do problema. Como se pode observar pela Figura 1, existe duas fontes sonoras e um microfone posicionado em frente a cada uma delas. O microfone em frente a fonte s1 irá capturar não somente o sinal emitido pela própria fonte s1, Logo, o trabalho resume-se a encontrar a matriz estimada de aqui denotada por W para se estimar o sinal original de cada fonte: ̂ Para a realização deste trabalho foram analisadas duas técnicas: a separação cega através da análise de componentes independentes (ICA) e a separação “não-cega” através de um algoritmo genético. O propósito do trabalho é avaliar se alguma dessas técnicas é suficientemente boa para a separação de sinais de áudios em um ambiente real. 2. Análise de Indepentes (ICA) componentes A primeira abordagem utilizada neste trabalho foi através da análise de componentes independentes (ICA). A ICA é um poderoso método utilizado principalmente para o tratamento de problemas de separação cega de sinais de fontes independentes, também conhecido como Blind Source Separation (BSS). Uma das maneiras de se obter a matriz W desejada é calcular a matriz que maximiza a não-gaussianidade do vetor ̂ . Esta técnica está relacionada com o teorema do limite central. Por este teorema, a distribuição estatística de uma mistura de duas ou mais variáveis aleatórias é mais gaussiana do que a distribuição de cada componente individual [2] [5]. Portanto, ao maximizar a nãogaussianidade dos componentes, estamos na verdade obtendo sinais estatisticamente o mais independente quanto possível, se assemelhando do sinal das fontes originais. Desde quando foi proposto, diversas formas de se estimar o modelo ICA já foram apresentadas. Entre as alternativas existentes, pode-se citar a abordagem FastICA proposta por Hyvärinen [1] em que a convergência do algoritmo ocorre em tempo significativamente menor que as abordagens tradicionais antes aplicadas e que, portanto, torna muito mais viável a sua aplicação em diversos tipos de problemas mais complexos. Neste trabalho foi utilizado o algoritmo fastICA por negentropia o qual será melhor explicado a seguir. 2.1 ICA por negentropia A entropia é um conceito fundamental da Teoria da Informação e avalia o grau de informação que pode ser obtida através da observação de uma variável. Neste sentido, quanto mais imprevisível for a variável observada, maior será sua entropia. Se uma variável possui uma tendência, ou seja, se há uma grande probabilidade de um evento específico ocorrer, o ganho informacional não é tão grande em cada observação, pois já se espera que este evento altamente provável ocorra. Uma variável gaussiana possui a maior entropia entre variáveis de mesma variância [2]. Neste sentido, a entropia pode ser então, utilizada como uma medida de não-gaussianidade da seguinte forma: Desta forma obtém-se uma medida que é sempre positiva e mede a diferença de Entropia existente entre a variável observada e uma variável gaussiana com os mesmos parâmetros. Esta medida recebe o nome de negentropia, e nada mais é do que uma versão normalizada da Entropia e que pode ser utilizada pelo algoritmo do modelo ICA para encontrar os Componentes Independentes baseando-se na nãogaussianidade da distribuição. O cálculo da entropia, por conseguinte da negentropia, é uma medida que exige muito tempo computacional. Devido a isso, geralmente são utilizadas aproximações para se estimar a negentropia. Uma boa aproximação exaustivamente utilizada na literatura é dada por: ' !"# $ !"# %$& ( Na equação acima é uma constante, % é uma variável gaussiana com média zero e variâcia unitária, a variável a ser calculada com variância unitária e média zero, e # é uma função não-quadrática. Para o problema em questão foi utilizado a seguinte função nãoquadrática: # ) log cosh) 2.2 Pré-processamento Antes de aplicar o algoritmo ICA é necessário realizar um pré-processamento nos dados de entrada. Isso se deve ao fato de facilitar a convergência do algoritmo e servir de normalização para o cálculo da negentropia. O pré-processamento é constituído de duas grandes operações: a centralização e o branqueamento. A Figura 2 mostra as etapas do pré-processamento do sinal a serem realizadas antes da análise de componentes independentes. 67 89%: !"55 ; $ < Como 5 40 1 podemos reescrever a equação acima da seguinte forma: !"55 ; $ !"40 1 40 1 ; $ 4!"0 1 0 1; $4 ; < A matriz de covariância das observações de 0 1 , designada por 6=1 , é simétrica, pois os seus vetores são ortogonais entre si e os valores próprios são reais [4], assim pode-se escrever: 6=1 !"0 1 0 1; $ !>! ; , onde ! é uma matriz ortogonal cujas colunas são os vetores próprios normalizados de !?0 ′ 0 ′; @ e D = diag(d1,...,dn) é matriz diagonal com os valores próprios de 6=′ . O branqueamento é realizado através da seguinte transformação linear invertível não ortogonal: Figura 2 – Etapas do Pré-processamento. Centralização Consiste na remoção do nível DC do sinal, ou seja, torná-lo com média nula. Para isso, devese subtrair de cada amostra o valor médio do sinal como um todo. 1 0 0 !203 A imposição de média nula não afeta a matriz de mistura. Após a estimação da matriz de mistura A com os dados centrados, repõe-se o valor médio aos sinais separados. Branqueamento Após a centralização do sinal é necessário realizar o branqueamento do sinal. O branqueamento tem o objetivo de tornar o sinal com suas componentes descorrelacionadas e sua variância unitária. Para realizar o branqueamento dos dados aplica-se uma transformação linear invertível 4, de forma que as observações 5 40 1 tenham matriz de covariância identidade, isto é, sejam incorrelacionadas com variância unitária, ou seja: 4 > ! ; Contudo, 4 não é a única matriz de branqueamento; qualquer matriz A4 em que U é uma matriz ortogonal conduz ao mesmo resultado. Desta forma, o branqueamento reduz o número de parâmetros a estimar, reduzindo o espaço de pesquisa às matrizes ortogonais. Em vez de estimar os B parâmetros (elementos) de uma matriz de mistura genérica B C B, é necessário DD parâmetros, dado que este é o estimar número de graus de liberdade de uma matriz ortogonal. O branqueamento é uma forma adequada de reduzir a complexidade do problema. 2.2 FastICA Após o pré-processamento os dados são encaminhados para o operador que irá realizar a análise de componentes independentes, neste caso o FastICA. FastICA é uma abordagem proposta por Hyväri Nen[1,2] utilizada para se estimar o modelo ICA. Entre as vantagens deste método, se comparado ao algoritmo gradiente, pode-se citar: quantidade de problemas para o qual estes se aplicam seja bastante abrangente. • Não há necessidade de escolha de parâmetros para a execução do algoritmo, tal como a taxa de aprendizado do gradiente para atualização da matriz. Desta forma o modelo se torna mais confiável, pois não depende de uma boa escolha de valores por parte do usuário. Uma implementação do algoritmo genético começa com uma população (geralmente randômica) de cromossomos. Estas estruturas são então avaliadas para gerar oportunidades reprodutivas de forma que, cromossomos que representam uma solução "melhor" tenham maiores chances de se reproduzirem do que os que representam uma solução "pior". A definição de uma solução melhor ou pior é mensurada através do cálculo da função que se deseja maximizar ou minimizar, chamada de função de aptidão. Selecionado os cromossomos a serem reproduzidos são realizadas operações de cross-over e de mutação. A operação de cross-over realiza a combinação de dois cromossomos gerando, geralmente, dois novos indíviduos a partir da troca de informações entre os cromossomos pais. A mutação por sua vez insere um carater aleatório à operação de reprodução objetivando com que o algoritmo não convirja para um mínimo local. • É consideravelmente mais veloz que a abordagem por gradiente (convergência de 10 a 100 vezes mais rápida [1]). Para tanto, os componentes são estimados utilizando-se um algoritmo de ponto-fixo [2], capaz de encontrar com maior eficiência o ponto de maximização dos valores da função aplicada para a estimativa do algoritmo. Os passos da execução do algoritmo FastICA são descritos a seguir: 1.Inicializa-se aleatoriamente uma matriz ; 2. DE !"0 F # ; F 0$ !"#G ; F 0$ F ; 3. DE /||DE||; 4. Repetir o passo 2 até que haja convergência. As etapas de um típico algoritmo genético são mostradas na Figura 3. Onde # é uma função não-quadrática e #G sua derivada, a saber: #) 1/L F M9N 89OL) #G ) LBOL) Onde L é uma constante positiva tal que 1 P L P 2. Neste trabalho fixou-se L 1; 3. Algoritmo genético Os algoritmos genéticos são uma família de modelos computacionais inspirados na evolução. Incorporam uma solução potencial para um problema específico numa estrutura semelhante a de um cromossomo e aplicam operadores de seleção e "cross-over" a essas estruturas de forma a preservar informações críticas relativas à solução do problema. Normalmentes os algoritmos genéticos são vistos como otimizadores de funções, embora a Figura 3 – Etapas de um Algoritmo Genético. No presente trabalho o algoritmo genético foi utilizado com o intuito de procurar a matriz de mistura em um ambiente real através da maximização de uma função baseada na transformada de Fourier dos sinais fontes previamente fornecidos separadamente para o sistema numa etapa que aqui chamaremos de calibração. As etapas do algoritmo genético implementado serão descritas a seguir. população para a reprodução e o restante dos cromossomos eram descartados. A escolha baseava-se na preservação dos melhores indivíduos segundo o cálculo de aptidão previamente realizado. Início da População Reprodução Esta etapa consiste na geração aleatória de um conjunto solução, chamado aqui de população. Consiste na etapa onde os indivíduos selecionados na etapa de seleção gerarão novos indivíduos a partir de uma combinação dos indivíduos pais. Para o problema em questão os melhores resultados foram obtidos com uma população inicial de 3000 cromossomos. Cálculo de Aptidão O cálculo da aptidão consiste em fornecer uma maior nota a matriz de mistura que gere o sinal estimado ̂ que mais se aproxime do sinal de calibração previamente fornecido. Os sinais de calibração utilizados foram sinais senoidais com de freqüências bem distintas. Por isso, o cálculo da função de aptidão foi realizado a partir da semelhança das transformadas de Fourier do sinal de calibração e do sinal estimado ̂ . Abaixo segue a função de aptidão utilizada: B R S TT , Onde R corresponde a iésima freqüência do sinal e TT a sua magnitude normalizada. Tal cálculo visa dar baixas notas para sinais com freqüências fundamentais ligeiramente diferentes dos sinais de calibração e notas altas para sinais com transformada de Fourier bastante semelhantes. O problema se resume, então, a encontrar uma matriz de mistura que minimize o erro médio quadrático entre a função de aptidão dos sinais estimados e dos sinais de calibração. Seleção Consiste na etapa de selecionar os cromossomos para a etapa de reprodução. No presente trabalho, escolheu-se 50% da No presente trabalho a reprodução foi realizada pela permutação de linhas selecionadas aleatoriamente da matriz de mistura dos cromossomos em questão, gerando dois novos indivíduos para cada par de progenitores. Dessa forma, a quantidade de cromossomos na população mantém-se constante durante todo o processo. Mutação A operação de mutação é bastante importante para a convergência do algoritmo genético. Esta operação tem a finalidade de manter a diversidade da população e evitar a convergência para um mínimo local. Para este trabalho inseriu-se um componente aleatório na matriz de mistura gerada pela permutação durante a reprodução. A taxa de mutação que se obteve os melhores resultados foi em torno de 20%. Ou seja, em 20% das reproduções pelo menos um componente aleatório era inserido na matriz. 4. Metodologia Para a realização dos testes foram utilizadas duas abordagens. Na primeira, dois sinais senoidais um de 50hz e outro de 1100hz foram gerados e posteriormente combinados. A mistura destes sinais de áudio foi realizada de forma computacional a partir de uma matriz de mistura gerada aleatoriamente. Em seguida os sinais foram submetidos a separação via FastICA e via algoritmo genético. Na segunda abordagem, os mesmos sinais foram emitidos por dois monitores de referência e capturados por dois microfones. Cada monitor foi responsável por emitir um determinado sinal senoidal: 50hz e 1100hz. Neste este caso, caso a mistura acontece de maneira real devido às particularidades do ambiente e equipamentos utilizados. No caso dos testes realizados com o algoritmo genético, previamente foi feita uma calibração. Esta calibração consiste no fornecimento dos sinais a serem misturados previamente a parir da reprodução através dos monitores de referência separadamente para quee possa ser calculada a função de aptidão desses sinais reais. O objetivo desta abordagem é verificar se existe uma matriz W,, inversa da matriz de mistura, que reestabeleça o sinal original em um ambiente real. Ou seja, se os sinais podem ser recuperados por uma operação linear. A Figura 4 mostra o ambiente de teste utilizado. Os resultados podem ser observados pela análise das Figura 6 e 7 para o FastICA e da Figura 10 e 11 para o algoritmo genético. FastICA Figura 5 – Sinais misturados artificialmente. Figura 6 – Resultado da separação pelo FastICA. Figura 4 – Ambiente de teste 5. Resultados Serão apresentados dois tipos de resultados: os das misturas realizadas computacionalmente e das misturas reais através da captura dos sinais senoidais através de microfones. 5.1 Misturas Computacionais Nesta abordagem os sinais senoidais foram misturados computacionalmente a partir de uma matriz de mistura gerada aleatoriamente. Feito isso, os sinais foram submetido ao FastICA e ao algoritmo genético. Figura 7 – FFT do resultado da separação pelo FastICA. Genético 5.2 Misturas Reais Nesta abordagem os sinais senoidais foram emitidos por dois monitores de referencia. A frente dos monitores dois microfones adjacentes e idênticos captavam os sinais emitidos. Feito isso, os sinais foram submetido ao FastICA e ao algoritmo genético. Figura 8 – Sinais de calibração. Os resultados sultados podem ser observados pela análise das Figuras 13 e 14 para o FastICA e das Figuras 16 e 17 para o algoritmo genético. FastICA Figura 9 – Sinais misturados artificialmente. Figura 10 – Resultado da separação pelo Algoritmo genético. Figura 12 – Sinais misturados naturalmente. Figura 13 – Sinais separados via FastICA. Figura 14 – FFT Sinais separados via FastICA. Figura 11 – FFT do resultado da separação pelo Algoritmo genético. Genético forma tão completa como para misturas naturais. A dificuldade da separação plena nos casos reais nos leva a suspeita de que essas misturas não são perfeitamente lineares. Ou seja, não existe uma matriz única que represente a mistura dos sinais observados. Referências Figura 15 – Sinais misturados naturalmente. naturalmente [1] Aapo Hyvärinen, A Fast Fixed--Point Algorithm for Independent Component Analysis, Neural Computation 9 (1997), 1483–1492. [2] Aapo Hyvärinen, Juha Karhunen, arhunen, and Erkki Oja, Independent dent Component Analysis,Wiley interscience Publication, 2001. [3] A. J. Bell and T. J. Sejnowski, An information maximization approach to blind separation and blind deconvolution, onvolution, Neural Computation 7 (1995), 1129– 1159. [4] G. Strangg and K. Borre. Linear Algebra, Geodesy, and GPS. Wellesley-Cambridge Cambridge Press, 1997. Figura 16 – Sinais separados via algotitmo genético. Figura 17 – FFT Sinais separados via Algoritmos Genéticos. 5.3 Discurssões Como pode ser observado pela análise dos resultados, tanto o FastICA quanto o algoritmo genético se demonstraram eficientes para a separação de sinais de áudios cuja misturas foram realizadas artificialmente. Para misturas naturais, ou seja, aplicação real, não foi observada a separação plena dos sinais. Houve sim uma separação, porém não se deu de [5] Papoulis, A. (1993). Probability, Random Variables, and Stochastic Processes (3 ed.). McGraw Hill.