CELSO GARCIA DE OLIVEIRA ANÁLISE DE COMPONENTES ... · representa misturas de fontes desconhecidas...

75
UNIVERSIDADE DE BRASILIA CELSO GARCIA DE OLIVEIRA ANÁLISE DE COMPONENTES INDEPENDENTES NA SEPARAÇÃO DE MISTURAS CONVOLUTIVAS Trabalho de Conclusão de Curso submetido ao Departamento de Engenharia Elétrica, como exigência parcial de obtenção de graduação em bacharel em Engenharia Elétrica, sob a orientação do professor Dr. - Ing. João Paulo Carvalho Lustosa da Costa. BRASÍLIA, SETEMBRO DE 2012.

Transcript of CELSO GARCIA DE OLIVEIRA ANÁLISE DE COMPONENTES ... · representa misturas de fontes desconhecidas...

UNIVERSIDADE DE BRASILIA

CELSO GARCIA DE OLIVEIRA

ANÁLISE DE COMPONENTES INDEPENDENTES NA

SEPARAÇÃO DE MISTURAS CONVOLUTIVAS

Trabalho de Conclusão de Curso submetido ao

Departamento de Engenharia Elétrica, como

exigência parcial de obtenção de graduação em

bacharel em Engenharia Elétrica, sob a orientação

do professor Dr. - Ing. João Paulo Carvalho Lustosa

da Costa.

BRASÍLIA, SETEMBRO DE 2012.

ii

UNIVERSIDADE DE BRASÍLIA

CELSO GARCIA DE OLIVEIRA

ANÁLISE DE COMPONENTES INDEPENDENTES NA

SEPARAÇÃO DE MISTURAS CONVOLUTIVAS

Trabalho de Conclusão de Curso submetido ao

Departamento de Engenharia Elétrica, como

exigência parcial de obtenção de graduação em

Bacharel em Engenharia Elétrica, sob a orientação

do professor Dr. - Ing. João Paulo Carvalho Lustosa

da Costa.

Aprovado em 28 / SET /2012 por:

Dr. João Paulo C. Lustosa da Costa . . Orientador (ENE UnB) Assinatura

Dr. Ricardo Zelenovsky . . Examinador (ENE UnB) Assinatura

Dr. Adson Ferreira Rocha . . Examinador (ENE UnB) Assinatura

Menção:_________

Aprovado Aprovado com Restrições Reprovado

BRASÍLIA, SETEMBRO DE 2012.

iii

Dedico este trabalho de conclusão à Malu Gadu.

Sua alegria e o seu modo de ser contagia a mim no

momento que tenho contato com ela. Malu, exemplo

de desinteresse e humildade.

iv

AGRADECIMENTOS

O resultado deste trabalho é fruto de inúmeros eventos e participação contínua de

pessoas que me apoiaram desde o início de minha vida. Às pessoas que me ajudaram ao longo

desta jornada - com conselhos, afetos, ensinamentos e companheirismo – devo gratidão e

reciprocidade.

Primeiramente, agradeço aos meus pais, Celso Nazário e Lázara Garcia, por dar-me a

vida, por ensinar-me a comportar-me em sociedade e por me apoiarem, até mesmo quando me

encontrava descrente. A lembrança de seus atributos e de demonstração de carinho estará

sempre presente em minha consciência.

Agradeço à minha irmã, Priscila, por me ajudar na revisão e na formatação deste

trabalho e, principalmente, por se mostrar uma grande amiga em qualquer momento da minha

vida.

Também devo gratidão aos meus orientadores do trabalho de conclusão: Dr. João

Paulo da Costa e Dr. Ricardo Zelenovsky. Estes são homens de grande conhecimento e

exemplo de perseverança no aprofundamento contínuo de suas habilidades, além de

possuírem bastante paciência para instruir no aprendizado.

À divindade máxima, da qual emana todo o meu poder de continuar e persistir, eu

devo mencionar neste trabalho. O milagre e o propósito de vida sempre se mostraram

presentes no momento em que tinha dúvidas e receios sobre minha formação. Portanto,

obrigado Deus.

v

RESUMO

A Separação Cega de Fontes – BSS – é um tema bastante atual e em fase de desenvolvimento,

mesmo que o interesse pelo assunto por matemáticos e físicos seja razoavelmente antigo. O

melhoramento contínuo da computação e o desenvolvimento de métodos matemáticos como

estatística, cálculo, álgebra linear facilitam e servem de apoio para separação de misturas

antes consideradas impossíveis. O modelo BSS é uma formalização matemática que

representa misturas de fontes desconhecidas em ambientes desconhecidos. O trabalho aborda

a Análise de Componentes Independentes – ICA – como método de solução do problema

BSS. O ICA, inicialmente, foi utilizado na solução de problemas relativamente simples, como

misturas lineares e instantâneas. No entanto, a utilização de transformadas, em especial a

Transformada de Fourier, possibilitou tornar o algoritmo do BSS mais leve

computacionalmente por aproximar misturas convolutivas de misturas lineares. Então o

método ICA pôde ser aplicado em ambientes mais complexos como o de Múltiplas Entradas e

Múltiplas Saídas – MIMO. O sistema MIMO é uma boa representação para misturas

convolutivas em sinais de áudio e em sinais biológicos de exames biomédicos. A

transformada que merece destaque no trabalho é a Transformada de Fourier por Janelas –

STFT – que é um exemplo de uma transformada de representação tempo-frequência.

Palavras-chave: Separação Cega de Fontes, Transformada de Fourier, Transformada

de Fourier por Janelas, Análise de Componentes Independentes, Múltiplas Entradas e

Múltiplas Saídas.

vi

ABSTRACT

Blind Source Separation – BSS is a modern issue which is still being developed, although

mathematicians and physicists have a fairly old interest on this subject. The permanent

improvement on computation and development of mathematic methods such as statistics,

calculation, linear algebra help and support separating mixtures considered impossible in the

past. The BSS model is a mathematical formalization which represents unknown mixed

sources in unknown environments. This report broaches the Independent Analysis

Components – ICA as a solution for the BSS problem. ICA, at first, was used to solve quite

simple problems, such as linear and instantaneous mixtures. However, using transforms,

especially Fourier Transform, enabled BSS to become computationally lighter by approaching

convolutive and linear mixtures. Thus the ICA method could be applied to complex

environments such as Multiple Input Multiple Output System – MIMO, which is a great

approach for convolutive mixed sources in audio and biological signal tests from the medical

area. Short Time Fourier Transform – STFT is also mentioned in this paper as an important

example of a time-frequency representation transform.

Keywords: Blind Source Separation, Fourier Transform, Short-Time Fourier

Transform, Independent Component Analysis, Multiple Inputs Multiple Outputs.

vii

“A nossa razão deve ser considerada como uma

espécie de causa cujo efeito natural é a verdade;

mas um efeito tal que pode ser facilmente evitado

pela intrusão de outras causas e pela inconstância

das nossas faculdades mentais. Dessa maneira, todo

o conhecimento degenera em probabilidade; essa

probabilidade é maior ou menor segundo a nossa

experiência da veracidade ou da falsidade do nosso

entendimento e segundo a simplicidade ou a

complexidade da questão.”

David Hume.

viii

SUMÁRIO

Folha de Aprovação ................................................................................................

Resumo ....................................................................................................................

Abstract ....................................................................................................................

Capítulo 1 – Introdução ..........................................................................................

1.1 Organização do trabalho ................................................................................

Capítulo 2 – Separação Cega de Fontes ................................................................

2.1 Mistura linear ................................................................................................

2.2 Mistura convolutiva .......................................................................................

2.3 Ambiguidades do BSS ...................................................................................

Capítulo 3 – Estatísticas Matriciais de Variáveis Complexas ............................

3.1 Estatística de uma variável ............................................................................

3.2 Estatística matricial complexa .......................................................................

3.3 Curtose e Gaussiaidade ................................................................................

3.4 Verossimilhança ............................................................................................

Capítulo 4 – Análise de Componentes Independentes .........................................

4.1 Branqueamento ..............................................................................................

4.2 Separação através da curtose .........................................................................

4.3 Recuperando o escalonamento da função .....................................................

4.4 ICA utilizando Transformada Rápida de Fourier ..........................................

Capítulo 5 – ICA para Misturas Convolutivas .....................................................

5.1 Transformada de Fourier por Janelas ............................................................

5.2 Transformada Inversa de Fourier por Janelas ...............................................

5.3 Solução para ambiguidade de permutação ...................................................

Capítulo 6 – Conclusão ...........................................................................................

Referências Bibliográficas ......................................................................................

Anexo Códigos em MATLAB® ..............................................................................

A.1 Misturas lineares ............................................................................................

A.2 Misturas convolutivas de banda estreita ........................................................

A.3 Método utilizando STFT ...............................................................................

ii

v

vi

9

10

11

11

14

18

21

22

24

26

32

36

37

40

44

47

50

51

53

55

61

63

65

65

67

70

9

CAPITULO 1

Introdução

A separação Cega de Fontes – do inglês, Blind Source Separation (BSS) – é

um método utilizado em várias aplicações: separação de áudio, telecomunicações, RADAR,

SONAR, eletroencefalograma (EEG) [3], mamografia [2]. A denominação BSS vem do fato

que se sabe quase nada ou muito pouco a respeito das fontes ou o modo como são realizadas

as misturas – ou seja, caminho percorrido pelas fontes através do ambiente. O BSS engloba

métodos matematicamente complexas de misturas de sinais, como por exemplo, um conjunto

de fontes sonoras em um ambiente fechado: Cocktail Party Effect [10] e Múltiplas Entradas e

Múltiplas Saídas – do inglês Multiple Input Multiple Output (MIMO) [4]. O Cocktail Party

Effect é uma denominação advinda da mistura de sons ocorridas em um ambiente, e o sistema

MIMO é ocasionado devido à existência de ambientes reverberantes (reflexão em obstáculos).

Este trabalho estuda e expõe o método de separação através da Análise de

Componentes Independentes – do inglês, Independent Analysis Components (ICA) – como

uma alternativa da solução do problema BSS e do problema MIMO. O método ICA [2, 4] é

bastante simples e eficaz nos casos de misturas instantâneas e lineares como em ambientes de

telecomunicações. O método pôde ser ampliado com relativa simplicidade através da

utilização da Transforma Rápida de Fourier [7] – do inglês, Fast Fourier Transform (FFT) – e

conjugando-se as frequências “negativas” da transformada (Conjugado Negativo CN) com o

intuito de separar misturas convolutivas de sinais de banda estreita. CN é um método muito

simples que foi sugerido neste trabalho.

O trabalho também aborda a ampliação do método ICA na separação de misturas

convolutivas, MIMO, de sinais de banda larga através da utilização da Transformada de

Fourier por Janelas – do inglês, Short Time Fourier Transform (STFT). A STFT, um exemplo

de transformada tempo-frequência [3], é a ferramenta utilizada para aproximar as misturas

convolutivas em misturas lineares, como pode ser visto em [1], que é o principal motivador

deste trabalho.

10

O método ICA é totalmente baseado em análise estatística e utilização de números

complexos [6] devido à inserção de transformadas no método. A quantidade de fontes

processadas pelos algoritmos a serem apresentados também necessita de uma análise de

álgebra matricial mais formalizada.

1.1. Organização do trabalho

Este trabalho encontra-se dividido em seis capítulos. O primeiro capítulo corresponde

à introdução do trabalho que já foi previamente abordada. No segundo capítulo, abordar-se-á

uma formalização algébrica para o BSS; tanto para as misturas lineares e instantâneas, quanto

para as misturas convolutivas (sistema MIMO).

No terceiro capítulo, serão expostos métodos matriciais complexos de estatística,

como média, variância e correlação. Também serão abordadas medidas que revelam a respeito

da desordem de um sinal como a curtose e a sua relação com a Gaussianidade. No Capítulo 3,

também será introduzido uma ideia a respeito da distribuição de um sinal através da

verossimilhança.

A separação, propriamente dita, virá à tona com a descrição do método ICA no quarto

capítulo. Abordar-se-ão todas as etapas de separação para misturas lineares e instantâneas,

incluindo o branqueamento e a separação através da curtose de maneira iterativa. Também

será exposta a maneira de solucionar misturas convolutivas de sinais de banda estreita através

do ICA, da aplicação da FFT e do CN.

No quinto capítulo, o método ICA será aperfeiçoado para se englobar misturas

convolutivas utilizando-se a Transformada de Fourier por Janelas – STFT. A solução da

ambiguidade de permutação será exposta através da análise da correlação espectral.

O sexto, ou o ultimo capítulo corresponde às conclusões finais deste trabalho de

conclusão de curso.

11

CAPITULO 2

Separação Cega de Fontes

A Separação Cega de Fontes - do inglês, Blind Source Separation, BSS [2] - é um

conceito que formaliza a ocorrência de misturas de sinais de maneira geral, embora essa seja a

representação mais comum de misturas de sinais sonoros através do ambiente, bem como sua

capitação por microfones. Uma das dificuldades do processo de separação de fontes através

do BSS é que se sabe muito pouco ou quase nada sobre as fontes de sinais que se deseja

separar ou sobre a maneira como os sinais são misturados.

Neste capítulo, abordar-se-á o significado algébrico das misturas de fontes de sinais:

tanto as lineares instantâneas, caso em que considera um ambiente ideal; quanto as misturas

convolutivas, que se aproximam mais da realidade quando se trata de sinais de áudio ou em

casos genéricas, em que o atraso e/ou reflexões devam ser consideradas.

2.1. Mistura linear

O conceito mais simples para o BSS é o linear instantâneo. Este caso restrito de

separação cega de fontes não é o mais comum na ocorrência de eventos físicos reais; no

entanto, sua simplicidade serve como base para o entendimento de casos mais complexos.

Suponhamos um conjunto de fontes independentes S em função do tempo. Uma fonte i

