AD9857 IQ DDS Digital Up Converter Experiment using Nucleo F401
Digital Signal Processing for IQ Quadradure Modulation DDS AD9857 using Nucleo F401.
see http://ttrftech.tumblr.com/post/114310226891/
Diff: dsp.cpp
- Revision:
- 3:e6897d74d6bf
- Parent:
- 0:55201637d936
- Child:
- 4:dfd05c26edbe
--- a/dsp.cpp Sun Mar 22 13:57:58 2015 +0000 +++ b/dsp.cpp Mon Mar 23 15:00:50 2015 +0000 @@ -23,29 +23,29 @@ int j = 0; for (i = 0; i < src_len; i++) { uint32_t s = src[i]; - uint32_t d0 = __SSUB16(s, p0); - s0 = __SADD16(s0, d0); - uint32_t s1 = __SADD16(s0, d0); - uint32_t s2 = __SADD16(s1, d0); - uint32_t s3 = __SADD16(s2, d0); - uint32_t s4 = __SADD16(s3, d0); - dst[j ] = s0; - dst[j+1] = s1; - dst[j+2] = s2; - dst[j+3] = s3; - dst[j+4] = s4; + uint32_t d0 = __QSUB16(s, p0); + s0 = __QADD16(s0, d0); + uint32_t s1 = __QADD16(s0, d0); + uint32_t s2 = __QADD16(s1, d0); + uint32_t s3 = __QADD16(s2, d0); + uint32_t s4 = __QADD16(s3, d0); + dst[j ] = s0 >> 2; + dst[j+1] = s1 >> 2; + dst[j+2] = s2 >> 2; + dst[j+3] = s3 >> 2; + dst[j+4] = s4 >> 2; j += 5; s0 = s4; - s0 = __SADD16(s0, d0); - s1 = __SADD16(s0, d0); - s2 = __SADD16(s1, d0); - s3 = __SADD16(s2, d0); - s4 = __SADD16(s3, d0); - dst[j ] = s0; - dst[j+1] = s1; - dst[j+2] = s2; - dst[j+3] = s3; - dst[j+4] = s4; + s0 = __QADD16(s0, d0); + s1 = __QADD16(s0, d0); + s2 = __QADD16(s1, d0); + s3 = __QADD16(s2, d0); + s4 = __QADD16(s3, d0); + dst[j ] = s0 >> 2; + dst[j+1] = s1 >> 2; + dst[j+2] = s2 >> 2; + dst[j+3] = s3 >> 2; + dst[j+4] = s4 >> 2; j += 5; s0 = s4; p0 = s; @@ -88,7 +88,7 @@ CELL(0); CELL(1); CELL(2); CELL(3); CELL(4); CELL(5); CELL(6); CELL(7); - *dst++ = __SSAT16(__PKHTB(acc_i, acc_q, 16), 11); + *dst++ = __PKHTB(__SSAT16(acc_i, 16), __SSAT16(acc_q, 16), 16); index++; if (index >= 8) { @@ -174,8 +174,9 @@ acc = __SMLAD(c, d, acc); } acc *= sign; - uint32_t real = src[OFFSET]; - *dst++ = __PKHTB(real, acc, 15); + int32_t real = src[OFFSET]; + real /= 2; + *dst++ = __PKHTB(real, acc, 16); src++; } }