AD9857 IQ DDS Digital Up Converter Experiment using Nucleo F401

Dependencies:   mbed

Digital Signal Processing for IQ Quadradure Modulation DDS AD9857 using Nucleo F401.

see http://ttrftech.tumblr.com/post/114310226891/

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++;
     }
 }