Commit 4a2f0b2d authored by Stefan Westerfeld's avatar Stefan Westerfeld

Add helper for signal-to-noise-ratio testing.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent c9e25d80
......@@ -399,6 +399,44 @@ test_subtract (const string& infile1, const string& infile2, const string& outfi
return 0;
}
int
test_snr (const string& orig_file, const string& wm_file)
{
WavData orig_data;
Error err = orig_data.load (orig_file);
if (err)
{
error ("audiowmark: error loading %s: %s\n", orig_file.c_str(), err.message());
return 1;
}
WavData wm_data;
err = wm_data.load (wm_file);
if (err)
{
error ("audiowmark: error loading %s: %s\n", wm_file.c_str(), err.message());
return 1;
}
assert (orig_data.n_values() == wm_data.n_values());
assert (orig_data.n_channels() == orig_data.n_channels());
const auto& orig_signal = orig_data.samples();
const auto& wm_signal = wm_data.samples();
double snr_delta_power = 0;
double snr_signal_power = 0;
for (size_t i = 0; i < orig_signal.size(); i++)
{
const double orig = orig_signal[i]; // original sample
const double delta = orig_signal[i] - wm_signal[i]; // watermark
snr_delta_power += delta * delta;
snr_signal_power += orig * orig;
}
printf ("%f\n", 10 * log10 (snr_signal_power / snr_delta_power));
return 0;
}
int
gen_key (const string& outfile)
{
......@@ -449,6 +487,10 @@ main (int argc, char **argv)
{
test_subtract (argv[2], argv[3], argv[4]);
}
else if (op == "test-snr" && argc == 4)
{
test_snr (argv[2], argv[3]);
}
else if (op == "gen-key" && argc == 3)
{
return gen_key (argv[2]);
......
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