no instante temporal discreto n pode ser definida como sendo si(n). Então é possível idealizar-

se um conjunto de sinais X dos sensores, de modo que cada mistura (sensor) possa ser

representada pela forma algébrica xj(n) referente à mistura do sensor j no instante de tempo n.

,

1

( ) ( )Q

j i j i

i

x n h s n

(2.1)

12

Na expressão (2.1), Q representa a quantidade de fontes; e na expressão (2.2) P a

quantidade de sensores que captam as fontes.

Percebe-se que os sinais das fontes são superpostas linearmente com um peso de valor

hi,j, que é o fator multiplicativo da fonte i para o sensor j. Deseja-se encontrar os fatores wj,i

que separam cada fonte do sinal S. Seja yi(n) a estimação dos sinais separados da fonte i no

instante de tempo n. É possível se estimar yi(n) da seguinte maneira:

,

1

( ) ( )P

i j i j

j

y n w x n

. (2.2)

Este tipo de representação matemática pode não ser muito intuitiva e de fácil

entendimento, pois somente conseguimos verificar o que acontece para cada sensor em apenas

um determinado instante de tempo. Já em uma representação matricial, é possível enxergar

todos os sinais em qualquer instante de tempo, mas para isso é necessário definir cada matriz

de forma sistemática antes de se realizar qualquer operação.

A matriz de fontes S pode ser representada como sendo um vetor coluna de tamanho

Q, em que Q é a quantidade de fontes disponíveis no sistema. Cada elemento do vetor S é um

vetor linha de K elementos, que mostra como o sinal si se comporta em função do tempo.

Portanto as fontes S podem ser representadas por uma matriz de dimensão Q linhas por K

colunas, em que cada linha refere-se a um determinado sinal i, e cada coluna indica um

instante de tempo n.

1 1 1

2 2 2

(1) (2) ( )

(1) (2) ( )

(1) (2) ( )Q Q Q

s s s K

s s s K

s s s K

1

2

Q

s

sS

s

(2.3)

A matriz de mistura X pode ser representada de forma semelhante mudando-se apenas

a quantidade de colunas da matriz, que é igual à quantidade P de sensores no sistema.

1 1 1

2 2 2

(1) (2) ( )

(1) (2) ( )

(1) (2) ( )P P P

x x x K

x x x K

x x x K

1

2

P

x

xX

x

(2.4)

Então podem relacionar-se as duas matrizes através de uma matriz de misturas H de

tamanho P linhas por Q colunas. Cada elemento hi,j da matriz H representa um “ganho” à

fonte si percebida na mistura xj.

13

1,1 1,2 1,

2,1 2,2 2,

,1 ,2 ,

Q

Q

P P P Q

h h h

h h h

h h h

Η (2.5)

Agora pode-se escrever a matriz X em função de S e H na forma matricial compacta

X=H.S ou na forma matricial estendida:

1,1 1,2 1,

2,1 2,2 2,

,1 ,2 ,

.

Q

Q

P P P Q

h h h

h h h

h h h

11

22

QP

sx

sx

sx

. (2.6)

O objetivo é encontrar uma matriz separadora W que seja igual ou proporcional à

inversa de H, no caso de Q=P, ou a pseudoinversa de H, caso contrário. É necessário salientar

que: em casos em que não se sabe nada a respeito das fontes e da matriz misturadora, é

necessário que a quantidade de sensores seja maior ou igual à quantidade de fontes a serem

misturadas, ou seja, P Q. Caso esta desigualdade não seja respeitada, o método de separação

deverá ser mais complexo que no trabalho apresentado.

Da mesma forma, o sinal separado pode ser relacionado com a mistura da seguinte

maneira Y=W.X, de modo que W possuam as mesmas dimensões da transposta de H, ou seja,

Q linha por P colunas.

1,1 1,2 1,

2,1 2,2 2,

,1 ,2 ,

.

P

P

Q Q Q P

w w w

w w w

w w w

1 1

2 2

Q P

y x

y x

y x

(2.7)

A maior dificuldade do processo é encontrar a matriz separadora W através do

processamento de características estatísticas das misturas coletadas pelos sensores

(microfones).

Embora a formalização do BSS linear aparente seja simples, existem grandes

dificuldades a serem superadas no processo de separação dos sinais misturados. As maiores

dificuldades são:

não se sabe nada ou muito pouco sobre as fontes S ou sobre a matriz de

mistura, sendo que esta é consequência direta do meio físico no ambiente propagante;

sistemas e sensores reais são suscetíveis a ruídos;

14

a matriz misturadora, em sistemas de áudio, não são lineares; mas misturas

convolutivas dos sinais originais.

Figura 2.1: As fontes S são misturadas pelo ambiente, captadas pelos sinais X dos sensores e levadas a um

processador que tenta separar os respectivos sinais Y.

2.2. Mistura convolutiva

A definição de misturas convolutivas é de grande relevância no processamento de

sinais de áudio, já que em todos os casos de recepção de sinais por microfones ocorre esse

tipo de mistura, mesmo que esta possa ser aproximada por uma mistura linear. Na (2.8) a

seguir, * simboliza um operador de convolução.

1,1 1,2 1, 1,1 1,2 2 1,

2,1 2,2 2, 2,1 2,2 2 2,

,1 ,2 , 1, 1, 2 ,

Q Q Q

Q Q Q

P P P Q P P P Q Q

h h h h h h

h h h h h h

h h h h h h

* * *

* * **

* * *

111

122

1QP

s s ssx

s s ssx

s s ssx

(2.8)

Embora a definição (2.8) seja de fácil representação, ela não ajuda muito a entender

como são as características gerais das misturas captadas pelos sensores. Antes de se verificar a

15

forma padrão da matriz de mistura convolutiva H, é necessário compreender o porquê da

ocorrência de convoluções em sistemas de sinais de áudio.

As ondas sonoras possuem velocidade limitada, então cada microfone, ao detectar o

sinal, o recebe em instantes de tempos ligeiramente diferentes proporcionando um atraso a

cada um dos sensores. Além do atraso, os sons sofrem reverberações (reflexões em curtos

instantes de tempo) nos obstáculos do ambiente onde se encontram. Estes tipos de

comportamentos são conhecidos como problemas de múltiplos percursos ocasionados pelos

obstáculos, e, ainda, a reverberação pode acabar acarretando em ondas estacionárias,

dificultando ainda mais o processamento de algoritmos que se baseiam na estimação dos

tempos de atrasos ocorridos pela onda. Qualquer pessoa que tenha cantado em um banheiro

pequeno sabe o efeito da influência das ondas estacionárias na afinação e no timbre da voz.

Figura 2.2: Um espectador escutando a superposição do efeito de múltiplas reverberações da voz do

cantor ocorridas nas paredes do teatro. Este efeito pode dar origem ao aparecimento de ondas

ressonantes; caso isso ocorra, o espectador terá falsa sensação de que o cantor é muito mais afinado do

que realmente ele é.

Percebe-se então que um sensor irá captar o mesmo sinal repetidas vezes, e esta

repetição de componentes de frequências defasadas pode contribuir para o aparecimento de

ondas estacionárias em curtos espaços de tempo devido à superposição construtiva de

componentes ressonantes.

Embora a maioria dos efeitos misturadores de um sistema BSS real seja convolutivo,

ele é satisfatoriamente representável por um somatório de M misturas lineares, como pode ser

visto na expressão (2.9) a seguir.

16

1

1 0

( ) ( ) ( )Q M

j i j i

i l

x n h l s n l

(2.9)

Antes de uma fonte i ser misturada com as demais, ela é autodestorcida através de uma

série de atrasos l e de ganhos hi,j(l). Então a autoconvolução de uma fonte pode ser definida

pela (2.10), que, assim como a (2.9), também é conhecida como uma representação de um

sistema de múltiplas entradas e múltiplas saídas – do inglês, multiple input and multiple

output, MIMO [4].

1

0

( ) ( ) ( )M

i i j i j i

l

s n h h l s n l

* (2.10)

Substituindo a (2.10) na (2.9), obtêm-se a (2.11), que é a mesma fórmula da expressão

matricial (2.8).

1

( ) ( )K

j i i j

i

x n s n h

* (2.11)

A solução para a separação de uma mistura de um sistema MIMO deve incluir a

correção de atrasos provocados pelo ambiente, ou seja, a matriz separadora também deve ser

uma convolução com os sinais recebidos pelos sensores X.

1

1 0

( ) ( ) ( )K L

i ji j

i l

y n w l x n l

(2.12)

Em uma boa estimação de saída para um sistema MIMO, o valor de L em (2.12) deve

ser no mínimo igual ao valor de M em (2.9); sendo que o caso ideal ocorre em algoritmos em

que os dois valores são iguais entre si, L=M. De forma semelhante definida pelas misturas, a

separação Y também pode ser representada matricialmente por uma convolução do sinal

misturado X com uma matriz separadora W.

1,1 1,2 1, 1,1 1,2 1,

2,1 2,2 2, 2,1 2,2 2,

,1 ,2 , 1, 1, ,

P P P

P P P

Q Q Q P Q Q Q P P

w w w w w w

w w w w w w

w w w w w w

* * *

* * **

* * *

1 21 1

1 22 2

1 2Q P

x x xy x

x x xy x

x x xy x

(2.13)

Embora as definições de misturas reais aqui expostas resolvam razoavelmente

problemas reais de misturas de sinais de áudio por intermédio de algoritmos como o

TRINICON [4], seria interessante resolver estes tipos de misturas como se fossem lineares.

Uma solução para esse impasse seria por meio de uma das propriedades da Transformada de

17

Fourier [7,8]: uma convolução de duas funções no domínio do tempo é o mesmo que uma

multiplicação direta das duas no domínio da frequência, ou seja, o sinal antes de ser detectado

pelo sensor pode ser representado como sendo filtrado no domínio da frequência.

Figura 2.3: A convolução da função G(t) com uma série de impulsos U(t) é igual à soma das funções Gs(t)

multiplicadas pelas respectivas “amplitudes” dos impulsos e atrasadas no instante em que estes ocorrem.

A Figura 2.3 mostra um sinal qualquer G(t) sendo convoluido com uma função U(t),

que é uma série de impulsos de amplitudes diferentes espaçados em instantes de tempos não

necessariamente regulares. O resultado é um somatório de funções semelhantes a G(t) com

ganhos proporcionais às amplitudes de cada impulso e atrasadas no mesmo instante de tempo

em que os respectivos impulsos ocorrem. Este resultado é muito semelhante ao ocorrido no

BSS convolutivo ou no sistema MIMO.

A Transformada de Fourier de uma função f(t) é simbolizada da seguinte maneira:

F(ω) f(t), em que representa o operador da Transformada de Fourier. Embora sua

definição completa seja dada por:

( ) ( ) jwtF f t e dt

.

Embora este conhecimento (Transformada de Fourier) seja básico nos cursos de

Engenharia, Física ou Matemática, é necessário acrescentar sua formalização neste trabalho,

para que não haja nenhuma confusão por parte dos leitores. O j que aparece na definição da

transformada refere-se ao número imaginário e o e representa a base do logaritmo Neperiano.

18

Voltando à Figura 2.3, a função U(t) no domínio do tempo é igual a um somatório de

impulsos δl de amplitude al, que corresponde a um somatório de defasagens proporcionais à

frequência no espectro, uma vez que a Transformada de Fourier possui propriedades lineares.

( )( ) ( ( )) ( ) j l

l l

l l

u t a t l U a e (2.14)

O resultado desse somatório de diferentes defasagens com diversas amplitudes é um

filtro com amplitude e fase diferentes para cada raia de frequência. Percebe-se que a

amplitude de cada componente do sinal filtrado é alterada devido à ocorrência de

superposição de componentes de frequências, que pode ser construtiva ou destrutiva. Então

em um ambiente fechado, algumas frequências de um sinal sonoro podem desaparecer,

enquanto outras podem entrar em ressonância, dependendo da geometria do espaço.

( )( ) ( ) jU A e (2.15)

Com isso, existe a possibilidade de considerar-se uma mistura convolutiva no domínio

do tempo como uma mistura linear em cada componente de frequência de um conjunto de

fontes. Este fato será abordado posteriormente no método de Análise de Componentes

Independentes –do inglês Independent Componet Analisis (ICA) utilizando Transformada

Discreta de Fourier [8].

( ) ( ) ( ) ( ) ( ) ( )x t h t s t X H S * (2.16)

Dessa forma, um algoritmo ICA a ser explicado no CAPÍTULO 4 deve separar o sinal

misturado em cada raia de frequência e unir cada uma das frequências para retornar à fonte

completa com o mínimo de distorção. Isso faz com que algumas ambiguidades do BSS sejam

altamente relevantes.

2.3. Ambiguidades do BSS

As ambiguidades do sistema BSS são ambiguidades de escalamento e ambiguidades

de permutação como pode ser percebido em [1, 2, 12].

A ambiguidade de escalamento corresponde ao fato de a amplitude, ou energia, do

sinal ou das suas componentes de frequências originais jamais poder ser encontrada. Este fato

19

será provado posteriormente e é consequência da falta de conhecimento prévio dos sinais S e

da matriz de mistura H.

Já na ambiguidade de permutação, a ordem dos sinais S não pode ser determinada. Os

métodos de separação de fontes cegas são puramente estatísticos, então a ordem dos sinais

separados ocorre ao acaso.

Figura 2.4: Ambiguidades do BSS. As saídas estão com amplitudes diferentes das originais e desordenadas

em relação às fontes.

Estas ambiguidades não prejudicam a informação do sinal original quando este é

separado completamente de uma única vez; entretanto, no método de separação de cada

componente de frequência do sinal, isso pode ser desastroso na hora de “montá-lo” para gerar

o sinal separado.

As ambiguidades de escalamento e de permutação são corrigidas matematicamente

