Qual é a diferença entre uma transformada de Fourier e uma transformada de cosseno?


75

No reconhecimento de fala, o front end geralmente processa o sinal para permitir a extração de recursos do fluxo de áudio. Uma transformada de Fourier discreta (DFT) é aplicada duas vezes nesse processo. A primeira vez é depois de janelas; depois disso, o bin bin é aplicado e, em seguida, outra transformação de Fourier.

No entanto, notei que é comum nos reconhecedores de fala (o front end padrão no CMU Sphinx , por exemplo) usar uma transformação discreta de cosseno (DCT) em vez de um DFT para a segunda operação. Qual é a diferença entre essas duas operações? Por que você faria DFT na primeira vez e depois um DCT na segunda vez?


Muitos explicaram a diferença entre os dois processos. Alguém sabe por que o dft e o dct são usados ​​em momentos diferentes no reconhecimento de fala? A saída do primeiro dft é considerada simétrica? Ou a compressão do dct é adequada para empacotar mais informações nos 13 primeiros pontos (o processamento de fala geralmente usa apenas esses)?
Nate Glenn

Sua pergunta está relacionada ao cepstro de frequência Mel , que foi feito em outra pergunta ?
Rwong 17/08

Minha pergunta foi em duas partes: a diferença entre DCT e DFT, e por que o DCT é frequentemente usado para processamento de sinal após a aplicação de DFT e Mel Binning, em vez de outro DFT.
Nate Glenn

por que no processamento de imagens, não usamos transformada senoidal discreta em vez de transformada senoidal discreta?

Oi rimondo, esta é uma boa pergunta, mas você a postou como resposta. Você deve criar uma nova pergunta para fazer isso.
Nate Glenn

Respostas:


48

A Transformada Discreta de Fourier (DFT) e a Discreta Cosine Transform (DCT) executam funções semelhantes: ambas decompõem um vetor de tempo discreto de comprimento finito em uma soma de funções básicas de escala e deslocamento. A diferença entre os dois é o tipo de função básica usada por cada transformação; o DFT usa um conjunto de funções exponenciais complexas harmonicamente relacionadas, enquanto o DCT usa apenas funções cosseno (com valor real).

O DFT é amplamente utilizado para aplicações gerais de análise espectral que chegam a vários campos. Também é usado como um bloco de construção para técnicas que tiram vantagem das propriedades da representação no domínio da frequência dos sinais, como os algoritmos de convolução rápida de sobreposição para salvar e sobreposição para adicionar.

O DCT é freqüentemente usado em aplicativos de compactação de dados com perda, como o formato de imagem JPEG. A propriedade do DCT que o torna bastante adequado para compressão é seu alto grau de "compactação espectral"; em um nível qualitativo, a representação DCT de um sinal tende a ter mais de sua energia concentrada em um pequeno número de coeficientes quando comparado a outras transformações como a DFT. Isso é desejável para um algoritmo de compactação; se você puder representar aproximadamente o sinal original (domínio no tempo ou no espaço) usando um conjunto relativamente pequeno de coeficientes DCT, poderá reduzir seu requisito de armazenamento de dados armazenando apenas as saídas DCT que contêm quantidades significativas de energia.


4
@JasonR "em um nível qualitativo, a representação DCT de um sinal tende a ter mais de sua energia concentrada em um pequeno número de coeficientes quando comparado a outras transformações como a DFT". Hmmmm ... não tenho certeza se concordo totalmente com você - ainda que o DFT já inclua um cosseno no qual um sinal será projetado - como um DFT pode não mostrar tanto a força dessa projeção? e um DCT pode? Obrigado.
Spacey

3
Esse é um recurso muito conhecido do DCT, que explica seu uso em muitos algoritmos de compactação. Acredito que tenha a ver com as condições de contorno assumidas pelo DCT nas bordas do sinal, que são diferentes das DFTs.
Jason R

23

Descobri que alguns dos detalhes no wiki do DCT (também compartilhados pela Pearsonartphoto) apontam que o DCT é adequado para aplicativos de compactação. O final da seção Visão geral informal é útil (negrito é meu).

Em particular, é sabido que quaisquer descontinuidades em uma função reduzem a taxa de convergência da série Fourier ... quanto mais suave a função, menos termos em sua DFT ou DCT são necessários para representá-la com precisão e mais ela pode ser compactado ... No entanto, a periodicidade implícita da DFT significa que as descontinuidades geralmente ocorrem nos limites ... Por outro lado, um DCT em que ambos os limites estão sempre produz uma extensão contínua nos limites. É por isso que os DCTs ... geralmente têm melhor desempenho para compactação de sinal do que DFTs e DSTs. Na prática, um DCT tipo II é geralmente preferido para tais aplicações, em parte por razões de conveniência computacional.

Além disso, você pode achar que essa resposta também é útil (em math.stackexchange.com). Afirma:

As transformações cosseno nada mais são do que atalhos para calcular a transformada de Fourier de uma sequência com simetria especial (por exemplo, se a sequência representa amostras de uma função par).


19

A razão pela qual você vê a transformação de Fourier aplicada duas vezes no processo de extração de recursos é que eles são baseados em um conceito chamado cepstrum. Cepstrum é uma brincadeira com a palavra espectro - essencialmente, a idéia é transformar um sinal no domínio da frequência pela transformada de Fourier e depois executar outra transformação como se o espectro de frequências fosse um sinal.

Enquanto o espectro de frequências descreve a amplitude e a fase de cada banda de frequência, o cepstrum caracteriza variações entre as bandas de frequência. As características derivadas do cepstrum são encontradas para melhor descrever a fala do que as características obtidas diretamente do espectro de frequências.

Existem algumas definições ligeiramente diferentes. Originalmente, a transformação de ceptro foi definida como transformada de Fourier -> logaritmo complexo -> transformada de Fourier [1]. Outra definição é transformada de Fourier -> logaritmo complexo -> transformada inversa de Fourier [2]. A motivação para esta última definição está em sua capacidade de separar sinais convoluídos (a fala humana é frequentemente modelada como a convolução de uma excitação e um trato vocal).

Uma escolha popular que tem bom desempenho em sistemas de reconhecimento de fala é aplicar um banco de filtros não linear no domínio da frequência (o mel binning a que você está se referindo) [3]. O algoritmo específico é definido como transformada de Fourier -> quadrado de magnitude -> banco de filtros de mel -> logaritmo real -> transformação discreta de cosseno.

Aqui, o DCT pode ser selecionado como a segunda transformação, porque, para entradas com valor real, a parte real do DFT é um tipo de DCT. A razão pela qual o DCT é preferido é que a saída é aproximadamente correlacionada. Recursos descorrelacionados podem ser modelados eficientemente como uma distribuição Gaussiana com uma matriz de covariância diagonal.

[1] Bogert, B., Healy, M. e Tukey, J. (1963). A Alanese de Quefrência de Séries Temporais para Ecos: Cepstrum, Pseudo-Autocovariância, Cross-Cepstrum e Saphe Cracking. Em Anais do Simpósio de Análise de Séries Temporais, p. 209-243.

[2] Oppenheim, A. e Schafer, R. (1968). Análise Homomórfica da Fala. Nas transações IEEE sobre áudio e eletroacústica 16, p. 221-226.

[3] Davis, S. e Mermelstein, P. (1980). Comparação de representações paramétricas para reconhecimento de palavras monossilábicas em frases continuamente pronunciadas. Nas transações do IEEE sobre acústica, processamento de fala e sinal 28, p. 357-366.


Ré. PCA na extração de recursos: um PCA verdadeiro seria inútil aqui porque seria dependente de dados! Se você calcular o PCA dos coeficientes de log de frequência de mel de um conjunto de dados e depois de outro, encontrará uma base diferente - o que significaria que se o PCA fosse usado no processo de extração de recursos, os recursos extraídos em um sinal não "significam o mesmo" que os recursos extraídos no outro sinal. Agora faça este experimento: calcule o PCA em um conjunto de log Mel coef. extraído de 10 horas do áudio mais diversificado. A base que você encontrará é estranhamente semelhante à base do DCT.
Pichenettes

3
Em outras palavras: para ser útil no aplicativo de reconhecimento, a transformação de correlação no final do processo de extração do recurso deve ser uma espécie de compromisso adequado ao "áudio" em geral, e não aos dados específicos. Acontece que a base DCT está muito próxima do que você obtém ao executar um PCA em um grande conjunto de áudio!
Pichenettes

Vi recentemente o PCA usado no final do processo de extração de recursos em um sistema experimental de fala. Esse sistema calculou a projeção do PCA a partir dos dados de treinamento e usou a mesma base posteriormente.
Seppo Enarvi

8

A diferença entre uma transformação discreta de Fourier e uma transformação discreta de cosseno é que o DCT usa apenas números reais, enquanto uma transformação de Fourier pode usar números complexos. O uso mais comum de um DCT é a compactação. É equivalente a uma FFT com o dobro do comprimento.


1
No entanto, é possível conceber o DCT / DST de uma sequência complexa, em que se toma separadamente o DCT / DST das partes reais e imaginárias.

Então, podemos dizer que, se eu calcular o DFT, recebo o DCT gratuitamente, tudo o que preciso fazer é remover as partes imaginárias do vetor. Por favor me corrija se eu estiver errado.
Marek

1
É um pouco mais complexo que isso, mas é possível converter entre uma FFT e DCT com bastante facilidade.
PearsonArtPhoto
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.