gint i;
gint16 *in;
GstFFTS16Complex *out;
- gdouble *mag;
GstFFTS16 *ctx;
in = g_new (gint16, 2048);
out = g_new (GstFFTS16Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_s16_new (2048, FALSE);
for (i = 0; i < 2048; i++)
gst_fft_s16_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_s16_fft (ctx, in, out);
- gst_fft_s16_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i < 2 && mag[i] < -15.0);
- fail_if (i >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag *= 2048.0;
+ mag /= 32767.0 * 32767.0;
+ mag = 10.0 * log10 (mag);
+ if (i < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -55.0);
}
gst_fft_s16_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gint16 *in;
GstFFTS16Complex *out;
- gdouble *mag;
GstFFTS16 *ctx;
in = g_new (gint16, 2048);
out = g_new (GstFFTS16Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_s16_new (2048, FALSE);
for (i = 0; i < 2048; i += 4) {
gst_fft_s16_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_s16_fft (ctx, in, out);
- gst_fft_s16_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (abs (512 - i) < 2 && mag[i] < -20.0);
- fail_if (abs (512 - i) >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag *= 2048.0;
+ mag /= 32767.0 * 32767.0;
+ mag = 10.0 * log10 (mag);
+
+ if (abs (512 - i) < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -55.0);
}
gst_fft_s16_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gint16 *in;
GstFFTS16Complex *out;
- gdouble *mag;
GstFFTS16 *ctx;
in = g_new (gint16, 2048);
out = g_new (GstFFTS16Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_s16_new (2048, FALSE);
for (i = 0; i < 2048; i += 2) {
gst_fft_s16_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_s16_fft (ctx, in, out);
- gst_fft_s16_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i > 1022 && mag[i] < -20.0);
- fail_if (i <= 1022 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag *= 2048.0;
+ mag /= 32767.0 * 32767.0;
+ mag = 10.0 * log10 (mag);
+
+ if (i > 1022)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -55.0);
}
gst_fft_s16_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gint32 *in;
GstFFTS32Complex *out;
- gdouble *mag;
GstFFTS32 *ctx;
in = g_new (gint32, 2048);
out = g_new (GstFFTS32Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_s32_new (2048, FALSE);
for (i = 0; i < 2048; i++)
gst_fft_s32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_s32_fft (ctx, in, out);
- gst_fft_s32_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i < 2 && mag[i] < -15.0);
- fail_if (i >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag *= 2048.0;
+ mag /= 2147483647.0 * 2147483647.0;
+ mag = 10.0 * log10 (mag);
+
+ if (i < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_s32_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gint32 *in;
GstFFTS32Complex *out;
- gdouble *mag;
GstFFTS32 *ctx;
in = g_new (gint32, 2048);
out = g_new (GstFFTS32Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_s32_new (2048, FALSE);
for (i = 0; i < 2048; i += 4) {
gst_fft_s32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_s32_fft (ctx, in, out);
- gst_fft_s32_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (abs (512 - i) < 2 && mag[i] < -20.0);
- fail_if (abs (512 - i) >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag *= 2048.0;
+ mag /= 2147483647.0 * 2147483647.0;
+ mag = 10.0 * log10 (mag);
+
+ if (abs (512 - i) < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_s32_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gint32 *in;
GstFFTS32Complex *out;
- gdouble *mag;
GstFFTS32 *ctx;
in = g_new (gint32, 2048);
out = g_new (GstFFTS32Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_s32_new (2048, FALSE);
for (i = 0; i < 2048; i += 2) {
gst_fft_s32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_s32_fft (ctx, in, out);
- gst_fft_s32_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i > 1022 && mag[i] < -20.0);
- fail_if (i <= 1022 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag *= 2048.0;
+ mag /= 2147483647.0 * 2147483647.0;
+ mag = 10.0 * log10 (mag);
+
+ if (i > 1022)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_s32_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gfloat *in;
GstFFTF32Complex *out;
- gdouble *mag;
GstFFTF32 *ctx;
in = g_new (gfloat, 2048);
out = g_new (GstFFTF32Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_f32_new (2048, FALSE);
for (i = 0; i < 2048; i++)
gst_fft_f32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_f32_fft (ctx, in, out);
- gst_fft_f32_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i < 2 && mag[i] < -15.0);
- fail_if (i >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag /= 2048.0;
+ mag = 10.0 * log10 (mag);
+
+ if (i < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_f32_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gfloat *in;
GstFFTF32Complex *out;
- gdouble *mag;
GstFFTF32 *ctx;
in = g_new (gfloat, 2048);
out = g_new (GstFFTF32Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_f32_new (2048, FALSE);
for (i = 0; i < 2048; i += 4) {
gst_fft_f32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_f32_fft (ctx, in, out);
- gst_fft_f32_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (abs (512 - i) < 2 && mag[i] < -20.0);
- fail_if (abs (512 - i) >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag /= 2048.0;
+ mag = 10.0 * log10 (mag);
+
+ if (abs (512 - i) < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_f32_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gfloat *in;
GstFFTF32Complex *out;
- gdouble *mag;
GstFFTF32 *ctx;
in = g_new (gfloat, 2048);
out = g_new (GstFFTF32Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_f32_new (2048, FALSE);
for (i = 0; i < 2048; i += 2) {
gst_fft_f32_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_f32_fft (ctx, in, out);
- gst_fft_f32_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i > 1022 && mag[i] < -20.0);
- fail_if (i <= 1022 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag /= 2048.0;
+ mag = 10.0 * log10 (mag);
+
+ if (i > 1022)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_f32_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gdouble *in;
GstFFTF64Complex *out;
- gdouble *mag;
GstFFTF64 *ctx;
in = g_new (gdouble, 2048);
out = g_new (GstFFTF64Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_f64_new (2048, FALSE);
for (i = 0; i < 2048; i++)
gst_fft_f64_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_f64_fft (ctx, in, out);
- gst_fft_f64_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i < 2 && mag[i] < -15.0);
- fail_if (i >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag /= 2048.0;
+ mag = 10.0 * log10 (mag);
+
+ if (i < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_f64_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gdouble *in;
GstFFTF64Complex *out;
- gdouble *mag;
GstFFTF64 *ctx;
in = g_new (gdouble, 2048);
out = g_new (GstFFTF64Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_f64_new (2048, FALSE);
for (i = 0; i < 2048; i += 4) {
gst_fft_f64_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_f64_fft (ctx, in, out);
- gst_fft_f64_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (abs (512 - i) < 2 && mag[i] < -20.0);
- fail_if (abs (512 - i) >= 2 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag /= 2048.0;
+ mag = 10.0 * log10 (mag);
+
+ if (abs (512 - i) < 2)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_f64_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;
gint i;
gdouble *in;
GstFFTF64Complex *out;
- gdouble *mag;
GstFFTF64 *ctx;
in = g_new (gdouble, 2048);
out = g_new (GstFFTF64Complex, 1025);
- mag = g_new (gdouble, 1025);
ctx = gst_fft_f64_new (2048, FALSE);
for (i = 0; i < 2048; i += 2) {
gst_fft_f64_window (ctx, in, GST_FFT_WINDOW_HAMMING);
gst_fft_f64_fft (ctx, in, out);
- gst_fft_f64_magnitude (ctx, out, mag, TRUE);
for (i = 0; i < 1025; i++) {
- fail_if (i > 1022 && mag[i] < -20.0);
- fail_if (i <= 1022 && mag[i] > -60.0);
+ gdouble mag;
+
+ mag = (gdouble) out[i].r * (gdouble) out[i].r;
+ mag += (gdouble) out[i].i * (gdouble) out[i].i;
+ mag /= 2048.0;
+ mag = 10.0 * log10 (mag);
+
+ if (i > 1022)
+ fail_unless (mag > -15.0);
+ else
+ fail_unless (mag < -60.0);
}
gst_fft_f64_free (ctx);
g_free (in);
g_free (out);
- g_free (mag);
}
GST_END_TEST;