Projet: Réaliser une station de décodage wspr sans affichage graphique pour un serveur.
1.Installation des outils nécessaires:
1 |
sudo apt-get install python sed awk git alsa-utils |
2.Le script
Attention, j’utilise arecord_adv voir article sur comment modifier arecord pour > 192khz. Vous pouvez utiliser arecord à la place si vous n’êtes qu’en 192khz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#!/bin/bash function usage(){ printf "Utilisation du script :\n" printf "$0 alsa_device centerfreq freq band samplerate\n" printf "Example :\n" printf "$0 dsnoop:lp4,1 3568600 3568600 80m 384000 F4HTB JN38tg\n" } if [ $# -ne 7 ] then usage exit 1 fi alsa_device=$1 centerfreq=$2 freq=$3 band=$4 samplerate=$5 call=$6 grid=$7 pathwspr=/dev/shm/wspr_$band rm -rf $pathwspr >/dev/null 2>&1 mkdir -p $pathwspr >/dev/null 2>&1 echo "Wait for time is sync" wait_0 () { while [[ ("$(( $(date +"%_M") % 2))" -ne 0 ) || ("$(( $(date +"%_S")))" -ne 0 ) ]] do sleep 1 done } if [ $freq -eq $centerfreq ] then while true do wait_0 now=$(date +"%y%m%d_%H%M") echo "Start for $now on $band" arecord_adv -q -d 118 -f S16_LE -r $samplerate -c2 -D $alsa_device -F0 --period-size=1024 -B0 --buffer-size=4096 | csdr convert_s16_f | csdr fir_decimate_cc `python -c "print float($samplerate/12000)"` 0.05 HAMMING 2>/dev/null | csdr bandpass_fir_fft_cc 0 0.5 0.05 2>/dev/null | csdr realpart_cf | csdr gain_ff 20 | csdr convert_f_s16 | sox -q -t raw -b 16 -e signed -c 1 -r 12000 - -t wav $pathwspr/$now.wav wsprd -a $pathwspr -d -w -f `python -c "print '%.6f'%($freq/1000000.0)"` $pathwspr/$now.wav | grep -v "DecodeFinished" | cut -f 2- -d ' '| awk -v date=$now '{print date," ",$0}' >>spots_$band && rm -rf $pathwspr/$now.wav && [ ! -f $pathwspr/wspr_spots.txt ] || [ ! -s $pathwspr/wspr_spots.txt ] || curl --silent -F allmept=@"$pathwspr/wspr_spots.txt" -F call=$call -F grid=$grid http://wsprnet.org/meptspots.php | grep "added" && rm -rf $pathwspr/wspr_spots.txt & done fi if [ $freq -ne $centerfreq ] then while true do wait_0 now=$(date +"%y%m%d_%H%M") echo "Start for $now on $band" arecord_adv -q -d 118 -f S16_LE -r384000 -c2 -D $alsa_device -F0 --period-size=1024 -B0 --buffer-size=4096 | csdr convert_s16_f | csdr shift_addition_cc `python -c "print float($centerfreq-$freq)/$samplerate"` 2>/dev/null | csdr fir_decimate_cc `python -c "print float($samplerate/12000)"` 0.05 HAMMING 2>/dev/null | csdr bandpass_fir_fft_cc 0 0.5 0.05 2>/dev/null | csdr realpart_cf | csdr gain_ff 20 | csdr convert_f_s16 | sox -q -t raw -b 16 -e signed -c 1 -r 12000 - -t wav $pathwspr/$now.wav wsprd -a $pathwspr -d -w -f `python -c "print '%.6f'%($freq/1000000.0)"` $pathwspr/$now.wav | grep -v "DecodeFinished" | cut -f 2- -d ' '| awk -v date=$now '{print date," ",$0}' >>spots_$band && rm -rf $pathwspr/$now.wav && [ ! -f $pathwspr/wspr_spots.txt ] || [ ! -s $pathwspr/wspr_spots.txt ] || curl --silent -F allmept=@"$pathwspr/wspr_spots.txt" -F call=$call -F grid=$grid http://wsprnet.org/meptspots.php | grep "added" && rm -rf $pathwspr/wspr_spots.txt & done fi |