Um aplicativo Android completo para rádio SDR que funciona com dispositivos RTL-SDR via USB OTG, desenvolvido em Java/C++.
- Interface gráfica intuitiva para controle de frequência
- Sintonização precisa com entrada direta e controle deslizante
- Visualizador de espectro em tempo real com FFT
- Display de cascata (waterfall) para análise temporal
- Controles de volume e mudo integrados
- Demodulação múltipla: FM, AM, USB, LSB
- Controle de ganho automático e manual
- Filtros digitais configuráveis
- Controle de squelch para eliminar ruído
- AGC (Automatic Gain Control) para áudio limpo
- Suporte completo RTL-SDR via USB OTG
- Auto-detecção de dispositivos compatíveis
- Configuração automática de parâmetros
- Múltiplas taxas de amostragem (250kHz - 3.2MHz)
- Gravação de áudio em tempo real
- Correção de frequência (PPM)
- Configurações personalizáveis
- Análise de espectro com FFT otimizada
- Processamento nativo em C++ para performance máxima
radio_sdr/
├── app/
│ ├── src/main/
│ │ ├── java/com/radioSDR/app/ # Código Java
│ │ │ ├── MainActivity.java # Activity principal
│ │ │ ├── SpectrumActivity.java # Visualizador de espectro
│ │ │ └── SettingsActivity.java # Configurações
│ │ ├── cpp/ # Código nativo C++
│ │ │ ├── radiosdr_jni.cpp # Interface JNI
│ │ │ ├── sdr_controller.cpp # Controle RTL-SDR
│ │ │ ├── signal_processor.cpp # Processamento DSP
│ │ │ ├── audio_processor.cpp # Processamento áudio
│ │ │ ├── spectrum_analyzer.cpp # Análise de espectro
│ │ │ ├── demodulator.cpp # Demoduladores
│ │ │ └── librtlsdr/ # Biblioteca RTL-SDR
│ │ └── res/ # Recursos Android
│ └── build.gradle # Configuração build
├── build.gradle # Build global
├── settings.gradle # Configurações projeto
└── README.md # Este arquivo
- Comunicação direta com hardware RTL-SDR
- Controle de frequência, ganho e taxa de amostragem
- Buffer circular para dados IQ
- Thread de leitura assíncrona
- Filtros digitais (passa-baixa, passa-banda)
- Controle automático de ganho (AGC)
- Controle de squelch
- Preparação para demodulação
- FM: Demodulação por diferença de fase
- AM: Detecção de envelope
- SSB (USB/LSB): Demodulação por produto
- Decimação para taxa de áudio (48kHz)
- FFT otimizada para análise de espectro
- Janelamento (Hamming) para reduzir vazamento
- Averaging para suavização do espectro
- Buffer circular para display waterfall
- Conversão float para PCM 16-bit
- Controle de volume digital
- Limitador para prevenir clipping
- Buffer de saída para AudioTrack
- Android 6.0+ (API 23 ou superior)
- Suporte USB OTG (USB Host)
- Permissão de áudio para gravação
- Pelo menos 2GB RAM para processamento eficiente
- Chipset RTL2832U com tuner R820T/R820T2
- Cabo USB OTG compatível
- Dispositivos testados:
- RTL-SDR Blog V3/V4
- NooElec NESDR Smart/Mini
- Generic RTL2832U dongles
- Android Studio 2022.3+
- NDK 25.0+ instalado
- CMake 3.18.1+
- SDK Android 33/34
# Configurar Android SDK
export ANDROID_HOME=/caminho/para/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
# Verificar NDK
ls $ANDROID_HOME/ndk/# Dar permissão ao script
chmod +x build.sh
# Executar build
./build.sh# Limpar projeto
./gradlew clean
# Compilar debug
./gradlew assembleDebug
# Ou compilar release
./gradlew assembleRelease# Via ADB
adb install app/build/outputs/apk/debug/app-debug.apk
# Ou transferir APK para dispositivo e instalar manualmente- Conectar RTL-SDR via cabo USB OTG
- Abrir aplicativo - aparecerá como "Radio SDR"
- Conceder permissões:
- Permissão USB quando solicitada
- Permissão de áudio para gravação
- Tocar "Conectar Dispositivo"
- Aguardar status mudar para "Dispositivo Conectado"
-
Sintonizar frequência:
- Digite frequência em MHz no campo de texto
- Ou use o controle deslizante
- Exemplo: 88.5 para FM local
-
Configurar ganho:
- Use "Ganho Automático" para operação normal
- Ou desative e ajuste manualmente
-
Escolher demodulação:
- FM: Para rádio FM comercial
- AM: Para rádio AM e aviação civil
- USB/LSB: Para radioamador e utilities
-
Iniciar recepção:
- Toque "Iniciar SDR"
- Aguarde o áudio começar
- Ajuste volume conforme necessário
- Toque "Espectro" para tela dedicada
- Gráfico superior: Espectro de frequência atual
- Gráfico inferior: Display waterfall temporal
- Use gestos para zoom e pan
- Toque "Configurações" para opções avançadas:
- Taxa de amostragem: 250kHz a 3.2MHz
- Correção de frequência: -200 a +200 PPM
- Largura de banda: 1kHz a 250kHz
- Squelch: -100dB a 0dB
- Toque "Gravar" durante recepção
- Áudio salvo em formato WAV
- Toque novamente para parar gravação
- Verificar cabo USB OTG
- Tentar cabo USB diferente
- Reiniciar aplicativo
- Verificar se RTL-SDR funciona no PC
- Verificar volume do dispositivo
- Verificar se não está mudo
- Tentar frequência conhecida (FM local)
- Ajustar ganho
- Fechar outros aplicativos
- Reduzir taxa de amostragem
- Dispositivo pode estar aquecendo
- Verificar NDK instalado
- Atualizar Android Studio
- Limpar projeto:
./gradlew clean - Verificar espaço em disco
- Editar
demodulator.h- adicionar enum - Implementar em
demodulator.cpp - Atualizar UI em
MainActivity.java
- Usar NEON SIMD quando disponível
- Implementar FFT otimizada (FFTW)
- Cache de filtros pré-calculados
- Suporte a múltiplos dongles
- Gravação IQ raw
- Plugins de demodulação
- Interface web remota
- Suporte HackRF/PlutoSDR
Este projeto é open source. Consulte bibliotecas individuais para suas licenças específicas.
Contribuições são bem-vindas! Por favor:
- Fork o projeto
- Crie branch para feature
- Commit suas mudanças
- Push para branch
- Abra Pull Request
Para dúvidas, problemas ou sugestões, abra uma issue no repositório do projeto.