Ouvi dizer que a transformação Hilbert pode ser usada para calcular o envelope de um sinal. Como é que isso funciona? E como esse "envelope Hilbert" é diferente do envelope obtido simplesmente retificando um sinal?
Estou interessado especificamente em encontrar uma maneira de calcular um envelope para uso em compressão de faixa dinâmica (ou seja, "diminuir o volume" das partes altas de um sinal de áudio automaticamente).
Respostas:
A transformação Hilbert é usada para calcular o sinal "analítico". Veja, por exemplo, http://en.wikipedia.org/wiki/Analytic_signal . Se o seu sinal for uma onda senoidal ou uma onda senoidal modulada, a magnitude do sinal analítico parecerá realmente com o envelope. No entanto, o cálculo da transformação de Hilbert não é trivial. Tecnicamente, ele requer um filtro FIR não causal de comprimento considerável, exigindo uma quantidade razoável de MIPS, memória e latência.
Para um sinal de banda larga, isso realmente depende de como você define "envelope" para sua aplicação específica. Para sua aplicação de compressão de faixa dinâmica, você deseja uma métrica bem correlacionada com a percepção de volume ao longo do tempo. A Hilbert Transform não é a ferramenta certa para isso.
Uma opção melhor seria aplicar um filtro de ponderação A ( http://en.wikipedia.org/wiki/A-weighting ) e, em seguida, fazer um pico com perda ou um detector RMS com perda. Isso irá se correlacionar razoavelmente bem com o volume percebido ao longo do tempo e é relativamente barato.
fonte
Você pode usar a conversão Hilbert para calcular um envelope da seguinte maneira. (Vou escrevê-lo como código MATLAB):
Não tenho tempo para escrever as contas agora (tentarei mais tarde), mas, muito simplesmente, diga que seu sinal é uma onda senoidal. A transformação de Hilbert de um seno é uma -cosina. (Em outras palavras, a transformação de hilbert sempre fornecerá seu sinal alterado na fase de -90 graus - sua quadratura em outras palavras).
Se você adicionar seu sinal (a onda senoidal) às
j
vezes o sinal hilberted (onda -cosina), você obtém:O que também passa a ser e ^ (j * (wt - pi / 2)).
Assim, quando você obtém o valor absoluto disso, obtém 1, que é o seu envelope. (Para este caso).
fonte
Estou ciente de pelo menos duas maneiras distintas de recuperar o envelope de amplitude de um sinal.
A equação chave é:
A maneira mais simples de saber é obter Q seria decompor S (t) em um monte de componentes sinusoidais usando a FFT, girar cada componente um quarto de volta no sentido anti-horário (lembre-se de que cada componente será um número complexo, portanto um componente específico x + iy -> -y + ix) e depois recombine.
Essa abordagem funciona muito bem, embora exija um pouco de ajuste (ainda não entendo a matemática o suficiente para explicar isso de uma maneira melhor)
Existem alguns termos-chave aqui, a saber, 'transformação de Hilbert' e 'sinal analítico'
Evito usar esses termos porque tenho certeza de que testemunhei uma ambiguidade considerável em seu uso.
Um documento descreve o sinal analítico (complexo) de um sinal real original f (t) como:
nesse caso, o envelope de amplitude é simplesmente | Analítico (f (t)) |, o que nos leva de volta à equação pitagórica original
NB: Recentemente, deparei com uma técnica mais avançada que envolve a mudança de frequência e um filtro digital passa-baixo. A teoria é que podemos construir o sinal analítico por diferentes meios; decompomos f (t) em componentes de frequência sinusoidal positivos e negativos e, em seguida, simplesmente removemos os componentes negativos e duplicamos os componentes positivos. e é possível fazer essa 'remoção de componente de frequência negativa' por uma combinação de mudança de frequência e filtragem passa-baixo. isso pode ser feito extremamente rápido usando filtros digitais. Ainda não explorei essa abordagem, portanto é o máximo que posso dizer no momento.
fonte
Então, basicamente, você está procurando um Controle Automático de Ganho (AGC). Não tenho certeza se você deve fazê-lo processando digitalmente, mas existem muito bons circuitos integrados por aí que podem executar essa tarefa muito bem; geralmente o AGC é integrado a muitos outros recursos, mas alguns circutis podem ser criados com transistores JFET e alguns diodos.
Mas uma maneira muito fácil de entender isso com o processamento digital seria projetar um estimador de variância adaptável, como tirar uma janela de tempo de amostras suficientes para representar 5 ou 10 ms e aplicar um fator de esquecimento alfa ^ n (alfa <1), para cada nova amostra que chega é levada em consideração mais do que as amostras anteriores. então, com base nessa estimativa de variação, você projeta de acordo com seu desejo, uma função que mapeia a variação para um ganho que você aplica a cada amostra de áudio. isso pode ser um limite de decisão difícil, enquanto que se a variação ultrapassar algum limite, você diminuirá o ganho por algum fator.
Ou pode ser um limite de decisão mais flexível, onde você cria uma transformação não linear de variação para ganho e aplica a transformação a todas as amostras com base na última estimativa de variação.
Esses são métodos mais heurísticos, mas pelo menos evitam toda a matemática pesada.
fonte