Запис радіоефіру з SDR-приймача у файл
Архівний запис.
Продовжуючи тему багатофункціонального використання SDR-приймача на базі OpenWebRX, хочу поділитися рецептом запису ефіру у файл.
Щоб записати ефір із сирого потоку SDR-приймача, потрібно виконати команду:
nc -v 127.0.0.1 4951 | csdr convert_u8_f | csdr shift_addition_cc 0.1 | csdr fir_decimate_cc 181 0.000828675 HAMMING | csdr fmdemod_quadri_cf | csdr limit_ff | csdr deemphasis_nfm_ff 11025 | csdr fastagc_ff | csdr convert_f_s16 | sox -r 44100 -e unsigned -b 8 -c 1 -t raw - /tmp/hmm.ogg
Тут зсув csdr shift_addition_cc 0.1 вказує на частоту 144.800 МГц.
Зсув розраховується так:
csdr shift_addition_cc `python -c "print float(145000000-145350000)/2000000"`
де:
145000000 - центральна частота,
145350000 - потрібна частота,
2000000 - ширина смуги
Якщо прослухати файл /tmp/hmm.ogg, то почуємо шуми, бо шумодав не ввімкнено.
Дані S-метра записуються у fifo /tmp/record_smeter_pipe, і на основі цих значень ми обираємо рівень шумодава та записуємо його у fifo /tmp/record_squelch_pipe.
Тут є тонкість. Запис не почнеться, доки ми не запишемо дані у fifo
echo "0" > /tmp/record_squelch_pipe
і не почнемо читати дані S-метра в окремому потоці
cat /tmp/record_smeter_pipe
До речі, створювати fifo-pipe потрібно так:
mkfifo /tmp/record_squelch_pipe
mkfifo /tmp/record_smeter_pipe
Проблема з читанням після вибору значення шумодава (у мене це 0.0005) вирішується перенаправленням потоку --outfifo /dev/null. А от значення шумодава потрібно записати до виклику команди запису. Робимо так: echo "0.0005" > /tmp/record_squelch_pipe
echo "0.0005" > /tmp/record_squelch_pipe
nc -v 127.0.0.1 4951 | csdr convert_u8_f | csdr shift_addition_cc -0.25 | csdr fir_decimate_cc 181 0.000828675 HAMMING | csdr squelch_and_smeter_cc --fifo /tmp/record_squelch_pipe --outfifo /dev/null 5 1 | csdr fmdemod_quadri_cf | csdr limit_ff | csdr deemphasis_nfm_ff 11025 | csdr fastagc_ff | csdr convert_f_s16 | sox -r 11025 -e signed -b 16 -c 1 -t raw - /tmp/hmm_sq.wav
От і все: тепер у файлі /tmp/hmm_sq.wav буде запис ефіру без шумів.