através da multiplicação do sinal separado por uma matriz diagonal Λ e uma matriz de

permutação P, respectivamente.

1

2

0 0

0 0

0 0 Q

(2.17)

20

A matriz diagonal dá um ganho diferente na amplitude em cada um dos vetores linhas

do sinal. Um exemplo genérico é dado na multiplicação matricial a seguir.

1 1

2 2 2

0 0

0 0.

0 0 Q Q Q

1y

y

y

1

2

Q

y

y

y

A matriz de permutação é uma matriz quadrada de zeros e uns que muda a ordem dos

sinais. É necessário acrescentar que, na matriz de permutação, só deve haver um único um em

cada linha e coluna da matriz.

0 1 0

0 0 1

1 0 0

3P

A matriz P3 acima é um exemplo de matriz de permutação. Sua capacidade de

permutação pode ser mostrada pela operação algébrica abaixo.

0 1 0

0 0 1 .

1 0 0

a b

b c

c a

Dadas as definições das matrizes de permutação P e diagonal Λ, é possível que o sinal

S antes de ser misturado tenha relação com o sinal Y separado da seguinte maneira:

S PYΛ . (2.18)

No capítulo 4 será explicado o método de estimação da matriz de misturas e no

capitulo 5 o de estimação da matriz de permutação.

21

CAPITULO 3

Estatísticas Matriciais de Variáveis Complexas

No processo de separação de sinais de fontes cegas, é necessário conhecimento prévio

a respeito do cálculo estatístico de algumas variáveis na forma matricial e complexa, sejam

elas aleatórias ou não. Os cálculos complexos [6] possuem relevância nos métodos de

separações que envolvem transformadas de Fourier.

Além do entendimento de técnicas matriciais e complexas, é necessário acrescentar

também que a estatística de dados amostrais é levemente diferente das populacionais e que as

duas se aproximam bastante à medida que a quantidade de amostras tende a infinito e o

intervalo de amostragem tende a zero. O ideal para a programação seria que as amostras se

aproximassem ao máximo da população, entretanto isso faz com que o custo computacional

aumente em ordens muitas vezes superiores à quantidade de amostras coletadas.

Sabendo da existência de diferenças entre a estatística amostral e a real e que as

informações coletadas se aproximam da realidade para grandes quantidades de amostras, não

serão abordadas neste trabalho medidas estatísticas populacionais; como por exemplo,

esperança. È necessário esclarecer que a maximização da amostragem melhora a aproximação

da realidade e aumenta do custo computacional. Dessa forma, apenas será abordada a

estatística amostral, que é a que realmente se pode possuir para ser analisada, já que sinais

reais são considerados contínuos no tempo.

Não é suficiente relatar que as estatísticas aqui mencionadas não serão apenas de

cunho amostral, mas também que cada variável aleatória da forma matricial será representada

por um vetor linha, diferentemente da maioria dos programas, como o MATLAB®, que

considera cada variável separadamente como um vetor coluna da matriz.

Além do cálculo de variáveis estatística de amostras no formato matricial, ainda serão

abordadas métodos de distribuição [2] que revelam a respeito de informações sobre o

comportamento dos sinais a serem separados.

22

Antes de se passar para a abordagem matricial de números complexos, é necessário

um aprendizado razoavelmente detalhado da estatística de apenas uma variável, ou seja, a

análise de uma variável separadamente.

3.1. Estatística de uma variável

Considere um vetor de amostras de um sinal a em que a=[a1 a2 a3...ak], ou seja um

vetor linha com K amostras. Podemos calcular sua média μa, que é o principal dado de

tendência central de uma variável, como sendo:

1

1 K

a i

iK

a . (3.1)

Embora o símbolo μ seja utilizado na maioria das vezes para representar a esperança

de uma variável, neste trabalho o consideraremos como média, assim como todos os símbolos

que supostamente poderiam se referir a medidas populacionais. Como foi dito anteriormente,

abordar-se-ão apenas medidas amostrais.

Além de medidas de tendência central, como a média, é importante a definição de

valores que indicam como estão dispersas as variáveis analisadas. Uma delas é o desvio

padrão da variável a considerada, σa, que pode ser definido como sendo:

22

1

1 K

a i a

iK

a . (3.2)

Os estudiosos de estatística, em dados amostrais, preferem que a quantidade de

amostras k seja subtraída de um antes de se dividir o somatório, entretanto isso importa muito

pouco para uma grande quantidade de valores amostrados.

A (3.2) está sendo representada como o quadrado do desvio padrão de a, que

corresponde à variância da variável a. O sinal de módulo está explícito para abranger o

cálculo de variáveis complexas. Vale lembrar que o módulo quadrado de um número é igual

ao produto deste por seu conjugado.

O cálculo estatístico de uma variável não é suficiente para ser usado na separação de

sinais; pois se deve interagir com os diferentes sinais entre si para saber da existência de

23

alguma relação entre eles à medida que os sinais são separados. Uma boa medida de

relacionamento entre as variáveis é a covariância, sendo esta uma generalização da variância,

já que a variância de uma variável seria uma covariância com ela mesma.

Considerando dois vetores linhas a e b de tamanho K, a covariância ∑ab de a com b

pode ser definida da seguinte maneira:

*

1

1cov( , ) .

K

ab i a i b

i

a bK

a b . (3.3)

Em que o asterisco representa o conjugado complexo do resultado algébrico do valor

entre parênteses.

Quanto maior o valor desta medida em módulo, maior a relação entre as variáveis;

entretanto, o desvio padrão de cada um dos vetores contribui proporcionalmente ao valor da

covariância. Felizmente, há outra medida que soluciona este tipo de parcialidade no valor,

denominada correlação Rab, que desconsidera o valor do desvio padrão de cada uma das

variáveis, ou seja,

corr( , ) abab

a b

R

a b . (3.4)

Figura 3.1: Para saber o quanto estão correlacionadas duas variáveis, basta plotar a distribuição conjunta

das duas amostras. Na ordenada estão as amostras de a e na abscissa as amostras de b. Respectivamente,

da esquerda para direita, correlação nula, positiva e negativa.

A correlação possui valor limitado devido a sua imparcialidade aos desvios das

respectivas variáveis, ela varia entre o intervalo fechado de -1 a 1, sendo que o valor unitário

indica dependência total entre as varáveis, ou seja, elas estão cem por cento linear e

positivamente relacionadas. Valores negativos com módulo próximos ao unitário também

24

possuem dependência, porém negativa. No caso de descorrelação total, considerado ideal para

se separar duas fontes cegas, a correlação possui valor nulo. Exemplos de gráficos de análise

de correlação podem ser vistos na Figura 3.1.

Outro valor estatístico de grande importância na separação de sinais, especialmente em

métodos que se utilizam da maximização da não Gaussianidade, é a curtose, representado por

κ. A curtose de uma variável a é dada pela expressão:

4

41

13

K

a i a

ia

aK

. (3.5)

Foi dedicado o final deste capítulo a explicar o significado do valor da curtose e a sua

relação com a Gaussianidade de uma variável qualquer analisada. O valor de menos três da

fórmula acima às vezes não é expresso por alguns estudiosos de estatística. No MATLAB®, este

número não é utilizado para calcular a curtose através da função “kurtosis”.

Novamente o módulo acrescido na fórmula tem a intenção de englobar variáveis

complexas.

3.2. Estatística matricial complexa

Suponha uma matriz complexa A com N variáveis aleatórias de K amostras colatadas

em um mesmo instante de tempo para cada uma delas:

1 1 1

2 2 2

(1) (2) ( )

(1) (2) ( )

(1) (2) ( )N N N

A A A K

A A A K

A A A K

1

2

N

A

AA

A

. (3.6)

Pela forma matricial acima, percebe-se que na matriz A; as colunas representam

diferentes variáveis que variam de um até N e que as linhas representam o valor de uma das

variáveis em um determinado instante que varia de um até K.

A partir desta definição e do conhecimento dos símbolos previamente definidos neste

capítulo, pode-se mostrar o cálculo de várias variáveis aleatórias ao mesmo tempo em uma

representação mais compacta, representação matricial.

25

A média da matriz A pode ser definida da seguinte maneira:

2 2 2

N N N

1 1 1A A A

A A A

A

A A A

. (3.7)

A matriz da média possui as mesmas dimensões da matriz A. Essa repetição de termos

da matriz K vezes é algo necessário para se fazer somas ou subtrações com a matriz A.

O desvio da matriz A é dado por uma matriz diagonal em que cada elemento da

diagonal principal é um desvio da respectiva variável aleatória. Ou seja,

1

1

0 0

0 0

0 0N

A

A

A

. (3.8)

Esta definição ajuda na multiplicação ou divisão desta matriz com a matriz A.

A curtose é um vetor coluna que corresponde a curtose de cada um dos respectivos

vetores linhas da matriz A, portanto:

2

N

1A

A

Α

A

. (3.9)

Na estatística de formato matricial, ao invés de se utilizar covariância se utiliza a

autocovariância que é uma matriz simétrica que contem a covariância de cada um dos vetores

linhas da matriz A, ou seja:

1

2

2

12 1

2

12 2

2

1 2 N

N

N

N N

A

A

AA

A

(3.10)

Lembrando que a covariância de uma variável com ela mesma é igual a sua variância.

Portanto, a diagonal principal da autocovariância é igual à variância dos respectivos vetores

linhas de A. A autocovariância pode ser calculada da seguinte maneira:

26

H1

cov( )K

AA A AA A A . (3.11)

Em que o H representa o conjugado transposto do termo entre parênteses.

A autocorrelação é uma matriz quadrada que possui correlações de cada vetor linha de

A, semelhante à autocovariância. É fácil deduzir que a diagonal principal de autocorrelação é

composta exclusivamente de uns.

12 1

12 21

1 2

1

1corr( ) cov .

1

N

N

N N

R R

R R

R R

AA AR A A (3.12)

A expressão 3.12 representa que a autocorrelação é a covariância de A divido pelo

desvio de A.

OBS: Os “códigos fonte” dos cálculos estatísticos na forma matricial e vetorial estão no

Anexo Código do MATLAB®.

3.3. Curtose e Gaussianidade

Além dos dados estatísticos amostrais, a separação cega de fontes necessita de

comparações estatísticas a respeito da desordem das variáveis a serem avaliadas pelo

algoritmo, ou seja, os dados devem ser o mais comportado e menos aleatório possível para se

garantir que o sinal tratado possua alguma informação útil e com maior grau de “limpeza” de

ruídos e outras interferências, inclusive as que se desejam separar.

2

2

22

1( ; , ) exp

22

i

i

yp y

(3.13)

Um clássico exemplo de curva relacionada à aleatoriedade e à desordem na natureza é

a curva gaussiana. Esta curva, também conhecida como distribuição normal, pode ser definida

por apenas dois parâmetros já abordados neste trabalho: média e variância. A (3.13) dá o valor

da densidade de probabilidade de ocorrer um valor yi para um determinado par de média e

variância. O que torna esta curva importante para a separação de sinais é o Teorema do Limite

27

Central, ao afirmar que: a superposição de variáveis independentes (aleatórias ou não) tem a

tendência de possuir a distribuição mais gaussiana que as variáveis separadamente. Desse

modo, à medida que adicionamos mais sinais descorrelacionados a uma mistura, mais

normalizada e desordenada se torna a distribuição desta, logo maior a Gaussianidade da

mistura.

Uma das medidas referentes à Gaussianidade de uma amostra é a curtose definida pela

(3.5). O valor três, que muitas vezes não aparece na fórmula, está relacionado com o fato de

que, em sinais gaussianos, o valor do restante da expressão é igual a três unidades; portanto,

neste caso o valor da curtose seria nulo.

Figura 3.2: Distribuição, ou histograma, de uma variável aleatória gaussiana simulada no MATLAB® com

cinquenta mil amostras e cem intervalos de resolução.

Então no cálculo da curtose, só existem três resultados possíveis: curtose nula, curva

gaussiana ou mesocúrtica; curtose positiva, curva supergaussiana ou leptocúrtica; e curtose

negativa, curva subgaussiana ou platicúrtica. O menor valor possível para a curtose é menos

dois, enquanto o maior valor encontra-se ilimitado. Na distribuição supergaussiana, a maioria

dos valores está concentrada em torno da média, se comparada com o desvio padrão, com

alguns poucos valores bem afastados da média, ou seja, esta distribuição possui caudas longas

em relação ao valor do desvio padrão. Na distribuição subgaussiana, os valores de

probabilidade estão mais espalhados em relação ao desvio padrão e geralmente não possuem

caudas.

28

Figura 3.3.a: Sinais não gaussianos plotados em função do tempo. Respectivamente, de cima para baixo,

sinal senoidal , triangular e polinomial do terceiro grau.

Figura 3.3.b: Respectivos histogramas e valores das curtoses dos sinais da Figura 3.3.a. As duas primeiras

distribuições são subgaussianas e a ultima é supergaussiana. A barra preta mostra onde está o desvio de

cada sinal.

A Figura 3.3.a mostra três sinais não gaussianos plotados em função do tempo. Na

Figura 3.3.b, estão os histogramas das respectivas funções, bem como os valores das curtoses

associados a elas. Percebe-se dos histogramas e dos valores das curtoses que as duas primeiras

distribuições são subgaussianas, os valores estão bem espalhados em relação aos desvios, que

estão sendo marcados por uma barra preta; e que a última possui distribuição supergaussiana,

29

os valores estão bem concentrados em torno da média em relação ao desvio padrão e possui

caudas bem longas situadas após o desvio padrão. O desvio na figura anterior está

representado pela barra preta.

Na figura imediatamente a seguir, encontra-se uma curva resultante da superposição

das três funções anteriormente mencionadas. Verifica-se na Figura 3.4 que a soma das

funções resultou em uma forma de onda que aparenta ter comportamento mais desordenado,

