Commit cf7a12bb authored by Stefan Westerfeld's avatar Stefan Westerfeld

Merge branch 'hsi-reduction'

* hsi-reduction:
  Add mp3 quality comparision for different mp3 quality levels.
  Reduce host signal interference by using prev/next value during decode.
	This improves robustness by significantly decreasing convolutional code error.
Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parents 586ccd73 41589eaf
#!/bin/bash
SEEDS=$(seq 5)
STRENGTHS="10 15"
MP3_QUALITIES="128 64 48"
MULTI_CLIP=4
if [ "x$1" == "xmk" ]; then
echo -n "all:"
for STRENGTH in $STRENGTHS
do
FILE="snr-$STRENGTH"
echo -n " $FILE"
done
for SEED in $SEEDS
do
for STRENGTH in $STRENGTHS
do
for Q in $MP3_QUALITIES
do
FILE="mp3-$Q-$STRENGTH-$SEED"
echo -n " $FILE"
done
done
done
echo
echo
for STRENGTH in $STRENGTHS
do
FILE="snr-$STRENGTH"
echo "$FILE:"
echo -e "\t( cd ..; AWM_SET=huge2 AWM_PARAMS='--strength $STRENGTH' snr.sh ) >x$FILE"
echo -e "\tmv x$FILE $FILE"
echo
done
for SEED in $SEEDS
do
for STRENGTH in $STRENGTHS
do
for Q in $MP3_QUALITIES
do
FILE="mp3-$Q-$STRENGTH-$SEED"
echo "$FILE:"
echo -e "\t( cd ..; AWM_RAND_PATTERN=1 AWM_SET=huge2 AWM_CLIP='50' AWM_PARAMS_ADD='--strength $STRENGTH' AWM_MULTI_CLIP='$MULTI_CLIP' AWM_SEEDS=$SEED AWM_FILE='t-$FILE' ber-test.sh mp3 $Q ) >x$FILE"
echo -e "\tmv x$FILE $FILE"
echo
done
done
done
fi
if [ "x$1" == "xadoc" ]; then
echo '[frame="topbot",options="header",cols="<1,4*<"]'
echo '|=========================='
echo '| *Strength* | *SNR* | *mp3 128kbit/s* | *mp3 64kbit/s* | *mp3 48kbit/s*'
for STRENGTH in $STRENGTHS
do
echo -n "| *$STRENGTH* "
cat snr-$STRENGTH | awk '{printf ("| %.2f ", $1);}'
for Q in $MP3_QUALITIES
do
for FILE in "mp3-$Q-$STRENGTH-*"
do
cat $FILE
done | grep -v '#' | awk '{bad += $1; n += $2} END {if (n==0) n=1;fer=100.0*bad/n; bold=fer>0?"*":" ";printf ("| %s%.2f%s", bold, fer, bold)}'
done
echo
done
echo '|=========================='
fi
......@@ -81,11 +81,17 @@ mix_decode (const Key& key, vector<vector<complex<float>>>& fft_out, int n_chann
const double min_db = -96;
const size_t index = mix_entries[b].frame * n_channels + ch;
const size_t next_index = (index + n_channels) < fft_out.size() ? index + n_channels : index - n_channels;
const size_t prev_index = (int (index) - n_channels) >= 0 ? index - n_channels : index + n_channels;
const int u = mix_entries[b].up;
const int d = mix_entries[b].down;
umag += db_from_complex (fft_out[index][u], min_db);
umag -= (db_from_complex (fft_out[prev_index][u], min_db) + db_from_complex (fft_out[next_index][u], min_db)) * 0.5;
dmag += db_from_complex (fft_out[index][d], min_db);
dmag -= (db_from_complex (fft_out[prev_index][d], min_db) + db_from_complex (fft_out[next_index][d], min_db)) * 0.5;
}
}
if ((f % Params::frames_per_bit) == (Params::frames_per_bit - 1))
......@@ -113,16 +119,24 @@ linear_decode (const Key& key, vector<vector<complex<float>>>& fft_out, int n_ch
for (int ch = 0; ch < n_channels; ch++)
{
const size_t index = bit_pos_gen.data_frame (f) * n_channels + ch;
const size_t next_index = (index + n_channels) < fft_out.size() ? index + n_channels : index - n_channels;
const size_t prev_index = (int (index) - n_channels) >= 0 ? index - n_channels : index + n_channels;
UpDownArray up, down;
up_down_gen.get (f, up, down);
const double min_db = -96;
for (auto u : up)
umag += db_from_complex (fft_out[index][u], min_db);
{
umag += db_from_complex (fft_out[index][u], min_db);
umag -= 0.5 * (db_from_complex (fft_out[prev_index][u], min_db) + db_from_complex (fft_out[next_index][u], min_db));
}
for (auto d : down)
dmag += db_from_complex (fft_out[index][d], min_db);
{
dmag += db_from_complex (fft_out[index][d], min_db);
dmag -= 0.5 * (db_from_complex (fft_out[prev_index][d], min_db) + db_from_complex (fft_out[next_index][d], min_db));
}
}
if ((f % Params::frames_per_bit) == (Params::frames_per_bit - 1))
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment