Função do app · 09

Função de Transferência

Compara um canal de referência (a saída elétrica da mesa) com um canal de medição (o microfone na sala) e mostra ganho, fase e coerência entre os dois — ao vivo, sobre o próprio programa musical, sem precisar de sweep. Introduzida na v0.11.0.

Como usar no app

Onde encontrar e requisito

Aba T.F. na barra de abas. Ela só fica disponível com uma interface de 2 ou mais entradas conectada (USB ou Lightning) — com apenas o microfone embutido do aparelho, a tela mostra: "Interface multicanal necessária — A função de transferência compara dois canais ao vivo — a saída da mesa (referência) e um microfone de medição. Conecte uma interface USB/Lightning com 2 ou mais entradas e escolha os canais em Ajustes › I/O."

Como medir

O próprio app resume o procedimento numa seção "Como medir" na tela; os quatro passos:

  1. Na aba Gerador, escolha Ruído Rosa ou Varredura e toque em Reproduzir — esse sinal é a referência da medição.
  2. Nesta aba, em Ajustes › I/O, defina o canal de Referência como o retorno elétrico desse sinal (saída da mesa/interface) e o canal de Microfone como o microfone captando o alto-falante.
  3. Deixe o sinal tocando continuamente por pelo menos 3 segundos — o localizador de atraso analisa em lote esse tanto de áudio dos dois canais para travar a leitura de tempo/distância, e reroda cerca de uma vez por segundo. O botão ↺ no topo zera a média corrente e força uma nova leitura.
  4. Ajuste o ganho de cada canal (mesa/interface) pelos indicadores "Mic"/"Ref" no topo da tela: verde é o nível ideal, amarelo está perto do clip e vermelho já clipou.

Controles da tela

Leitura de atraso e níveis de sinal

No topo da tela: "+X,X ms · Y,YY m" quando a confiança da leitura passa de 0,3; caso contrário, "Delay: —". Ao lado, dois indicadores — Mic e Ref — mostram o nível de sinal de cada canal em tempo real: verde (nível seguro), amarelo (perto do clipping) ou vermelho (já clipou, aceso por 1,5 s depois do evento para não passar despercebido). Ajuste o ganho na mesa/interface até os dois ficarem verdes — um clipe em qualquer canal distorce a estimativa de H e derruba a coerência.

Medições salvas

O botão "Salvar medição atual" (desabilitado sem bandas na tela) guarda a curva de medição (o canal do microfone, não a curva H) exibida naquele instante, com um nome escolhido num alerta. Cada medição salva aparece numa lista abaixo do gráfico: toque no círculo ao lado do nome para mostrá-la ou escondê-la como uma sobreposição tracejada no gráfico — útil para comparar "antes/depois" de um ajuste no sistema. O menu "…" de cada linha oferece Renomear e Excluir.

Exemplo de uso: alinhar o delay de um subwoofer com o array principal

  1. Envie o mesmo sinal (ruído rosa da aba Gerador) para o subwoofer e para o array principal.
  2. Em Ajustes › I/O, defina o canal de Referência como o envio elétrico do processador e o canal de Microfone como um microfone de medição posicionado no ponto médio entre sub e array (ou no ponto de escuta que importa).
  3. Deixe o ruído tocando continuamente por alguns segundos e observe a leitura de atraso no topo da tela.
  4. Ajuste o delay do subwoofer no processador do sistema até esse número chegar perto de 0 ms.
  5. Confira visualmente: a faixa de cruzamento entre sub e array deve mostrar coerência alta e menos cancelamento na curva de H.

Exemplo de uso: comparar "antes e depois" de um ajuste no sistema

  1. Com o sistema tocando o programa normal (sem precisar de sweep), deixe a leitura estabilizar por alguns segundos.
  2. Toque em "Salvar medição atual" e dê um nome como "Antes do ajuste".
  3. Faça o ajuste desejado no processador ou na EQ do sistema.
  4. Toque em "Salvar medição atual" de novo, com um nome como "Depois do ajuste".
  5. Ative as duas medições salvas ao mesmo tempo (círculo ao lado de cada nome) para comparar as duas curvas sobrepostas no mesmo gráfico.
A partir daqui Como H1, coerência e o delay finder são calculados por dentro — fórmulas e o método GCC-PHAT. Não é preciso entender nada disso para usar o app.

H1, o estimador de resposta em frequência

A relação entre o sinal de referência (X) e o de medição (Y) é descrita pela função de transferência H(f), estimada pelo método H11 — o padrão em análise de dois canais, mais robusto a ruído no canal de medição do que dividir os espectros diretamente:

Autoespectros e espectro cruzado
$$ G_{xx} = |X|^2 \qquad G_{yy} = |Y|^2 \qquad G_{xy} = \overline{X}\cdot Y $$
H1
$$ H(f) = \frac{G_{xy}(f)}{G_{xx}(f)} \qquad\qquad |H(f)|_{\text{dB}} = 10\log_{10}\!\frac{|G_{xy}|^2}{G_{xx}^{\,2}} $$
Fase
$$ \angle H(f) = \operatorname{atan2}\big(\operatorname{Im}(G_{xy}),\ \operatorname{Re}(G_{xy})\big) $$