seu histograma tem um formato mais parecido com uma gaussiana e o valor da curtose se

encontra mais próximo de zero que as demais distribuições.

Figura 3.4: Acima superposição dos sinais da Figura 3.3.a. Abaixo o seu histograma. A barra preta mostra

onde se encontra o desvio do sinal.

A análise de Gaussianidade de um sinal, além de poder ser analisada em diferentes

amostras ao longo do tempo, pode ainda ser analisada através do espectro de frequência, ou

seja, através da verificação da distribuição da transformada de Fourier. É notável perceber que

ruídos gaussianos no domínio do tempo mantêm sua Gaussianidade no espectro de

frequência.

A Figura 3.5 mostra a distribuição do módulo da transformada de um ruído gaussiano

simulado no MATLAB® de média nula e variância unitária, e também o valor da curtose do

espectro discreto deste.

30

Figura 3.5: Histograma e curtose da transformada discreta de Fourier da variável aleatória simulada na

Figura 3.2.

Sinais de áudio costumam ser supergaussianos, tanto no domínio do tempo como no

domínio da frequência. Isso ocorre porque a energia, no espectro de frequência, fica mais

concentrada em algumas raias de frequências principais, que são responsáveis pelas caudas do

sinal, enquanto as demais frequências possuem valores aproximadamente nulos. Entretanto,

em uma soma de um sinal supergaussiano com ele, mesmo atrasado, faz com que ele se torne

mais gaussiano no domínio do tempo e mais supergaussiano no domínio da frequência. Ou

seja, reverberações que ocorrem em um determinado ambiente reforçam algumas frequências

ressonantes advindas de interferências construtivas, enquanto diminui a potência de outras por

intermédio de interferências destrutivas.

Tabela 3.1: Curtose definida em (3.5) de sinais sonoros no formato .wav inclusos no MATLAB®, no domínio

do tempo e no domínio da frequência.

Som Curtose no tempo Curtose na frequência

Chirp 4.57 3.49

Handel 0.89 38.99

Train -0.01 238.24

O aumento da curtose no domínio da frequência devido a reverberações e ressonância

pode ser observado pela análise de sons do MATLAB® (os sons estão incluídos no pacote do

programa): chirp, handel e train. O primeiro corresponde a um canto de um pássaro, enquanto

31

o segundo se refere ao som de uma ópera. Já o terceiro é um som de um trem. Estes sinais

serão objetos de estudo na separação de sinais posteriormente, neste trabalho. A curtose dos

três sons esta representados na Tabela 3.1.

Um único pássaro pode reproduzir um som bem comportado nos domínios do tempo e

da frequência. No entanto, o som de uma ópera, apesar de bem próximo da Gaussianidade

devido a grandes misturas de timbres reverberantes no domínio temporal, pode ter uma

distribuição muito supergaussiana no espectro da frequência por causa do alto reforço sonoro

de algumas raias de frequência provocada pelas repentinas reflexões do ambiente e pelos

tenores afinados ao cantar a mesma nota.

O caso do trem é mais extremo que os anteriores. Este sinal pode ser considerado

gaussiano no domínio do tempo, sendo impossível separá-lo de outro sinal neste domínio

através da maximização da curtose, mesmo em misturas lineares. Contudo, o espectro discreto

mostra que o sinal se encontra comportado em determinadas raias de frequência. Percebe-se

da Figura 3.6 que o sinal é gaussiano no domínio do tempo e extremamente supergaussiano

no domínio da frequência.

Figura 3.6: Sinal de áudio train.wav do MATLAB®. Em a, sinal em função do tempo; em b, o histograma de

a; em c, sinal no domínio da frequência; e em d, o histograma de c.

32

Além da curtose, existem outras técnicas mais complexas de análise da Gaussianidade

de um sinal, entre elas encontram-se a entropia e a verossimilhança. A entropia, que não será

abordada profundamente neste trabalho, é um conceito muito antigo advindo da Teoria da

Informação e está relacionada ao grau de desordem de uma determinada variável. Quanto

maior a entropia de uma variável, mais desestruturada e imprevisível é ela; além do mais, uma

variável gaussiana aleatória é a que possui maior valor de entropia dentre todas as outras.

A verossimilhança diz respeito à comparação do histograma de uma amostra com uma

distribuição previamente conhecida. O objetivo é estimar os parâmetros que tornam a

distribuição idealizada o mais parecido possível com a amostra coletada.

3.4. Verossimilhança

A função de verossimilhança [8, 9] está intimamente relacionada à pdf (função

densidade de probabilidade). Se uma determinada amostra y pertencer à pdf idealizada pelo

observador, com os parâmetros θ fixos escolhidos corretamente, então ela terá a chance de

ocorrer na mesma proporção da função densidade de probabilidade. Um exemplo de pdf é a

distribuição normal como mostrada na expressão (3.13). Os parâmetros θ são a média e a

variância, θ=[μ σ2]

T, que se mantêm fixos para um conjunto de amostras y em que se deseja

conhecer a possibilidade de ocorrência.

A probabilidade de y ocorrer dado θ é formalizada por p(y; θ), entretanto essa

representação mostra que o parâmetro θ encontra-se fixado, enquanto as amostras podem

assumir qualquer valor, ou seja, é uma função apenas de y. O objetivo da função de

verossimilhança é encontrar uma curva de valores θ que maximizem a possibilidade de que

um conjunto de amostras y=[y1 y2 ... yk] observadas ocorram. Portanto, a função de

verossimilhança L é função apenas de θ. Como a pdf e a função de verossimilhança estão

diretamente relacionados, então esta pode ser representada como a pdf conjunta de y dados os

parâmetros θ.

1

( ) ( ; )k

i

i

L p

y (3.14)

33

O produto ocorrido na pdf conjunta é explicado pelo fato de que: na função de

verossimilhança, as amostras coletadas são consideradas independentes; logo a densidade de

probabilidade de ocorrência de k eventos é o produto da pdf da ocorrência de cada um

separadamente. Mesmo que elas não sejam independentes, a função de verossimilhança é

altamente precisa.

Determinada a função de verossimilhança é necessário encontrar os parâmetros θ’ que

a maximizem. Este método é conhecido como ML – do inglês maximum likelihood

(maximização da verossimilhança). Portanto o método ML encontra os melhores valores de

parâmetros que tornam a curva probabilística idealizada o mais próximo possível das

amostras coletadas.

Para a maximização de uma função basta derivá-la e igualá-la a zero, entretanto o

produtório de (3.14) dificulta este tipo de cálculo, pois o produto da derivada não é igual à

derivada do produto. Logo é possível tirar o logaritmo da expressão antes de se realizar a

derivada; então o produto se transformará em um somatório facilitando os cálculos das

derivadas parciais. O escore eficiente (efficient score) S é definido como:

( ) ln ( )L

S

. (3.15)

O resultado da ML será encontrado através da solução de equações que aparecem

fazendo-se S igual à zero. Contudo, esse conjunto de equações pode ser muito difícil de ser

resolvido; dessa forma, às vezes, é necessária a utilização de um método numérico iterativo

que resolva o problema. Mas antes disso, precisa-se definir uma matriz que represente a

derivada segunda da função de verossimilhança, a matriz de informação I.

2

2( ') ln ( ')L

I (3.16)

Pela (3.16 ), verifica-se que a matriz de informação corresponde a menos a derivada

do escore eficiente no ponto em que foi estimados os parâmetros θ. Ela possui a seguinte

propriedade: o inverso da matriz de informação é aproximadamente igual à variância do

estimador θ’. Então através da matriz de informação é possível estimar a precisão e intervalos

de confiança para os estimadores dos parâmetros.

1var( ') ( ') I (3.17)

34

A matriz de informação, além de possuir informações relevantes de estatística, ainda

pode ser utilizada em um método numérico para a estimação dos parâmetros θ. Um método

bastante utilizado para se encontrar raízes de equações complicadas é o de Newton-Raphson,

que está exposto na figura a seguir.

Figura 3.7: Método de Newton-Raphson. A cada nova iteração i, o estimador Xi se aproxima cada vez mais

perto da raiz ξ de f(x).

O objetivo do método de Newton na Figura 2.7 é estimar raiz da função f(x), enquanto

o do ML é encontrar a raiz da função escore eficiente, que é o mesmo que encontrar o θ que

maximiza a função de verossimilhança. Então, com base no método de Newton, na definição

da matriz de informação I e no escore eficiente S, o método de estimação dos parâmetros

pode ser estabelecido pela (2.18).

1*

1' ' ( ') ( ')i i

I S (3.18)

O conjugado na matriz de informação ocorre devido ao fato de o gradiente estar

relacionado com o conjugado da derivada. Se z=x+jy, portanto:

1

2j

z x y

,

*2 j

z x y

.

É importante salientar que gradiente é um vetor que aponta para a maximização de

uma função com mais de uma variável, ou seja, uma função multidimensional.

35

Figura 3.8: Exemplos de gradiente. O valor da função é indicado pela escala em cinza. Fonte:

Wikipédia.org.

Antes de se finalizar o tópico da verossimilhança, é necessário uma formalização

matricial mais rigorosa para que não haja dúvidas de como realizar um algoritmo que se valha

desse método. Supondo θ=[ θ1 θ2 ...]T, a função escore S e a matriz de informação I podem

ser definidas pelas representações matriciais abaixo, respectivamente.

1

1 2

2

( ) ln ( , ...)L

S

2 2

2

1 1 2

2 2

1 22

1 2 2

