Nos últimos tempos, tem pingado de vez em quando um tweet elogiando o som do reprodutor de código Morse. Originalmente escrito como um exemplo de uso da então incipiente API Web Audio, tenho dado mais atenção a ele na esteira do interesse futuro de tirar licença de radioamador.
Noves fora o fato do código Javascript ser um exemplo didático de como gerar áudio em tempo real e gerar um WAV para download, não achei que alguém fosse reparar na qualidade subjetiva do áudio. Mas é fato que me preocupei com ela quando escrevi o código, porque meu ouvido não é penico.
Os dois áudios abaixo foram gerados pela página. Um tem o "molho secreto", o outro não. Você consegue distinguir qual é qual?
Não tem muito segredo no molho secreto, é simplesmente um fade-in e um fade-out a cada bipe. E são de apenas dois milissegundos! Isto é suficiente para evitar os cliques que você deve ter ouvido no áudio sem filtragem.
Nas figuras abaixo, temos os formatos de onda com e sem fade-in. Seguindo a tradição do Morse, o tom básico é senoidal.
Como eu disse, não tem mistério nenhum na forma de suavizar o áudio Morse. No meu código, era uma simples rampa linear.
O grande risco do fade-in/fade-out a cada bipe é "borrar" o Morse, tornando-o ininteligível, principalmente em velocidades mais altas. É preciso que cada ponto e traço ainda tenha um "ataque" ou "impacto" suficiente para que fique distinto. Para mitigar este risco, uso rampas mais inclinadas para velocidades maiores, mas não tenho certeza que os resultados acima de 50WPM são suficientemente bons.
Aqui é que pode entrar uma função de rampa de melhor qualidade. A escolha de uma rampa "melhor" não é um processo puramente objetivo; a "musicalidade" do Morse, com equilíbrio entre som agradável e sinal claro, é o critério final. Em vez da rampa, outra possibilidade é usar um filtro.
De qualquer forma, uma análise espectral mostra que a humilde rampa linear já faz um bom trabalho. A figura a seguir mostra o espectro de um bipe senoidal curto, com as pontas cortadas bruscamente. O áudio é de 800Hz, portanto podemos dizer que apenas o espectro em torno de 800Hz é desejado, todo o resto é ruído:
O espectro a seguir é o mesmo bipe, suavizado com um curto fade-in e fade-out nas extremidades:
O espectro suavizado tem um pico consideravelmente mais alto em 800Hz, com menos ruído espalhado pelo resto, principalmente nas altas freqüências onde está o ruído mais irritante. O sinal brusco espalha ruído até 7000Hz enquanto o suavizado só vai até 3500Hz.
Depois de terminar a primeira versão deste texto, fiquei com uma coceira de tentar rampas diferentes. Não lembro onde a menção pela primeira vez, mas uma rampa sugerida para Morse é a "senóide ao quadrado". Auditivamente é difícil dizer se é melhor. Certamente não ficou pior; acho que em velocidades maiores ficou melhor, mas realmente não fiz um teste duplo-cego para conferir.
O analisador de espectro gostou da mudança. Primeiro, o espectro da rampa linear, com 35WPM e compressão Fansworth de 60WPM (significa que os bipes são a 60WPM mas os espaços entre letras são 35WPM).
Agora, o espectro com rampa senóide-ao-quadrado, mesmo comprimento (2ms):
Como se vê, o segundo espectro é bem menos "espalhado".
Depois desse teste, procurei pesquisar um pouco mais para dar mais embasamento a esta mudança. Encontrei um excelente artigo e a biblioteca CWStudio, que gera áudio Morse muito bonito e inclusive com efeitos típicos de rádio (harmônicas, ruído branco, oscilação de sinal, etc.).
Curiosamente o CWStudio usa uma rampa senóide simples, com bons resultados. Talvez eu devesse colocar diversas opções rampa na minha página, quiçá aceitar uma função Javascript, para cada um avaliar por si de qual gosta mais?
Agora, um pouco de cultura inútil, a quem possa interessar :)
Darwin disse que "a natureza não dá saltos". No contexto deste artigo eu prefiro dizer que a natureza não gosta de dar saltos. Esta é a essência da melhoria que o fade-in/fade-out causa no áudio Morse.
Na natureza, o único tipo de onda que pode propagar-se é a onda senoidal. Não interessa se é onda sonora, onda de rádio, etc. Por este motivo, quando vemos uma análise de espectro como as figuras anteriores, as freqüências referem-se sempre a ondas senoidais. Nós podemos conceber uma onda quadrada ou triangular, mas tais ondas não podem ser emitidas por um alto-falante, nem captadas por nossos ouvidos.
Em particular, a onda quadrada é a mais "anti-natural" de todas, já que todas as transições são instantâneas. Nada no mundo físico aproxima-se da onda quadrada. Se você tentar mover um objeto da posição A para a posição B instantaneamente, vai destruí-lo. O mesmo vai acontecer se você tentar imprimir ao objeto uma velocidade, ou uma aceleração, de forma instantânea.
Mas por que logo a onda senoidal é a "escolhida" pela natureza?! É algo que tento explicar, sem muito sucesso, neste artigo sobre o número 'e'. Super-simplificando o assunto neste parágrafo, a onda senoidal é "suave" em todos os aspectos. Não tem nenhum canto vivo, nenhuma transição brusca, além de ser periódica (requisito básico para uma onda).
Mas o fato é que uma onda quadrada soa diferente de uma triangular, que soa diferente da senoidal. Então, de alguma forma, as duas primeiras conseguem propagar-se. A solução empregada pela natureza é usar harmônicas, ondas senoidais de muitas freqüências diferentes, cuja soma equivale à onda não-natural. Uma onda quadrada não pode viajar como está, porém ela é esmiuçada em muitas senóides pelo alto-falante, e estas sim podem viajar, separadamente. Nosso ouvido capta as diversas senóides, o cérebro analisa o conjunto e determina o timbre: "onda quadrada", aliás muito popular em música de balada.
Todo esse processo de desmontagem e remontagem pode ser feito matematicamente com a Transformada de Fourier. É a ferramenta utilizada pelas análises de espectro, e que fornece a contrapartida teórica para um fenômeno natural corriqueiro.
A função senoidal é contínua, não tem início nem fim. Então, um "bipe" já não pode ser mais uma onda senoidal pura, e já precisa de harmônicas para ser transmitido. Mas de que harmônicas ele precisa? Depende de quão bruscamente o bipe começa (ou termina). Se o início for 100% brusco, o perfil aproxima-se da onda quadrada que espalha harmônicas para todo lado. Já um início gradual espalha menos as harmônicas, o grosso delas fica em volta da freqüência fundamental.
O contrário também é verdadeiro: um sinal Morse extremamente filtrado ou suavizado tende a ficar "borrado", porque a remoção excessiva das harmônicas vai deixando apenas o sinal senoidal fundamental que é contínuo, e não transmite informação.
O artigo que mencionei antes avalia diversos filtros de áudio, justamente com o objetivo de achar um que não "borre" o sinal, gerando apenas uma rampa de fade-in e fade-out sem espalhá-lo nem gerar oscilações. O artigo conclui que o filtro Gaussiano é o melhor, e o formato da rampa fica parecido com a rampa "senóide-ao-quadrado".
É possível determinar matematicamente o que acontece a um sinal Morse suavizado por uma rampa, sem recorrer a empirismos como eu fiz. O sinal que realmente transmite a informação é de baixa freqüência, é a onda quadrada produzida pelo telegrafista. Se há suavização, então a onda deve usar o formato da rampa, tornando-se uma onda triangular ou trapezoidal para rampa linear, ou uma senóide se a suavização é senoidal.
Este sinal é modulado pelo tom Morse contínuo, exatamente como acontece na modulação AM. Sabemos que a modulação AM gera duas "cópias" do sinal modulado em torno da portadora, conforme se pode constatar nas figuras de espectro exibidas anteriormente. Quanto mais banda o sinal original possui, mais espalhado será o resultado modulado. O caso extremo é a onda quadrada/Morse sem rampa, que ocupa uma banda larguíssima.