Como Utilizar SDR para Processamento de Sinais: Guia Prático com RTL-SDR e Scilab

escrito   Bruno Benedetti & Marcos Benedetti

📚 Introdução

O uso de SDRs (Software Defined Radios) tem se expandido em diversas áreas da engenharia, oferecendo flexibilidade e baixo custo para captura e análise de sinais. Este guia prático demonstra como utilizar um dispositivo RTL-SDR para capturar sinais de rádio e processá-los em tempo real ou armazená-los para análise posterior utilizando Python e Scilab.

 

O uso de SDRs (Software Defined Radios) tem se expandido em diversas áreas da engenharia, oferecendo flexibilidade e baixo custo para captura e análise de sinais. Este guia demonstra como utilizar um dispositivo RTL-SDR para capturar sinais de rádio e processá-los utilizando Python e Scilab, incluindo visualizações gráficas.

O SDR, faz uma parte do trabalho deslocando o sinal do RF para BandaBase, bem como a devida digitalização dos dados em formato amostras intercaladas I (in-phase) e Q (quadrature), armazenados geralmente como valores inteiros de 8 bits . Esses dados devem ser trabalhados com softwares como MTLAB, SCILAB ou mesmo em programas Python, conforme veremos abaixo.

Fonte: Livro Software Defined Radio

Observe abaixo as faixas de frequências normalmente usadas pelo mundo,  que o dongle SDR pode atuar.

Fonte: Livro Software Defined Radio

o que é modulação FM

Antes de colocarmos o SDR em funcionamento, vale entender o princípio da modulação em frequência (FM), técnica amplamente usada nas transmissões de rádio.

Na modulação FM, a informação (o áudio) modifica a frequência de uma portadora de alta frequência, enquanto a amplitude permanece constante. Em outras palavras, o som que queremos transmitir é convertido em pequenas variações de frequência ao redor de uma frequência central.

A grande vantagem da FM é sua resistência a ruídos: como interferências geralmente afetam a amplitude, e não a frequência, o sinal demodulado mantém excelente qualidade sonora mesmo em ambientes ruidosos.

A largura de banda de um sinal FM é dada pela regra de Carson:

onde:

  • Δf é o desvio máximo de frequência (por exemplo, ±75 kHz para FM comercial);

  • fmax é a maior frequência de áudio moduladora (geralmente até 15 kHz).

Para recuperar o áudio, o receptor precisa “medir” essas variações de frequência e convertê-las novamente em tensão — processo chamado demodulação FM.

Com um Software Defined Radio (SDR), conseguimos fazer tudo isso por software, visualizando e processando as amostras captadas em tempo real.


🛠️ 1. Instalação do Driver e Software SDR

RTL-SDR:

  • Windows: Instale o driver usando o Zadig.

  • Linux: Instale com:

sudo apt install rtl-sdr

Verificação:

  • Linux: rtl_test ou rtl_fm -f 100.1M -s 2.4e6 -

  • Windows: SDR# ou CubicSDR


📥 2. Captura de Dados do SDR

 Capturando o sinal FM

Considere um sinal FM  com portadora de 100 MHz, sintonizado no SDR com largura de banda 250kHz, com taxa de amostragem adequada, conforme figura abaixo.

 

Ao sintonizar uma frequência (ex: 100,1 MHz), o SDR gera amostras intercaladas I (in-phase) e Q (quadrature).
Esses dados são armazenados geralmente como valores inteiros de 8 bits, em um arquivo binário, e representam o sinal complexo:

s(t)=I(t)+jQ(t)s(t) = I(t) + jQ(t)

Cada par de amostras I e Q descreve o estado instantâneo do sinal recebido, contendo todas as informações necessárias para reconstruir o áudio original.

🔹 Opção A: Gerar Arquivo Binário,

               observe abaixo a linha de comando no shell do LINUX para obter os dados da  sinal FM com portadora 100.1 MHz, sendo armazenado em                     arquivo binário sdr_samples.bin.

         rtl_sdr -f 100.1M -s 2.4e6 -g 40 sdr_samples.bin

🔹 Opção B: Stream Direto via Python

       Abaixo script em python para realiza a mesma tarefa.

       observe que deve-se instalar as bibliotecas rt;sdr, numpy, como por exemplo:  pip install rtlsdr

script python, use qualquer editor de texto, após salve com o nome de geradados.py,  rode com o comando python geradados.py.

from rtlsdr import RtlSdr
import numpy as np
sdr = RtlSdr()
sdr.sample_rate = 2.4e6
sdr.center_freq = 100.1e6
sdr.gain = 40
samples = sdr.read_samples(256*1024)
# Converte para int16 intercalando I/Q
iq_data = np.empty(2*len(samples), dtype=np.int16)
iq_data[0::2] = np.real(samples)*32767
iq_data[1::2] = np.imag(samples)*32767
iq_data.tofile(‘sdr_samples.bin’)sdr.close()

📊 3. Importação e Processamento no Scilab

// Abrir arquivo binário
fd = mopen(“sdr_samples.bin”, “rb”);
data = fread(fd, -1, “int16”);
mclose(fd);

// Separar I e Q
I = data(1:2:$);
Q = data(2:2:$);
s = I + %i*Q;

// Gerar gráfico da forma de onda
scf(0);
plot(real(s));
xlabel(“Amostras”);
ylabel(“Amplitude I”);
title(“Componente I do sinal SDR”);

scf(1);
plot(imag(s));
xlabel(“Amostras”);
ylabel(“Amplitude Q”);
title(“Componente Q do sinal SDR”);

// Plot magnitude do sinal
scf(2);
plot(abs(s));
xlabel(“Amostras”);
ylabel(“Magnitude”);
title(“Magnitude do sinal I/Q”);

// Plot espectro de frequência
N = length(s);
S = fft(s);
f = (0:N-1)*(2.4e6/N); // taxa de amostragem 2.4 MHz
scf(3);
plot(f, 20*log10(abs(S)));
xlabel(“Frequência (Hz)”);
ylabel(“Magnitude (dB)”);
title(“Espectro de Frequência do Sinal SDR”);


📈 4. Exemplos de Dados

Para teste sem hardware, você pode simular um sinal FM mono simples:

Fs = 2.4e6;
t = (0:1/Fs:0.01)’;
f_carrier = 100e3;
f_audio = 1e3;
x_audio = sin(2*%pi*f_audio*t);
s = exp(%i*2*%pi*f_carrier*t + %i*2*%pi*cumsum(x_audio)/Fs);
  • Gráfico da forma de onda: componente I e Q

  • Espectro de frequência: visualização da banda do sinal


✅ 5. Conclusão

Neste guia, mostramos como capturar sinais de rádio utilizando RTL-SDR e processá-los no Scilab, incluindo gráficos da forma de onda, magnitude e espectro. Estes exemplos são fundamentais para análise de sinais em engenharia e telecomunicações, além de servir como base para projetos mais avançados, como demodulação FM e análise de espectro em tempo real.

Agradecimentos:

fonte de algumas figuras do livro  Software Defined Radio using MATLAB & Simulink and the RTL-SDR. escrito por: Stewart, Robert and Barlee, Keneth W  and Atkinson, Dale S. W  and Crockett, Lousie H

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *