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 |
Merci !
Ca m’a débloqué sur un truc.
sox -q -t raw -b 16 -e signed -c 1 -r 12000
format du fichier admissible par wsprd 😉
D’autre part, votre site est très intéressant. La somme des billets est enrichissante. Bonne continuation et au plaisir de s’entendre un de ces jours!
73 F5LEN
Bonjour,
Merci pour votre encouragement.
A la base mon site n’est qu’un carnet de note personnel afin de ne plus a rechercher à chaque fois des infos redondantes.
Je suis heureux de voir que les informations peuvent servir à d’autre.
73 F4HTB