Resolvendo um problema de áudio no GNU Radio

Estava a preparar um trabalho com GNU Radio e um dongle RTL-SDR (antes, tinha tentado com um ADALM-Pluto), implementando um popularíssimo esquema (abaixo) para desmodular estações de rádio comercial (FM), e o áudio à saída do meu sistema estava aos soluços…

RTL-SDR_FM-RX

Ainda pensei tratar-se de um erro de cálculo na parametrização das diversas operações de Interpolação e Decimação pela meio da cadeia, mas não era isto. Pensei também tratar-se de uma limitação na frequência de amostragem da minha placa de som; porém alterando o valor desta e procedendo aos devidos ajustes no resto da cadeia, o problema mantinha-se.

Foi então que notei que na janela de Terminal do GNU Radio, dependendo de alguns parâmetros (decimação/interpolação), apareciam sequências de caracteres OOOOO ou aUaUaUaUaU… Uma pesquisa pela Internet induziu-me no sentido de procurar o erro na relação entre o GNU Radio e a placa de som. Os aU referem-se a “audio Underrun“. Portanto, o problema tinha um cheiro a buffer com falta de dados…

Parti então para uma busca minuciosa pelos ficheiros do GNU Radio até descobrir um em particular e com o qual consegui resolver o problema: gr-audio-alsa.conf. No meu sistema (Debian 10 – buster), este ficheiro encontra-se em /etc/gnuradio/conf.d/.

[audio_alsa]
default_input_device = default
default_output_device = default
# period time in seconds
period_time = 0.050
# total buffering = period_time * nperiods
nperiods = 8
verbose = false

Neste ficheiro, após duas iterações de tentativa-erro, resolvi o problema, aumentando o valor das variáveis period_time e nperiods (originalmente estavam iguais a 0.010 e 4, respectivamente).

Resolvido este assunto, deixo aqui o meu apotnmento para a eventualidade de dar jeito a alguém que esteja a passar pelo mesmo azar.