From ac7c48b4dee99d4c772f133d70d8d1b38262fcd2 Mon Sep 17 00:00:00 2001 From: Author Name Date: Fri, 7 Jul 2023 12:20:59 +0930 Subject: shallow zip-file copy from codec2 e9d726bf20 --- script/test_2020x.sh | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100755 script/test_2020x.sh (limited to 'script/test_2020x.sh') diff --git a/script/test_2020x.sh b/script/test_2020x.sh new file mode 100755 index 0000000..541091c --- /dev/null +++ b/script/test_2020x.sh @@ -0,0 +1,166 @@ +#!/bin/bash -x +# test_2020x.sh +# David Rowe Feb 2022 +# +# Script to support testing experimental 2020A and 2020B modes and 700E control. + +CODEC2_PATH=$HOME/codec2 +PATH=$PATH:$CODEC2_PATH/build_linux/src:$CODEC2_PATH/build_linux/misc +FADING_DIR=$CODEC2_PATH/build_linux/unittest +No_AWGN=-20 +No_AWGN_LOW=-17 +No_Multipath=-25 +serial=0 +compressor_gain=6 + +# Approximation of Hilbert clipper analog compressor +function analog_compressor { + input_file=$1 + output_file=$2 + gain=$3 + cat $input_file | ch - - 2>/dev/null | \ + ch - - --No -100 --clip 16384 --gain $gain 2>/dev/null | \ + # final line prints peak and CPAPR for SSB + ch - - --clip 16384 | + # manually adjusted to get similar peak levels for SSB and FreeDV + sox -t .s16 -r 8000 -c 1 -v 0.85 - -t .s16 $output_file +} + +function run_sim_ssb() { + fullfile=$1 + filename=$(basename -- "$fullfile") + extension="${filename##*.}" + filename="${filename%.*}" + channel=$2 + No=-100 + if [ "$channel" == "awgn" ]; then + channel_opt="" + No=$No_AWGN + fi + if [ "$channel" == "awgnlow" ]; then + channel_opt="" + No=$No_AWGN_LOW + fi + if [ "$channel" == "mpp" ] || [ "$channel" == "mpd" ]; then + channel_opt='--'${channel} + No=$No_Multipath + fi + fn=${filename}_ssb_${channel}.wav + analog_compressor ${fullfile} ${filename}_ssb.raw ${compressor_gain} + tmp=$(mktemp) + ch ${filename}_ssb.raw $tmp --No $No ${channel_opt} --fading_dir ${FADING_DIR} 2>t.txt + cat $tmp | sox -t .s16 -r 8000 -c 1 - ${fn} trim 0 6 + snr=$(cat t.txt | grep "SNR3k(dB):" | tr -s ' ' | cut -d' ' -f3) + + echo "" + echo "${serial}ssb${channel}${snr}" + echo "" + serial=$((serial+1)) +} + +function run_sim() { + fullfile=$1 + filename=$(basename -- "$fullfile") + extension="${filename##*.}" + filename="${filename%.*}" + mode=$2 + if [ "$mode" == "700E" ] || [ "$mode" == "700D" ]; then + rateHz=8000 + else + rateHz=16000 + fi + clip=$3 + if [ "$clip" == "clip" ]; then + clipflag=1 + clip_html="yes" + else + clipflag=0 + clip_html="no" + fi + channel=$4 + No=-100 + if [ "$channel" == "awgn" ]; then + channel_opt="" + No=$No_AWGN + fi + if [ "$channel" == "awgnlow" ]; then + channel_opt="" + No=$No_AWGN_LOW + fi + if [ "$channel" == "mpp" ] || [ "$channel" == "mpd" ]; then + channel_opt='--'${channel} + No=$No_Multipath + fi + + indopt=$5 + indopt_flag="" + indopt_html="no" + indopt_str="" + if [ "$indopt" == "indopt" ]; then + indopt_flag="--indopt 1" + indopt_str="_indopt" + indopt_html="yes" + fi + if [ "$indopt" == "no_indopt" ]; then + indopt_flag="--indopt 0" + indopt_str="_no_indopt" + fi + + fn=${filename}_${mode}_${clip}_${channel}${indopt_str}.wav + tmp=$(mktemp) + # note we let ch finish to get SNR stats (trim at end of sox causes an early termination) + freedv_tx ${mode} ${fullfile} - --clip ${clipflag} ${indopt_flag} | \ + ch - $tmp --No $No ${channel_opt} --fading_dir ${FADING_DIR} 2>t.txt + freedv_rx ${mode} ${indopt_flag} $tmp - | \ + sox -t .s16 -r ${rateHz} -c 1 - ${fn} trim 0 6 + snr=$(cat t.txt | grep "SNR3k(dB):" | tr -s ' ' | cut -d' ' -f3) + + echo "" + echo "${serial}${mode}${clip_html}${indopt_html}${channel}${snr}" + echo "" + serial=$((serial+1)) +} + +# convert speech input file to format we need +SPEECH_IN_16k_WAV=~/Downloads/speech_orig_16k.wav +SPEECH_IN_16k_RAW=speech_orig_16k.raw +SPEECH_IN_8k_RAW=speech_orig_8k.raw +sox $SPEECH_IN_16k_WAV -t .s16 $SPEECH_IN_16k_RAW +sox $SPEECH_IN_16k_WAV -t .s16 -r 8000 $SPEECH_IN_8k_RAW + +echo "" +echo "" + +# run simulations + +run_sim_ssb $SPEECH_IN_8k_RAW awgn +run_sim_ssb $SPEECH_IN_8k_RAW mpp +run_sim_ssb $SPEECH_IN_8k_RAW mpd + +run_sim $SPEECH_IN_16k_RAW 2020 noclip clean +run_sim $SPEECH_IN_8k_RAW 700E clip clean + +run_sim $SPEECH_IN_16k_RAW 2020 noclip awgn +run_sim $SPEECH_IN_16k_RAW 2020 noclip mpp +run_sim $SPEECH_IN_16k_RAW 2020 noclip mpd +run_sim $SPEECH_IN_16k_RAW 2020 clip awgn +run_sim $SPEECH_IN_16k_RAW 2020 clip mpp +run_sim $SPEECH_IN_16k_RAW 2020 clip mpd + +run_sim $SPEECH_IN_16k_RAW 2020B clip awgn indopt +run_sim $SPEECH_IN_16k_RAW 2020B clip mpp indopt +run_sim $SPEECH_IN_16k_RAW 2020B clip mpp no_indopt +run_sim $SPEECH_IN_16k_RAW 2020B clip mpd indopt +run_sim $SPEECH_IN_16k_RAW 2020B clip mpd no_indopt + +run_sim $SPEECH_IN_8k_RAW 700E clip awgn +run_sim $SPEECH_IN_8k_RAW 700E clip mpp +run_sim $SPEECH_IN_8k_RAW 700E clip mpd + +# Low SNR samples +run_sim_ssb $SPEECH_IN_8k_RAW awgnlow +run_sim $SPEECH_IN_8k_RAW 700E clip awgnlow +run_sim $SPEECH_IN_16k_RAW 2020 clip awgnlow +run_sim $SPEECH_IN_16k_RAW 2020A clip awgnlow indopt + +exit -- cgit v1.2.3
SerialModeClipindex_optChannelSNR (dB)