( ') ln ( ', ',...)L

I

36

CAPITULO 4

Análise de Componentes Independentes

A Análise de Componentes Independentes [2] – em inglês, Independent Analysis

Components, ICA – é um método de separação de fontes cegas que se baseia em dados

estatísticos, como a não Gaussianidade e a independência entre cada uma das fontes S. Este

método é bastante eficaz para a separação de misturas lineares e instantâneas, além de ser

mais simples e menos oneroso aos processadores se comparado a outros métodos de

separação, como, por exemplo, o TRINICON [4].

Como o método ICA é meramente estatístico, ele possui algumas restrições para que

as separações das fontes ocorram, pelo menos de forma satisfatório. As três restrições são:

as fontes são consideradas independentes entre si;

as componentes devem ser não gaussianas;

e as matrizes misturadora e separadora devem ser quadradas, logo o número de

sensores e de fontes deve ser igual: P=Q.

Estes requisitos de separação têm relação com as etapas de separação que ocorrem

neste método. A independência entre as fontes é o que se deseja buscar com a etapa do

branqueamento, que será explicado no tópico a seguir. Por sua vez, a não Gaussianidade é o

requisito estatístico que realmente separa as fontes entre si e que mostra se as amostras

processadas possuem ou não informações relevantes.

Figura 4.1: ICA resumido.

37

Depois de se realizar a separação dos sinais, é possível melhorá-los através da

estimativa das suas amplitudes, ou suas potências. Será abordado, posteriormente, um método

para melhorar as potências dos sinais separados através de ganhos. A Figura 4.1 resume o

método ICA.

4.1. Branqueamento

O conceito de brancura está intimamente relacionado à independência entre os sinais.

Como visto anteriormente, é possível ter uma noção sobre a independência entre sinais

diversos a partir de suas correlações, embora a maneira mais robusta de se definir a

independência estatística seja através de suas densidades de probabilidades conjuntas. Se um

conjunto de sinais A são independentes, então as suas densidades de probabilidades conjuntas

são iguais ao produtório das densidades marginais.

1 2 1 1 2 2( , ,...) ( ). ( )...p p pA A A A (4.1)

Supondo dois sinais a e b, a densidade marginal de a é igual a integral da

probabilidade conjunto de ambos em relação à b.

( ) ( , )p p d

a a a b b (4.2)

A independência baseada nas funções densidade de probabilidade [2] tem a vantagem

de não necessitar de dados temporais para que seja analisada. Já o valor da correlação tem

dependência significativa do tempo em que as amostras foram coletadas. Dois sinais iguais

estarão descorrelacionados no caso de haver algum atraso entre eles, sendo que o óbvio seria

que a correlação entre eles fosse máxima: igual a um, portanto dois sinais descorrelacionados

podem ser dependentes.

Apesar das desvantagens da correlação em relação à densidade de probabilidade, se

dois sinais são independentes entre si, então necessariamente estão descorrelacionados. Este

fato, unido à facilidade de criar algoritmos baseados em correlação, é suficiente para adotar

este método como meio de descorrelacionar um conjunto de sinais.

38

O conceito mais amplo que o de independência é o de brancura de um sinal. Um

conjunto de sinais A como definido em (3.6) é dito branco se eles forem descorrelacionados e

cada sinal possuir média nula e variância unitária [1]. Neste caso a matriz de covariância em

(3.10) vai ser igual à matriz identidade I e não haverá necessidade de extrair a média para a

realização do cálculo de autocovariância em (3.11).

H

K AA AA

AAR I (4.3)

Percebe-se da (4.3) que, em uma matriz branca A, a correlação e a covariância serão

iguais entre si porque a variância de cada sinal será unitária.

No caso do BSS, o objetivo do branqueamento é encontrar uma matriz V que faça com

que o sinal X seja branco. Mas antes disso é necessário que X tenha média nula e variância

unitária.

1

'

X XX X (4.4)

Então o sinal branqueado Z será igual ao produto da matriz branqueadora V com o

sinal X normalizado (com média igual a zero e variância igual a um), Z=VX’. A partir disso

pode-se calcular a autocovariância de Z e igualá-la à matriz identidade.

H HH H' '

K K ZZ XX

ZZ X XV V VR V

H XXVR V I (4.5)

Antes de se resolver a (4.5), podemos decompor a autocorrelação RXX por matrizes de

autovalores e autovetores. A escolha dos autovetores deve ser sábia para se facilitarem os

cálculos. A autocorrelação é uma matriz simétrica, portanto ela pode possuir autovetores de

base ortogonal [13]. Este tipo de base E possui norma unitária, tanto com relação às linhas,

quanto em relação às colunas, e também a propriedade de que sua inversa é igual ao seu

conjugado transposto, E-1

=EH

. Esta propriedade será utilizada para resolver a equação (4.7).

HXXR E E (4.6)

Substituindo (4.6) em (4.5), resulta em (4.7) e suas soluções em (4.8). Importante

ressaltar que Λ é a matriz de autovalores, que é diagonal por definição.

H H VE E V I (4.7)

39

1/2 HV E E ou 1/2 H V E (4.8)

Repare que a (4.8) resulta em duas soluções distintas. A diferença entra as duas está

em uma rotação na distribuição conjunta da matriz branqueada Z. A Figura 4.2 mostra a

distribuição conjunta de algumas etapas do método ICA, em que a fonte S1 corresponde a uma

função senoidal, e a fonte S2 uma função triangular. Estas funções podem ser visualizadas nas

Figuras 3.3.a. Percebe-se da Figura 4.2.b que a mistura X se parece com S “comprimido” e o

branqueamento, em Z, retorna a aparência original da fonte S com uma rotação desta. Para

separar os sinais basta multiplicar Z por uma matriz que rotacione o sinal a sua posição

original.

Figura 4.2: Exemplo de distribuição conjunta de sinais branqueados. Em a, fonte S; em b, mistura X; em c

e d, misturas branqueadas Z com dois Vs diferentes de (4.8).

Percebe-se da figura acima, que a matriz ortogonal E tem a propriedade de rotacionar

o sinal, já que uma matriz ortogonal possui uma base em que os vetores linha e colunas

formam uma base ortonormal, base de vetores unitários e perpendiculares entre si. Este tipo

de restrição faz diminuir a quantidade de graus de liberdade da solução de matriz separadora

W, já que ela apenas necessita rotacionar o sinal de volta.

40

Figura 4.3: Mudança de base ortogonal. O ponto P pode ser mudado da base [u v] para a base [x y]

através da multiplicação de P pela matriz ortogonal E.

Na Figura 4.3, E é um exemplo de uma matriz ortogonal de dimensões 2x2. Verifica-

se da figura que E possui apenas um grau de liberdade, função exclusiva de θ, ao invés de ser

quatro, que é a quantidade de elementos da matriz. Este tipo de propriedade pode ser utilizado

para facilitar a estimação da matriz separadora W, sabendo que a mistura branqueada Z

corresponde a uma rotação da fonte S.

4.2. Separação através da curtose

É possível estimar a matriz separadora W de uma mistura branqueada através da

maximização da não Gaussianidade [12]. No capítulo anterior verificou-se que a curtose é um

bom medidor de Gaussianidade e que pode ser estendido para números complexos utilizando

transformada de Fourier. A definição da curtose definida em (3.5) e (3.9) pode ser

simplificada para a matriz separada branca Y, com média nula e variância unitária, de acordo

com a (4.9).

4

1

13

K

nK

Y Y (4.9)

Suponha que queiramos separar uma fonte Y1 de uma mistura branqueada de duas

fontes distintas através de um vetor w1=[w11 w12].

1 11 1 12 2w w z z 1y w Z

41

É necessário calcular o gradiente da curtose de Y em relação a W para se acrescentar a

matriz separadora W de forma a maximizá-la.

1 1

2 2

* *

11 12

* *

21 22

2w w

w w

y y

Y

y y

Será calculado o primeiro termo do gradiente com o intuito de exemplificar o método;

e o restante dos termos, bem como a generalização para outras misturas com mais fontes,

poderá ser feito de maneira semelhante. Na forma complexa do gradiente, as partes real e

imaginária são separadas de modo a simplificar as operações algébricas diferenciais.

1 1 1

*

11 11 11

jw u v

y y y , 11 11 11w u jv

A (4.10) deriva a curtose, utilizando a regra da cadeia para facilitar os cálculos. O

somatório foi suprimido nas definições a seguir, contudo isso não é problema, já que o

somatório do gradiente é igual ao gradiente da soma.

13 1 1

1*

11 11 11

8 jw u v

y y yy , 1 1 1

y y y (4.10)

Operando primeiro a parte real do fator entre colchetes da (4.10), tem-se:

1 1 1 1 11 11

11 11 11 111 11

1

2u u u u

y y y y yy y

y y 1

1

11u

z

y

11

11u

zy

1

1 1 1 1

11 1

1

2u

z z

yy y

y (4.11)

Agora, o mesmo é feito com a parte imaginária de (4.10).

1 1 1 1 11 1

11 11 11 111 1

1

2Y

v v v v

y y y y yy

y y 1

1

11

jv

z

y 1

1

11

jv

zy

1

11 1 1 1 1

11 12

j

v

z z z

yy y

y (4.12)

Substituindo a (4.11) e a (4.12) em (4.10), tem-se:

42

13 1

1 1*

11 1

8Y

w

z

yy

y

O resultado do vetor y1 dividido pelo seu módulo é igual ao sign(y1), sinal de y1. No

caso real, essa função só pode assumir dois valores, um e menos um; entretanto na forma

complexa pode assumir vários valores, desde que o módulo seja unitário. O MATLAB® calcula

essa função, na forma como é escrita, para números complexos também.

13

1 1 1*

11

8 sign( )w

z

yy y

Expandindo todos estes cálculos para uma mistura com várias fontes, chega-se na

(4.13), em que o símbolo representa o produto termo a termo (produto de Hadamard) das

matrizes e H o conjugado transposto de matriz.

H3

sign

Y

Y Y Y (4.13)

Com o valor do gradiente, pode-se maximizar a não Gaussianidade da mistura Z,

branqueada, multiplicando-a por W, Y=WZ. Se a curtose κy de Y for positiva, deve-se

maximizar a curtose; entretanto, se κy<0, deve-se minimizá-la. Portanto, na estimação da

matriz separadora W, é necessário acrescentar o sinal da curtose de modo a afastar Y ao

máximo da Gaussianidade, curtose igual a zero.

H3

sign sign Y

W W Y Y Z (4.14)

O valor γ da (4.14) é uma constante de proporcionalidade que irá interferir na

velocidade com que o algoritmo vai convergir. Se γ for muito grande, o algoritmo irá

convergir rápido, entretanto poderá escapar do máximo geral do gradiente para um máximo

ou mínimo local, acarretando em uma estimação errada do valor de W. Se γ for muito

pequeno, a convergência será lenta, contudo robusta. Um valor razoável para γ, dada às

circunstâncias do branqueamento, seria 0,2.

Como sugerido anteriormente, deseja-se que Z seja rotacionado de volta por W, de

forma a separar o sinal; logo W deve estar bem próximo da ortogonalidade. Toda matriz

ortogonal possui norma unitária; no caso de separação aqui exposto, seus vetores linha devem

possuir módulo igual a um. Isso é possível dividindo a matriz separadora por sua norma.

43

111 12

1 1 1

221 22

2 2 2

1 2

N

i i i

N

i i i

N N NN

Ni Ni Ni

ww w

ww w

w w w

w w w

Ww w wW

W

w w w

(4.15)

A (4.15) possui restrição de apenas os módulos dos vetores linhas serem unitários,

entretanto é possível tornar W ortogonal através da (4.16). A primeira, por possuir menor

restrição, resulta em resultados mais satisfatórios; e a segunda é mais robusta a erros por não

descorrelacionar os sinais a serem separados.

1

2

W WW W (4.16)

Esse processo deve ser repetido reiteradamente até que W aponte na direção de seu

gradiente. Uma boa sugestão para este critério de convergência seria que o máximo da

subtração de W por sua aproximação anterior fosse menor que um valor ξ muito pequeno.

1max( )i i W W

Figura 4.4: Curtose da estimação do sinal separado Y em função do número de iterações.

A Figura 4.4 expõe o valor da curtose de Y em função do número de iterações. Como as

funções são subgaussianas a tendência do método foi minimizar a curtose. Este gráfico

corresponde ao exemplo aqui estudado, y1 corresponde à separação da fonte senoidal e y2 a da

fonte triangular.

44

4.3. Recuperando o escalonamento da função

O processo de branqueamento da mistura X faz com que os sinais percam as

amplitudes originais que os sensores recebem. A ambiguidade de escalonamento diz que não

é possível calcular exatamente o valor da amplitude das fontes S antes de serem misturadas;

entretanto, nada impede que exista um tratamento que faça com que as amplitudes da

separação estimada Y possuam valores próximos da proporcionalidade entre as fontes S,

Y γS. Em que γ é um fator de proporcionalidade entre a fonte original e sua estimação.

Suponha uma separação Y bem sucedida, ou seja, uma matriz branca ou bem próxima

de uma. Deseja-se melhorar o valor de sua média e da amplitude para que fique perto de ser

proporcional com relação a S. Logo é necessário definir uma estimação de S, S’; de modo que

S’=AY+B, em que A corresponde ao desvio padrão de S como definido em (3.8), uma matriz

diagonal, e B à média de S como definido em (3.7).

Agora se simulará todo o caminho de mistura e separação com o intuito de estimar A e

B. Misturando a fonte estimada com a matriz H temos:

'X HS = HAY + HB

Fazendo X uma matriz com média nula e variância unitária, verifica-se que HB

desaparece da expressão da mistura normalizada X’.

1 1

'

X X XX X HAY

XHB (4.17)

A (4.17) possibilita a obtenção de B. Basta agora estimar o valor de H. Continuando o

método com o branqueamento:

1

'

XZ =VX V HA Y

Finalmente a separação: Y=WZ.

1

XY WV HA Y 1

XWV HA I

45

Podemos agora isolar a expressão entre colchetes HA, pois as demais matrizes da

expressão acima já foram estimadas.

1 1 XHA V W (4.18)

Verifica-se, na (4.18), que a matriz A e H não podem ser separadas, não é possível

saber se a potência do sinal se deve à fonte, ao percurso ou ao ganho do sensor; analisar-se-á

um pouco mais esse produto para ver se é possível tirar alguma vantagem da estimação

conjunta HA.

Figura 4.5: Resumo de todas as etapas da separação ICA. Todas as distribuições conjuntas estão na

mesma escala para se verificar o efeito do escalonamento e da média dos sinais.

1,1 1,2 1, 1 1,1 2 1,2 1,1

2,1 2,2 2, 1 2,1 2 2,2 2,2

,1 ,2 , 1 ,1 2 ,2 ,

0 0

0 0

0 0

N N N

N N N

N N N N N N N N NN

h h h a h a h a ha

h h h a h a h a haHA

h h h a h a h a ha

No produto matricial [HA], cada elemento diagonal de A aparece multiplicado com a

respectiva coluna de H. Então cada termo da diagonal principal de A é proporcional ao vetor

coluna do produto [HA], logo uma boa estimativa para a’i seria que fosse igual à média da

coluna i da matriz [HA].

46

,

1

1'

N

i j i

j

aN

HA (4.19)

A (4.19) estima as diagonais de A’ como as respectivas médias do módulo das colunas

de [HA] (o módulo é para englobar números complexos), entretanto se pode utilizar qualquer

cálculo a critério dos interesses do projetista. Esse método está longe da perfeição, contudo

diminuirá as discrepâncias quando se deseja separar os sinais em cada raia de frequência,

como será abordado no capítulo a seguir. Então cada componente de frequência estimada terá

uma contribuição proporcional entre elas.

1

' '

H = HA A (4.20)

Estimada a matriz diagonal A’, é possível dar uma estimativa H’ de H e, a partir desta,

encontrar a aproximação da matriz de média B com o uso de (4.17).

1

' '

XB H (4.21)

Figura 4.6: Separação ICA no domínio do tempo. As fontes S são as mesmas da Figura 4.6, função

triangular e senoidal. Todas as etapas estão na mesma escala.

De todas as estimativas feitas até o momento, a de B’ da (4.21) tem chance de ser a

menos precisa, porque carrega, e ainda aumenta, os erros das estimações anteriores. Para se

“recuperar” o desvio padrão e a média ao mesmo tempo, basta multiplicar a mistura X pelo o

inverso de H’.

1

' '

S H X (4.22)

47

4.4. ICA utilizando Transformada Rápida de Fourier

O método ICA também pode ser utilizado com sinais que estão no domínio da

frequência. Uma maneira bem simples de transformar um sinal para domínio da frequência é a

FFT – Fast Fourier Transform (Transformada Rápida de Fourier) [7]; e para retornar ao

domínio do tempo é só aplicar a Transformada Inversa de Fourier, IFFT.

1

1 2 ( 1)( 1)( ) ( )exp

K

n

j n kX k x n

KK

[1,2,..., ]k K (4.23)

A (4.23) representa a FFT de x(n) e a (4.24) a IFFT de X(k) em que n e k variam de um

até K. Observe que ambas as expressões estão divididas por raiz de K. Para alguns autores, e

também no MATLAB® com os comandos fft e ifft, não há divisão na primeira expressão,

somente divisão por K na segunda; mas no final o resultado é o mesmo. Optou-se por essas

definições para que as ordens das grandezas dos sinais e de suas transformadas fossem

parecidas.

1

1 2 ( 1)( 1)( ) ( )exp

K

k

j n kx n X k

KK

[1,2,..., ]n K (4.24)

Para misturas lineares e instantâneas, basta aplicar a FFT de x, utilizar o método ICA

da mistura transformada FX e aplicar a IFFT da transformada do sinal estimado FY.

Figura 4.7: O ICA funciona com a Transformada Discreta de Fourier – FFT.

Não se faz necessário calcular a FFT para utilizar o ICA, pois é possível fazê-lo sem

esse cálculo; uma vez que alguns sinais são gaussianos no domínio do tempo e não gaussianos

no domínio da frequência, vide tabela 3.1. Portanto, algumas misturas lineares somente

podem ser separadas no domínio da frequência.

Verificou-se, no primeiro capítulo, que o atraso no domínio do tempo está relacionado

à defasagem no domínio da frequência, embora cada variação de fase seja diferente em cada

raia de frequência. Se um sinal for de banda altamente estreita, então um atraso acarretará em

48

apenas uma variação de fase em todo o sinal, ou seja, apenas uma multiplicação de uma

constante complexa no domínio da frequência. Então se pode utilizar o método ICA complexo

para separar misturas convolutivas de fontes de banda estreita.

11 1 1 12 2 2 11 1 12 21 1 1

21 1 3 22 2 4 21 3 22 42 2 2

( ) ( ) FFT( ) FFT( )

( ) ( ) FFT( ) FFT( )

h t h t h c h c

h t h t h c h c

s sx x s

s sx x s

A expressão acima representa uma mistura convolutiva de duas fontes de banda

estreita S. Os pesos H se mantêm após a transformada e os atrasos τ estão relacionados com

as constantes c, números complexos de módulo unitário que carregam informações sobre a

defasagem ocorrida na mistura.

Para separar misturas convolutivas de banda estreita, não é suficiente aplicar o método

da Figura 4.7, porque a variação de fase na frequência positiva deve ser igual a menos a

variação de fase na frequência negativa correspondente. As frequências negativas da FFT

estão da metade até a ultima raia de frequência; as últimas raias tem módulo espelhado com

relação às primeiras, somente as fases são diferentes.

Figura 4.8: Módulo da FFT de chirp no MATLAB®. As últimas raias de frequência são espelhadas em

relação às primeiras.

Não se pode ignorar as frequências negativas da FFT, portanto o método encontrado

para driblar esse impasse é que as últimas raias da mistura FY sejam conjugadas antes de se

aplicar o ICA. Uma soma nas raias conjugadas será equivalente a uma subtração das raias sem

conjugar. No final, basta conjugar as últimas raias de FY novamente antes de se aplicar a

IFFT.

49

A Figura 4.9 exibe graficamente o significado do conjugado da parte negativa, CN. O

módulo da frequência w negativa é espelhado em relação à positiva. Repare que após aplicar

CN, apenas a fase da frequência negativa, em cinza, em FXc é alterada.

Figura 4.9: Aplicação do Conjugado da parte negativa da transformada FX de X. A linha contínua

representa o módulo da transformada e a linha tracejada representa a fase.

Figura 4.10: ICA complexo para misturas convolutivas de banda estreita ou para misturas lineares

instantânea de banda larga ou de banda estreita.

Esta última maneira de se aplicar o método ICA pode tanto separar misturas

convolutivas de sinais de banda estreita, quanto misturas lineares e instantâneas de sinais de

banda larga ou estreita. A figura a seguir mostra o método na separação de uma mistura com

atraso de duas fontes de banda estreita, S1 e S2. S1 é um batimento, sinal composto de duas

senóides com frequências bem parecidas. S2 é uma função senoidal.

Figura 4.11: ICA em mistura convolutiva de um batimento com uma função senoidal.

50

CAPITULO 5

ICA para Misturas Convolutivas

Verificou-se anteriormente que o método ICA é capaz de separar misturas

convolutivas de sinais de banda estreita, portanto este método é capaz de corrigir a defasagem

de um sinal advindo de atrasos provocados pelo ambiente. É possível ampliar a aplicação

desse método para misturas convolutivas de fontes de banda larga, entretanto é necessário

trabalhar com as fases das componentes de frequências individualmente.

Não se pode aplicar a FFT em um sinal e separar cada componente de frequência para

que o método ICA seja utilizado; porque haveria apenas uma amostra para cada componente

de frequência, e a ocorrência da análise estatística estaria impossibilitada. Felizmente existe

uma transformada que é função do tempo e da frequência: STFT – Short Time Fourier

Transform (Transformada de Fourier por Janelas) [3] como percebido em [1].

2( ) , ( )win( ) j fx t t f x t e d

F (5.1)

A (5.1) representa a STFT contínua de um sinal x(t) em que win(t-τ) é uma janela

temporal, com salto de tempo igual a τ, que tem a função de limitar o instante de tempo em

que a integração ocorre; portanto esta janela possui tamanho finito menor que o sinal x a ser

integrado. A partir da STFT, é possível fazer uma análise estatística temporal para as

componentes de frequência separadamente; já que, para cada raia de frequência, existem

várias amostras temporais.

Figura 5.1: ICA para misturas convolutivas resumido.

O método para separação de misturas convolutivas, resumido pela Figura 5.1, segue a

seguinte ordem: aplicar a STFT à mistura X, realizar o método ICA para cada componente de

51

frequência, resolver o problema da permutação com a matriz P e aplicar a transformada

inversa de STFT (ISTFT).

A ambiguidade de permutação neste método é de extrema importância, as

componentes de frequências separadas provavelmente estarão permutadas no sinal separado

#Y.O sinal # indica que este se encontra no domínio STFT. O sinal só estará definitivamente

separado quando cada raia de frequência estivar em seu respectivo sinal. O problema da

permutação, resolvida em [1], será esclarecido no final deste capítulo, considerando que a

ambiguidade de escalonamento já foi comentada no capítulo anterior e está embutida no bloco

ICA exposto na Figura 5.1.

5.1. Transformada de Fourier por Janelas

A Transformada de Fourier por Janelas (STFT), definida em 5.1, pode utilizar

qualquer tipo de janela win; entretanto, optou-se por utilizar apenas a janela retangular devido

a sua simplicidade de implementação.

A janela retangular é igual a um no trecho do sinal em que se deseja considerar e igual

a zero nos demais instantes de tempo. Multiplicar um número igual a um é o mesmo que

repetir este número, e multiplicar por zero é o mesmo que suprimi-lo; então ao invés de se

realizar a operação de multiplicação, é mais fácil armazenar os valores de um trecho de

tamanho L de x em um vetor, antes de se realizar qualquer transformada.

( ) (1 ( 1)) ( ( 1)) ( ( 1))w m J m J m L J m X x x x (5.2)

Na expressão (5.2), está o algoritmo da aplicação de uma janela retangular em um

sinal x(n), em que n representa o instante de tempo em que o sinal foi coletado. Nesta

expressão, L é a dimensão da janela e J é o tamanho do salto temporal a cada nova aplicação

m da janela retangular. O m é denominado por alguns autores como índice de frame, é ele que

regula o instante de tempo em que ocorre a janela. Para que não haja perda de informação, J

deve ser menor ou igual a L.

Para se encontrar a STFT, basta aplicar a FFT de Xw(m); entretanto se sabe que

defasagens ou produtos no domínio da frequência geram convoluções circulares no domínio

52

do tempo, ou seja, um atraso no domínio do tempo fará com que o final do sinal apareça em

seu início. Para driblar esta propriedade das transformadas discretas de Fourier, aplica-se um

zero-padding em Xw(m), que é o mesmo que acrescentar zeros no início e no fim do sinal.

Para que a solução seja aceitável, o número de zeros deve ser no mínimo igual ao atraso

máximo do vetor de misturas H: maior do que o tamanho do filtro de mistura.

( ) zeros( ) ( ) zeros( )z

w wm F m FX X (5.3)

A (5.3) mostra como é realizado o zero-padding. A função zeros(F) é um vetor linha

preenchido com F quantidades de zeros, portanto a (5.3) cria um vetor linha de tamanho

L+2F. Agora é só aplicar a FFT como em (4.22) nos vetores de cada frame para obter a

transformada de Fourier por janelas.

STFT ( ) # ( ) FFT ( )z

wn m m x X X (5.4)

A STFT das misturas X completa é um tensor de três dimensões. A primeira dimensão

está relacionada à raia de frequência k, a segunda ao índice de frame m e a terceira ao número

i do sensor. Considerando que FX seja a FFT do trecho do sinal após ter se aplicado a janela e

o zero-padding, a (5.5) dá uma ideia de como está definido o tensor #X. Repare que cada

componente de frequência está separada em colunas e o índice de frame está separado nas

linhas.

(1,1) (1,2) (1, 2 )

# # ( , ) (2,1) (2,2) (2, 2 )

i i i

i i i i

FX FX FX L F

X X m k FX FX FX L F

(5.5)

53 Figura 5.2: STFT de um frame m com uma janela retangular e com a aplicação de um zero-padding.

Depois de se aplicar a STFT, devem-se criar matrizes de duas dimensões através da

separação de cada raia de frequência do tensor #X. Estas matrizes serão processadas

individualmente pelo método ICA para misturas lineares, será resolvido o problema da

ambiguidade de permutação e finalmente será aplicada a transformada inversa (ISTFT) com a

finalidade de montar o sinal separado com a permutação resolvida #Yp.

É importante acrescentar que não é necessário aplicar o método ICA em cada raia de

frequência; pois as componentes de frequências maiores, que são repetições das frequências

negativas, têm módulo espelhado em relação às componentes de frequências menores.

Portanto, para se separar completamente a mistura, basta multiplicar as frequências mais altas

pelo conjugado da matriz separadora das frequências correspondentes. Em um frame de

tamanho L+2F como em (5.3), uma raia de frequência baixa k está associada à raia de

frequência mais alta L+2F+2-k. A primeira raia, frequência igual a zero, não possui nenhuma

outra associada a ela; portanto esta regra só é válida para k>2.

5.2. Transformada Inversa de Fourier por Janelas

Como visto anteriormente, a ISTFT é o ultimo processo na separação de fontes cegas

de misturas convolutivas utilizando o ICA. O objetivo é reagrupar o sinal separado #Y, mas

antes é necessário aplicar a inversa da transformada discreta de Fourier IFFT como em (4.23).

( ) IFFT ( )W m mY #Y (5.6)

Repare que a (5.6) é a operação contrária da (5.4) sem levar em consideração o zero-

padding. Para se unir o sinal separado, somam-se todos Yw de todos os frames depois de

recuperar a posição original em que os saltos mJ ocorreram para a aplicação da janela

retangular. Considerando que L é igual a um múltiplo inteiro de J, a matriz separada Y(n)

pode ser dada pela (5.7).

( ) SHIFT ( ),W

m

Jn m mJ

L y Y (5.7)

54

A função SHIFT acima é igual à Yw(m) deslocada à direita mJ vezes, portanto esta

função recupera a posição original de y(n) antes dos saltos ocorrerem. Esta expressão só é

válida para os casos em que L é igual a um múltiplo inteiro de J: L=iJ, em que i pertence ao

conjunto dos números naturais. Isso ocorre porque o mesmo trecho será repetido i vezes e o

somatório aumentará a amplitude do sinal y(n) na mesma proporção da razão de L por J. A

Figura 5.3 expõe o efeito da relação de J e L em uma janela retangular: na Figura 5.3.a, L é

múltiplo inteiro de J e o resultado do somatório é uma função constante com algumas

deformações em degrau em seus extremos; na Figura 5.3.b, L não é múltiplo de J e o

resultado da soma é uma função que causa deformação no sinal.

Figura 5.3: Em a, saltos J de janelas de tamanho L=3J e o somatório das janelas; em b, saltos J de janelas

de tamanho L=1,5*J e o somatório das janelas. Em negrito a representação de uma das janelas para

melhorar a visualização.

A restrição L=iJ não necessariamente precisa ser respeitada. Esta restrição, bem como

o uso de janela retangular, pode ser ignorada; basta multiplicar Yw(m) por uma função que

corrija as deformidades visualizadas na Figura 5.3.b, antes de realizar a operação (5.7).

É importante acrescentar que o tamanho da matriz separada y(n) em (5.7) é diferente

da mistura x(n), já que o tamanho de y(n) é ampliado devido ao zero-padding ocorrido na

55

STFT. O tamanho de cada vetor linha de y(n) é igual a K+2F, em que K é o tamanho dos

vetores linhas de x(n) e F a quantidade de zeros aplicados no início e no final de Xw(m) em

(5.3).

5.3. Solução para ambiguidade de permutação

A ambiguidade de permutação é de grande relevância nas técnicas de separação de

fontes cegas utilizando STFT; pois se as raias de frequências estiverem permutadas na matriz

separada Y, ter-se-á a impressão de que o método de separação em cada raia falhou e poder-

se-á perceber que Y pode possuir informações de um pouco de cada mistura.

Apesar de um sinal poder ser separado na frequência utilizando a STFT, as raias de

frequências carregam informações temporais parecidas com o sinal original, portanto possuem

informações parecidas entre si. O tratamento do problema da permutação pode ser realizado

através da comparação de cada raia de frequência do sinal separado através de covariância ou

correlação.

As raias de frequência de um envelope de um determinado sinal possuem formatos

bem parecidos, principalmente os harmônicos e as raias adjacentes, componentes de

frequências próximas. A Figura 5.4 mostra o espectrograma tridimensional de um sinal

sonoro do MATLAB®: Chirp, que é um canto de um pássaro. Verifica-se que as raias de

frequências possuem comportamentos temporais parecidos entre si.

Figura 5.4: Espectrograma tridimensional do sinal sonoro Chirp.wav do MATLAB®.

56

Espectrograma [3] é uma representação espacial que mostra como a potência de cada

raia de frequência varia no tempo e é uma boa representação de envelopes nas raias de uma

Transformada de Fourier por Janelas, STFT. A Figura 5.4 representa um espectrograma

tridimensional em que a potência é representada pelo eixo vertical, já a Figura 5.5 representa

um espectrograma bidimensional em que a potência é representada pela cor.

Figura 5.5: Espectrograma bidimensional em escala de cinza de Chirp.wav do MATLAB®. As cores mais

escuras representam maior amplitude ou potência.

Antes de se comparar cada raia de frequência através da correlação com o intuito de

resolver o problema da permutação de #Y, é necessário se aplicar um envelope em cada

frequência do sinal separado. Um envelope é uma representação que envolve o sinal original

expondo sua forma de maneira mais suave e sem levar em consideração a fase do sinal,

simplesmente sua amplitude. O envelope de um sinal é facilmente comparável a uma

demodulação em amplitude de um sinal AM. As variações bruscas são “filtradas” deixando-se

passar apenas o formato do sinal. A Figura 5.6 mostra o resultado de um envelope aplicado ao

sinal Chirp.

1

1( , ) ( , )

T

t

i m i t mT

k kEy #Y (5.8)

A (5.8) sugere uma maneira de se criar um envelope Eyk de um sinal separado

transformado #Y, na raia de frequência k, de uma fonte i, em função do índice de frame m. A

expressão nada mais é que a média do módulo de T elementos consecutivos ao longo da

variação do índice de frame, isto elimina variações bruscas ocorridas ao longo do tempo

57

semelhante ao ocorrido em uma demodulação AM. A quantidade T de elementos não deve ser

muito grande a ponto de esconder o formato original de #Y.

Figura 5.6: Envelope de Chirp.wav do MATLAB®. Acima está o sinal original no domínio do tempo e

abaixo seu envelope.

É preciso criar um conjunto de envelopes de estimativa de cada fonte com o intuito de

comparar com cada envelope de todas as raias de frequência. Este envelope pode ser definido

como o somatório dos demais envelopes normalizado.

( ') ( )k

i i kE'y Ey (5.9)

'( ')

( ')( ')

i

ii

E

E'yE'y

(5.10)

A (5.9) expressa o somatório de todos os envelopes das raias k e a (5.10) é este

somatório normalizado, dividido pelo seu desvio padrão. Então E’y(i’) é o envelope global

que terá a função de se comparar com todas as raias de frequência na tentativa de unir as que

possuem maior relação. A normalização do envelope global é necessária porque se decidiu,

neste trabalho, que ao invés da utilização da correlação como meio de resolver o problema da

permutação, fosse utilizada a covariância.

A correlação, como foi visto no segundo capítulo, é um meio mais imparcial que a

covariância por desconsiderar o efeito da amplitude no seu cálculo. O efeito da amplitude é

muito importante no agrupamento das raias de frequências, pois algumas raias de frequências

separadas mal definidas, pouco considerável ou com certo grau de Gaussianidade, têm a

tendência de imitar as das outras fontes que estão mais bem definidas com uma densidade de

58

potência menor. Esta “imitação” provavelmente terá correlação similar à raia com a qual se

parece, mesmo possuindo amplitude inferior; portanto, é mais seguro escolher a raia separada

de maior amplitude. Isto justifica a utilização da covariância em relação à correlação.

( ', ) cov ( '), ( )k i i i i kCV E'y Ey (5.11)

A (5.11) representa um matriz de comparação CVk da raia k. Esta matriz calcula a

covariância como definido em (3.3) do envelope Eyk dos sinais i da raia k com o envelope

global E’y do sinal separado i’. Os índices i e i’ referem-se a qual fonte o algoritmo está

estimando, i=[1,2,...,N], em que N, no método ICA, é a quantidade de fontes e de sensores.

Então CVk é uma matriz quadrada de dimensão N por N em que cada coluna i está sendo

comparada ao envelope de #Yi com todos os N envelopes globais. Agora basta criar uma

matriz de permutação Pk em que se maximizem as covariâncias na diagonal principal de CVk.

argmaxk kP CV (5.12)

Na (5.12), argmax é uma função que maximiza a diagonal principal de CVk após

permutar o conjunto de envelopes Eyk. As representações matriciais abaixo mostram a

maneira como a função argmax age em uma matriz quadrada CV. Primeiro escolhe-se o

elemento de maior valor da CV com um # e elimina-se a linha e a coluna do elemento de

maior valor com x. Depois este processo deve ser repetido até que todos os elementos sejam

marcados.

0.31 0.74 0.69 0.74 0.69 0.69 #

0.92 0.12 0.15 # # #

0.41 0.83 0.29 0.83 0.29 # #

x x x x x

x x x x x x

x x x x x

kCV

A matriz de permutação P está associado a CV trocando # por 1 e x por 0.

0 0 1

1 0 0

0 1 0

kP

Depois de encontrar a matriz Pk, permuta-se o envelope com a matriz de permutação,

k k kEy P Ey . Após isso o novo valor para a matriz de comparação CVk será:

0.69 0.31 0.74

0.15 0.92 0.12

0.29 0.41 0.83

kCV

59

Repare, na representação matricial anterior, que os elementos marcados com # agora

se encontram na diagonal principal e a nova matriz de permutação é igual à matriz identidade.

Talvez este procedimento de resolução do problema de permutação não seja solucionado na

primeira vez em cada raia de frequência; portanto, é necessário se realizar este processo

reiteradamente, inclusive recalculando o envelope global a cada iteração, até que a matriz de

permutação fique invariante.

Figura 5.7: Espectrogramas bidimensionais em escala logarítmica de uma separação ICA para misturas

convolutivas. As ordenadas indicam o tempo, as abscissas a frequência, e as amplitudes são representadas

pela cor. Quanto mais escuro é o ponto em um determinado instante de uma raia de frequência, maior a

amplitude.

60

A Figura 5.7 mostra os espectrogramas do método de separação ICA para misturas

convolutivas. As fontes um e dois são respectivamente: Train e Chirp; sinais sonoros do

MATLAB® em .wav. Estes sinais já foram comentados no capítulo dois, e informações sobre

suas curtoses estão expostas na tabela 3.1. Pela figura, verifica-se que a separação através do

método ICA realmente ocorreu em #Y; no entanto, algumas raias de frequências apareceram

trocadas após o procedimento. Depois de se resolver o problema da permutação, as raias se

reorganizaram para seus respectivos sinais, mesmo que globalmente tenha ocorrido uma

permutação entre as duas fontes. A Figura 5.8 mostra o resultado do método de separação no

domínio do tempo.

Percebe-se das figuras que a separação Yp1 ainda carrega informações relativas ao

sinal train, mesmo que em ordens inferiores ao ocorrido na mistura. Isso ocorre devido à

imitação de raia de frequências do outro sinal mesmo após a separação. Quando uma

determinada raia se mostra mal definida ou gaussiana a tendência é que ambos os sinais

imitem a fonte mais comportada e menos aleatória. Isto pode ser percebido pela audição.

Figura 5.8: Sinais da Figura 5.7 no domínio do tempo

61

CAPITULO 6

Conclusão

O método ICA para misturas convolutivas possui vantagens devido ao baixo dispêndio

computacional para ser aplicado, e teoricamente não importa a quantidade de reverberações

ocorridas para a separação do sinal, pois o método não tenta estimar a quantidade de reflexões

ocorridas nas paredes; no entanto, deve-se tomar o cuidado para que o zero-padding não seja

menor que o atraso máximo ocorrido na ultima reflexão relevante. Sabe-se que o sinal sonoro

reflete infinitamente até que seja impossível escuta-lo, portanto um filtro sonoro convolutivo

relativo à geometria de um ambiente fechado é considerado infinito; entretanto para o ouvido

humano este se torna finito, porque a partir de certo instante não é mais possível se escutar os

resquícios do som refletido.

O tamanho da janela a ser aplicado também é de grande relevância no método; já que

quanto menor a janela, melhor a resolução temporal, e quanto maior, melhor a resolução na

frequência. O efeito da limitação da janela também interfere na qualidade da separação do

seguinte modo: a diferença de atraso percebida pelos dois sensores vai criar transformadas

diferentes após ter-se aplicado um janela finita, pois o início e o fim dos sinais a serem

comparados na separação serão diferentes por causa do atraso ocorrido. À medida que o

tamanho da janela aumenta, diminui-se a diferenças entre os sinais comparados, no entanto

diminui a resolução temporal e o sinal perde sua qualidade estatística.

Relativo ao tamanho do salto J realisado; quanto menor o salto, maior qualidade se

tem na separação e maior o dispêndio computacional.

A ambiguidade de escalonamento não chega a ser um problema considerável no

método aqui estudado. Não é necessário saber a potência global dos sinais estimados e sim a

contribuição proporcional de cada raia de frequência, neste sentido o método está quase

perfeito, desde que a separação seja bem sucedida. Já a ambiguidade de permutação não está

muito robusta e é necessário combinar o método da correlação com outros métodos com a

finalidade de tornar o problema desta ambiguidade mais confiável. Um dos problemas desta

ambiguidade é que as raias mal definidas “imitam” à dos outros sinais e acabam

62

“contaminando” o sinal pertencente. Uma saída para esse impasse seria calcular as

correlações entre os envelopes no próprio algoritmo de permutação e eliminar algumas raias

que possuíssem alto grau de correlação entre si em uma mesma raia de frequência.

63

REFERÊNCIAS BIBLIOGRÁFICAS

[1] Laporte, L. V. M., 2010, Algoritmos de Separação Cega de Sinais de Áudio no Domínio

da Frequência em Ambientes Reverberantes: Estudo e Comparações, dissertação de

mestrado, UFRJ, Rio de Janeiro, RJ, Brasil.

[2] Leite, L., 2005, Análise de Componentes Independentes Aplicada à Identificação de

Regiões Lesionadas em Mamogramas, dissertação de mestrado, UFRJ, Rio de Janeiro,

RJ, Brasil.

[3] Pinto, R. M. F., 2009, Novas Abordagens ao Estudo de Sinais Biomédicos: Análise em

Tempo-Frequência e Transformada de Hilbert-Huang, Universidade de Lisboa,

Lisboa, Portugal.

[4] Figueiredo, F. A. P., 2011, Estudo da Melhoria da Taxa de Aprendizagem de um

Algoritmo para Separação Cega de Fontes Utilizando Técnicas Vindas da Teoria de

Redes Neurais, dissertação de mestrado, INATEL, Santa Rita do Sapucaí, MG, Brasil.

[5] Portugal, M. S., 1995, Notas Introdutórias Sobre o Princípio de Máxima

Verossimilhança: Estimação e Teste de Hipótese, DECON/UFRGS, Porto Alegre, RS,

Brasil.

[6] Dias, João Lopes, 2006, Notas de Análise Complexa, Universidade Técnica de Lisboa,

Lisboa, Portugal.

[7] Mello, Carlos Alexandre, Transformada Discreta de Fourier, slide de aula, Centro de

Informática UFPE.

Disponível em: < http://www.cin.ufpe.br/~cabm/pds/PDS_Aula06%20DFT.pdf >.

Acesso em maio de 2012.

[8] Takahashi, 2002, Ricardo H. C., Transformada Discreta de Fourier: Motivação e

Aplicação, notas de aula, UFMG, Belo Horizonte, MG, Brasil.

[9] Portal Action, 1997-2011, O Método da Máxima Verossimilhança, São Carlos, SP, Brasil.

Disponível em: < http://www.portalaction.com.br/1310-o-m%C3%A9todo-de-

m%C3%A1xima-verossimilhan%C3%A7 >. Acesso em maio de 2012.

[10] Bronkhorst, A. W., The Cocktail Party Phenomenon: A Review on Speech Inteligibility

in Multiple-Talker Conditions, Acta Acustica united with Acustica, v. 86, pp. 117–128,

2000.

[11] Makino, S., Araki, S., Sawada, H., Frequency-Domain Blind Source Separation. In: S.

Makino, T. Lee, H. S. (Ed.), Blind Speech Separation, Springer, cap. 2, pp. 47–78,

2007.

[12] HYVÄRINEN, A., OJA, E., A Fast Fixed-Point Algorithm for Independent Component

Analysis, Neural Computation, v. 9, n. 7, pp. 1483–1492, 1997.

64

[13] Matrizes Ortogonais, Algebra Linear 1, aula 19, PUC-RIO, Rio de Janeiro, 2005.

Disponível em: < http://www.mat.puc-rio.br/cursos/MAT1200/roteiros/a19051.pdf>.

65

ANEXO CÓDIGOS EM MATLAB®

O Anexo MATLAB® foi acrescido a esse trabalho com o intuito de representar os

algoritmos de separação de sinais na forma de códigos computacionais. O MATLAB® é um

programa de altíssimo nível para criar algoritmos baseados em física, matemática ou

engenharia. Ele possui inúmeras funções embutidas em seu pacote com a finalidade de

facilitar o trabalho do programador.

O sinal % serve para comentar o algoritmo, tudo que estiver depois dele em uma

determinada linha será desconsiderado no processamento.

A.1. Misturas lineares

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Gerando fontes e misturas para a separação %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

q=1:5040; % instante de tempo em que ocorreu a amostra

a=2*cos(2*pi*q/252+1); % função senoidal

b1=0.002:0.002:1.68;

b2=-b1+1.68*ones(1,840);

b=1.2*[b1 b2 b1 b2 b1 b2]; % função triangular

s=[a;b]; % Matriz de fonte

h=[1 0.8;1 1.2]; % Matriz de mistura linear

x=h*s; % Mistura

% Limpando algumas variáveis

clear ('a','b','h','b1','b2');

% A limpeza de algumas variáveis tem a finalidade de descartar o % que é

desnecessário e evitar que algumas variáveis

% inacessíveis sejam utilizadas

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

66

%%%%% Realizando o Branqueamento %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

u=(mean(x'))'; % média da mistura

des=sqrt((var(x'))'); % desvio padrão da mistura

d=(x-u*ones(1,max(size(x)))); % fazendo a média de x = 0

d=diag(1./des)*d; % mistura normalizada

Rdd=(d*d')/max(size(x)); % correlação da mistura

% Encontrando os autovetores ortogonais ee e os autovalor dd:

[ee,dd]=eig(Rdd);

v=ee*(dd^(-1/2))*(ee'); % matriz de branqueamento

z=v*d; % sinal branqueado

clear ee; clear dd; % limpeza

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Separação pelo método da curtose %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

w1=zeros(min(size(z))); % matriz de comparação (nula)

% chute inicial (matriz identidade) para matriz separadora w:

w=eye(min(size(z)));

um=ones(min(size(z)),1);

for i=1:100 % máximo de iterações

y=w*z; % calculando sinais separados

if sum(sum(abs(w1-w)))<0.001

% se a matriz separadora atual for parecida com a

% anterior, então o algoritmo convergiu.

break % sai do laço iterative for

end

w1=w; % armazenado matriz separadora

% para análise posterior

k=(kurtosis(y'))'-3*um; % curtose

kk(i,:)=k(:); % guardando valor da curtose

ss=sign(k)*um'; % matrix sinal

dw=0.2*((y.^3)*z')/max(size(y)); % variação de w

w=w+ss.*dw; % maximizando a curtose

div=um*sqrt(sum((w.^2)')); % módulo da matriz separadora

67

w=w./div'; % w com módulo unitário

end % fim do laço

clear ('div','w1','um','k','ss'); % limpeza

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Recuperando Amplitude e Deslocamento %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

a=diag(des)*inv(v)*inv(w); % Calculando [HA]

a=diag(mean(a)); % Estimando matriz de amplitude

ys=a*y; % Escalonamento “resolvido”

ih=a*w*v*inv(diag(des)); % Estimativa para inversa de H

b=ih*u; % Encontrando deslocamento

ys=ys+b*ones(1,length(y)); % Deslocamento “Resolvido”

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Gráficos de Saída %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

plot(1:14,kk(:,1),'k^',1:14,kk(:,2),'ks')

axis([0 15 -1.6 -0.8]) % curose versus número de iteração

%%%% distribuição conjunta

subplot(2,3,1); plot(s(1,:),s(2,:),'k.'); axis([-3 3 -3 3]);

subplot(2,3,2); plot(x(1,:),x(2,:),'k.'); axis([-3 3 -3 3]);

subplot(2,3,3); plot(d(1,:),d(2,:),'k.'); axis([-3 3 -3 3]);

subplot(2,3,4); plot(z(1,:),z(2,:),'k.'); axis([-3 3 -3 3]);

subplot(2,3,5); plot(y(1,:),y(2,:),'k.'); axis([-3 3 -3 3]);

subplot(2,3,6); plot(ys(1,:),ys(2,:),'k.'); axis([-3 3 -3 3]);

%%%% Em função do tempo

subplot(4,1,1); plot(q,s,'k'); axis([1 5000 -4 4]);

subplot(4,1,2); plot(q,x,'k'); axis([1 5000 -4 4]);

subplot(4,1,3); plot(q,z,'k'); axis([1 5000 -4 4]);

subplot(4,1,4); plot(q,y,'k'); axis([1 5000 -4 4]);

A.2. Misturas convolutivas de banda estreita

68

% OBS: O que for repetido do tópico anterior não será comentado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Gerando fontes e misturas para a separação %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

q=0:(pi/72):(4*pi-pi/72); % Momento da amostragem

a=(cos(16*q)-cos(16.5*q))/2; % Batimento

b=cos(5*q); % Sinal Senoidal

s=[a;b]; % Matriz de Fontes

fs=fft(s')'/sqrt(length(s)); % Transformada da fonte

aa=circshift(a',10)'; % Atraso do batimento

bb=circshift(b',-3)'; % Adiantamento da senóide

x=[a+0.8*b;aa+1.2*bb]; % Mistura convolutiva

clear('a','aa','b','bb'); % Limpeza

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Aplicando a transformada Rápida de Fourier %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

N=length(x); % Tamanho das misturas

fx=fft(x')'/sqrt(N); % FFT- transformada de Fourier

% Conjugado Negativo - CN

fx=[fx(:,1:(N/2+1)) conj(fx(:,(N/2+2):N))]; % CN

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Realizando o Branqueamento %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

u=mean(fx')';

fd=fx-u*ones(1,length(fx));

des=sqrt(diag(var(fd')));

fd=inv(des)*fd;

Rdd=(fd*fd')/length(fd);

[ee,dd]=eig(Rdd);

v=ee*(dd^(-1/2))*(ee');

fz=v*fd; % Sinal branquedo na frequência

% conjugado negativo - CN

fz=[fz(:,1:(N/2+1)) conj(fz(:,(N/2+2):N))]; % CN

69

z=real(ifft(fz')')*sqrt(length(fz)); % sinal branqueado no tempo

clear ('ee','dd','Rdd');

fz=[fz(:,1:(N/2+1)) conj(fz(:,(N/2+2):N))]; % CN

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Separação pelo método da curtose %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

um=ones(min(size(fz)),1);

w=eye(min(size(fz)));

w1=zeros(min(size(fz)));

for i=1:10000

fy=w*fz;

k=sum(abs(fy').^4)'/length(fy)-3*um;

if sum(sum(abs(w1-w)))<0.0001

break

end

w1=w;

ss=sign(k)*um';

dw=(0.2*((abs(fy).^3).*sign((fy)))*(fz)')/length(fy);

w=w+ss.*dw;

w=((w*w')^(-1/2))*w; % Tornando a matriz separadora

% ortogonal.

end

clear ('div','dw','w1','t','ss','um','k');

% Conjugado Negatino - CN

fy=[fy(:,1:(N/2+1)) conj(fy(:,(N/2+2):N))]; % CN

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Recuperando Amplitude e Deslocamento %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

a=des*inv(v)*inv(w);

a=diag(mean(abs(a)));

fy=a*fy;

ih=a*w*v*inv(des);

b=ih*u;

fy=fy+b*ones(1,length(fy));

70

y=real(ifft(fy')')*sqrt(length(fz));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Gráficos de Saída %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

subplot(4,2,1); plot(q,s(1,:),'k'); axis([0 12.5 -2 2]);

subplot(4,2,2); plot(q,s(2,:),'k'); axis([0 12.5 -2 2]);

subplot(4,2,3); plot(q,x(1,:),'k'); axis([0 12.5 -2 2]);

subplot(4,2,4); plot(q,x(2,:),'k'); axis([0 12.5 -2 2]);

subplot(4,2,5); plot(q,z(1,:),'k'); axis([0 12.5 -2 2]);

subplot(4,2,6); plot(q,z(2,:),'k'); axis([0 12.5 -2 2]);

subplot(4,2,7); plot(q,y(1,:),'k'); axis([0 12.5 -2 2]);

subplot(4,2,8); plot(q,y(2,:),'k'); axis([0 12.5 -2 2]);

A.3 Método utilizando STFT

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Gerando fontes e misturas para a separação %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

load train; a=y'; % carregando train.wav

load chirp; b=y'; % carregando chiro.wav

a=[zeros(1,135) a zeros(1,135)]; % adapitando

aa=circshift(a',2)'; % gerando atraso em train

b=[zeros(1,10) b zeros(1,11)]; % adapitando

bb=circshift(b',-3)'; % adiantando chirp

s=[a;b]; % fontes

fs=fft(s')'/sqrt(length(s)); % FFT da fonte

x=[a+0.8*b;aa+1.2*bb]; % gerando mistura convolutiva

clear('y','Fs','a','b','aa','bb'); % limpeza

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Transformada por Janelas Retangulares %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

71

j=5; L=140; f=10; % j=salto; L=janela; f=zero-padding

lj=(length(s)-L)/j+1; % quantidade de iteraçoes

for k=1:2 % quantidade de misturas

for m=1:lj % número de frames

ii=j*(m-1); % posição do frame, salto

% aplicando janela e zero-padding

xx(:,m)=[zeros(1,f) x(k,((ii+1):(ii+L))) zeros(1,f)];

end % fim do laço para cada mistura

fx(k,:,:)=fft(xx)'/sqrt(L); % Transformada por janelas

clear xx; % Economizando memória RAM

end % fim do laço de cada mistura

clear('ii','k','m') % limpeza

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% aplicando ICA em cada raia de frequência %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

itera=0; % zerando iteração global

w=[1 0;0 1]; % chute inicial matriz separadora

L=L+2*f; % janela mais zero-padding

for m=1:(1+L/2) % laço para cada raia

fd=fx(:,:,m); % separando as raias de frequência

% run roda o arquivo que está entre ‘aspas simples’, deve estar

% endereçado caso seja de outra pasta.

run(‘ICA.m’); % roda o método ICA complexo em cada raia

% ICA.m será mostrado a seguir embora não haja muitas

% modificações em ralação aos anteriores.

itera=itera+it; % it= iteração em cada raia

yp=ih*fx(:,:,m); % saída sem a permutação resolvida

% aplicando o envelope a yp

for i=1:(length(yp)/10-19)

ii=10*i+1;

e(:,i)=mean(abs(yp(:,ii:(ii+19)))')';

end

E(:,:,m)=e; % envelope de todas as raias

72

we(:,:,m)=ih; % estimação da inversa de H

end % fim do laço de cada raia

clear('ii','e','yp'); % limpeza

%%%%%%%%%%%%%%%%%

%%%%% ICA.m %%%%%

%%%%%%%%%%%%%%%%%

% OBS: o ICA.m deve estar salvo na mesma pasta do código atual ou

% substituindo o comando run(‘ICA.m’) se alguém apenas copiar e colar

% o código sem pensar, não vai funcionar. Não repeti os comentários,

% qualquer dúvida olhar no A.1.

u=mean(fd')';

fd=fd-u*ones(1,length(fd));

des=sqrt(diag(var(fd')));

fd=inv(des)*fd;

Rdd=(fd*fd')/length(fd);

[ee,dd]=eig(Rdd);

v=ee*(dd^(-1/2))*(ee');

fz=v*fd;

% separação atravez da curtose

um=ones(min(size(fz)),1);

div=um*sqrt(sum((abs(w).^2)'));

w=((w*w')^(-1/2))*w;

w1=zeros(min(size(fz)));

for it=1:1000 % quantidade de iterações

fy=w*fz;

k=sum(abs(fy').^4)'/length(fy)-3*um;

if sum(sum(abs(w1-w)))<0.0001

break

end

w1=w;

ss=sign(k)*um';

dw=(0.3*((abs(fy).^3).*sign(fy))*fz')/length(fy);

w=w+ss.*dw;

73

w=((w*w')^(-1/2))*w;

end

mm=[sign(w(1,1)) sign(w(2,2))];

w=diag(conj(mm))*w;

% recuperando a amplitude

a=des*inv(v)*inv(w);

a=diag(mean(abs(a)));

fy=a*fy;

ih=a*w*v*inv(des);

clear ('um','u','des','fd','ss','k','dd','a','ee','dd','Rdd');

clear ('div', 'dw', 'w1','fy','fz','o','mm');

% limpeza e fim do código ICA.m

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Resolvendo o problema da permutação %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

I=eye(2); % matriz identidade de tamanho 2

ind=[2 3]; %índice da correlação

for m=1:(1+L/2)

P(:,:,m)=I; % Iniciando a matriz de permutação Pk=I

end

for i=1:100 % fazendo a permutação reitaradamente

uu=zeros(2,length(E));

for jj=1:(1+L/2)

uu=uu+P(:,:,jj)*E(:,:,jj); % envelope global

end

% normalizando o envelope global

uu=diag(var(uu').^(-1/2))*uu;

for m=2:(1+L/2) % iteração em todas as raias

74

for i=1:2; % número de fontes

rr=[P(i,:,m)*E(:,:,(m)); uu];

rr=cov(rr'); % calculando correlação

RR(:,i)=rr(ind,1); % matriz de relação

end % fim do laço

% aplicando o método argmax(RR)

for jj=1:2

[vec,l]=max(RR);

[vec,c]=max(vec);

l=l(c);

lin(jj)=l; % escolhendo linha

col(jj)=c; % escolhendo coluna

RR(l,:)=-2; % eliminando linhas

RR(:,c)=-2; % eliminando colunas

end

p=zeros(2,2);

for jj=1:2

p(lin(jj),col(jj))=1; % gerando matriz de permutação

end

P(:,:,m)=p*P(:,:,m); % corrigindo a matriz de permutação

end

end

clear('I','l','RR','c','col','i','ind','jj','lin')

clear('p','rr','uu','vec'); % limpeza

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% montando o sinal de saída ISTFT %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fx(:,:,1)=P(:,:,1)*we(:,:,1)*fx(:,:,1); % gerando primeira raia

for m=2:(1+L/2) % iteração para todas raias

fx(:,:,m)=P(:,:,m)*we(:,:,m)*fx(:,:,m); % separando raias “comuns”

% separando as frequencias negativas

fx(:,:,L+2-m)=P(:,:,m)*conj(we(:,:,m))*fx(:,:,L+2-m);

75

end

lj=(length(s)-L)/j+1;

% montando o sinal ISTFT

for k=1:2

yy=zeros(1,length(x)+2*f); % zerando saída

for m=1:lj

a=reshape((fx(k,m,:)),[1 L]); % redução de dimensão

a=ifft(a')*sqrt(L); % transformada inversa IFFT

ii=j*(m-1); % fazendo SHIFT

yy((ii+1):(ii+L))=yy((ii+1):(ii+L))+real(a'); %montando

end

y(k,:)=yy; % juntando cada sinal

end

y=y*j/(L-2*f); % sinal separado ISTFT

clear('a','ih','ii','it','k','m','v','w',’yy’);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Gráficos de saída %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% comparação dos espectros

subplot(2,2,1); plot(abs(fft(s(1,:))));

subplot(2,2,2); plot(abs(fft(s(2,:))));

subplot(2,2,3); plot(abs(fft(y(1,:))));

subplot(2,2,4); plot(abs(fft(y(2,:))));

%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% ouvindo sons %%%%%

%%%%%%%%%%%%%%%%%%%%%%%%

% sons de entrada

sound(s(1,:));

sound(s(2,:));

% sons de saída

sound(y(1,:));

sound(y(1,:));