From 4596f79c957078989567e20f16069729b10bc0f3 Mon Sep 17 00:00:00 2001 From: chrysn Date: Wed, 24 Mar 2021 00:32:11 +0100 Subject: [PATCH] tests/dac_dds: Fix sine wave to fit in PCM range The previous sine wave cast signed integers into the PCM range, causing jumps at zero transitions. This shifts everything up by the respective maximum signed integer, so that the signed idle zero becomes the unsigned PCM signal's idle half-point and can continuously cover the whole unsigned range. --- tests/driver_dac_dds/main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/driver_dac_dds/main.c b/tests/driver_dac_dds/main.c index c72f0ba25f..43e9f93b18 100644 --- a/tests/driver_dac_dds/main.c +++ b/tests/driver_dac_dds/main.c @@ -127,6 +127,7 @@ static void _fill_sine_samples_8(uint8_t *buf, size_t len, uint16_t period) for (uint16_t i = 0; i < period; ++i) { x += step; buf[i] = isin(x) >> 5; + buf[i] += INT8_MAX + 1; } for (uint16_t i = period; i < len; i += period) { @@ -145,6 +146,7 @@ static void _fill_sine_samples_16(uint8_t *buf, size_t len, uint16_t period) x += step; uint16_t y = isin(x); + y += INT16_MAX + 1; buf[i] = y; buf[++i] = y >> 8; }