Como Gxx é sempre real e positivo, dividir por ele não altera a fase de Gxy — por isso a fase é calculada direto sobre o espectro cruzado. Testes de referência: ganho H = 8/4 = 2 → +6,02 dB; fase de Gxy = i → 90°.

Coerência

A coerência ao quadrado mede, por frequência, que fração da energia de saída é explicada linearmente pela entrada — 1,0 significa "toda a energia em Y nessa frequência vem de X"; valores baixos apontam ruído, reflexões fortes ou distorção não capturada pelo modelo linear:

Coerência ao quadrado
$$ \gamma^2(f) = \frac{|G_{xy}(f)|^2}{G_{xx}(f)\cdot G_{yy}(f)} \qquad \in [0,1] $$

Clampada em [0,1] para absorver estouro numérico que poderia empurrar a razão levemente acima de 1 por arredondamento (a desigualdade de Cauchy-Schwarz garante γ² ≤ 1 matematicamente, mas não em ponto flutuante).

Por que precisa de médias — e não funciona num quadro só

Um único par de espectros não-nulos sempre produz coerência trivialmente igual a 1 (qualquer X, Y de um único quadro "explicam" um ao outro perfeitamente por definição). A coerência só é informativa depois de médias sucessivas de Gxx, Gyy e Gxy — nunca de H ou coerência já calculados por quadro. O TransferFunctionProcessor suaviza os três exponencialmente, quadro a quadro, com o mesmo modelo de constante de tempo RC usado no detector de nível do SPL, mas sempre com a constante de ataque (a suavização é simétrica — Gxx/Gyy/Gxy não têm noção de "subindo" vs. "descendo"):

Suavização exponencial dos espectros
$$ \alpha = 1 - e^{-\Delta t/\tau} \qquad\qquad G \leftarrow G + \alpha\,(G_{\text{instantâneo}} - G) $$

Modo padrão: slow (τ = 1,0 s). Sinais idênticos convergem para ganho unitário (0 dB), fase 0° e coerência acima de 0,999; ruído independente nos dois canais converge, depois de várias centenas de quadros de média, para coerência abaixo de 0,4.

Redução de bin para banda Quando Gxx/Gyy/Gxy precisam virar bandas de oitava para exibição, a soma ponderada é feita antes de calcular ganho/fase/coerência — nunca por média de magnitude, fase e coerência já calculadas por bin. É o que mantém a fase significativa numa banda que atravessa ±180°.

Delay finder — GCC-PHAT

Junto com a função de transferência, o Spectra estima o atraso entre os dois canais — o uso típico é alinhar no tempo um subwoofer com o array principal. O método é GCC-PHAT (Generalized Cross-Correlation with PHAse Transform)2, escolhido deliberadamente para sinais de programa ao vivo/reverberantes: ele descarta a amplitude por bin (distorcida pela resposta da sala e por reflexões) e mantém só a informação de tempo, que está na fase.

Branqueamento de fase (PHAT)
$$ \text{PHAT}[k] = \frac{G_{xy}[k]}{|G_{xy}[k]|} $$

Isso normaliza a magnitude de cada bin para 1, preservando só a fase. A FFT inversa real desse espectro branqueado dá a correlação cruzada branqueada no domínio do tempo; o índice de valor absoluto máximo dessa correlação circular é o lag:

De índice de pico a atraso e distância
$$ \text{lag} = \begin{cases} \text{índice} & \text{índice} \le N/2 \\ \text{índice} - N & \text{índice} > N/2 \end{cases} \qquad\qquad \Delta t = \frac{\text{lag}}{f_s} $$ $$ \text{distância} = \Delta t \times 343\ \text{m/s} $$

(343 m/s: velocidade do som ao nível do mar, ~20 °C.) A confiança da leitura vem da proeminência do pico sobre o resto da correlação:

Confiança
$$ \text{confiança} = \operatorname{clamp}_{[0,1]}\!\left(\frac{\text{pico} - \overline{|\text{correlação}|}}{\text{pico}}\right) $$

Convenção de sinal: atraso positivo significa que a medição chega depois da referência — o caso comum de um microfone mais distante da fonte do que o envio elétrico da mesa.

Captura em lote, não quadro a quadro

O espectro cruzado que alimenta o branqueamento acima não vem de um único quadro de análise. A partir da v0.13.0 o localizador lê de volta uma captura de pelo menos 3 segundos dos dois canais, fatia essa captura em janelas de 8192 amostras com 50% de sobreposição, promedia o espectro cruzado dessas janelas (método de Welch) e só então procura o pico — uma vez, sobre a média.

Espectro cruzado promediado sobre os segmentos da captura
$$ \overline{G_{xy}}[k] = \frac{1}{M}\sum_{m=1}^{M} \overline{X_m}[k]\cdot Y_m[k] $$

A razão é material de programa: um quadro de 8192 amostras cobre ~170 ms, e sobre música percussiva ou intermitente a leitura pulava de um valor para outro a cada quadro. Três segundos travam o número. O app roda esse lote cerca de uma vez por segundo — mais que isso seria trabalho jogado fora, já que a leitura não pode ter mudado nesse intervalo.

Por que não um tom puro para testar A autocorrelação de um tom puro é periódica — ambígua para localizar um único lag. Só ruído de banda larga expõe corretamente o comportamento do GCC-PHAT; os testes do Spectra confirmam localização de deslocamentos conhecidos com erro menor que 1 amostra (≈1/f_s segundos).