void CompareComplex16(struct SnrResult* snr, OMX_SC16* actual, OMX_SC16* expected, int size) { double realSignalPower = 0; double imagSignalPower = 0; double complexSignalPower = 0; double realNoisePower = 0; double imagNoisePower = 0; double complexNoisePower = 0; int k; for (k = 0; k < size; ++k) { double x2; double y2; if (verbose > 255) { printf("%4d: (%10d, %10d) (%10d, %10d)\n", k, actual[k].Re, actual[k].Im, expected[k].Re, expected[k].Im); } x2 = pow((double) expected[k].Re, 2); y2 = pow((double) expected[k].Im, 2); realSignalPower += x2; imagSignalPower += y2; complexSignalPower += x2 + y2; x2 = pow((double) actual[k].Re - expected[k].Re, 2); y2 = pow((double) actual[k].Im - expected[k].Im, 2); realNoisePower += x2; imagNoisePower += y2; complexNoisePower += x2 + y2; } snr->real_snr_ = CalculateSNR(realSignalPower, realNoisePower); snr->imag_snr_ = CalculateSNR(imagSignalPower, imagNoisePower); snr->complex_snr_ = CalculateSNR(complexSignalPower, complexNoisePower); }
void CompareFloat(struct SnrResult* snr, OMX_F32* actual, OMX_F32* expected, int size) { double signal_power = 0; double noise_power = 0; int k; for (k = 0; k < size; ++k) { double x2; x2 = pow((double) expected[k], 2); signal_power += x2; x2 = pow((double) actual[k] - expected[k], 2); noise_power += x2; } snr->real_snr_ = CalculateSNR(signal_power, noise_power); snr->imag_snr_ = -10000; snr->complex_snr_ = snr->real_snr_; }
void CompareReal16(struct SnrResult* snr, OMX_S16* actual, OMX_S16* expected, int size) { double real_signal_power = 0; double real_noise_power = 0; int k; for (k = 0; k < size; ++k) { double x2; x2 = pow((double) expected[k], 2); real_signal_power += x2; x2 = pow((double) actual[k] - expected[k], 2); real_noise_power += x2; } snr->real_snr_ = CalculateSNR(real_signal_power, real_noise_power); snr->imag_snr_ = -10000; snr->complex_snr_ = -10000; }