CMSIS-DSP : Testing framework improvements
Added new tests for cfft.
Improved error handling when not enough memory allocated in testmain.cpp
Corrected arm_math.h (replaced inline by preprocessor definition).
Added example debug script to read pattern and output of tests using
scipy.
diff --git a/CMSIS/DSP/Testing/debug.py b/CMSIS/DSP/Testing/debug.py
new file mode 100755
index 0000000..f1558c3
--- /dev/null
+++ b/CMSIS/DSP/Testing/debug.py
@@ -0,0 +1,99 @@
+import numpy as np
+from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show,semilogx, semilogy
+import scipy.fftpack
+import os.path 
+import struct
+import argparse
+
+import PatternGeneration.DebugTools as d
+
+# Example script to read patterns and test outputs
+
+parser = argparse.ArgumentParser(description='Debug description')
+parser.add_argument('-f', nargs='?',type = str, default="f32", help="Format")
+parser.add_argument('-n', nargs='?',type = str, default="1", help="Test number")
+parser.add_argument('-i', nargs='?',type = bool, default=False, help="Ifft")
+parser.add_argument('-ui', nargs='?',const=True,type = bool, default=False, help="Display curves")
+
+args = parser.parse_args()
+
+FFTSIZES=[16,32,64,128,256,512,1024,2048,4096]
+
+if int(args.n) >= 19:
+    args.i = True 
+
+if args.i:
+   n = int(args.n) - 18
+   s = FFTSIZES[n-1]
+   sc = n - 1 + 4
+   inputPath = os.path.join("Patterns","DSP","Transform","Transform%s" % args.f.upper(),"ComplexInputIFFTSamples_Noisy_%d_%d_%s.txt" % (s,n,args.f))
+   refPath = os.path.join("Patterns","DSP","Transform","Transform%s" % args.f.upper(),"ComplexInputSamples_Noisy_%d_%d_%s.txt" % (s,n,args.f))
+   outputPath= os.path.join("Output","DSP","Transform","Transform%s" % args.f.upper(),"ComplexFFTSamples_%s.txt" % args.n)
+else:
+   s = FFTSIZES[int(args.n)-1]
+   inputPath = os.path.join("Patterns","DSP","Transform","Transform%s" % args.f.upper(),"ComplexInputSamples_Noisy_%d_%s_%s.txt" % (s,args.n,args.f))
+   refPath = os.path.join("Patterns","DSP","Transform","Transform%s" % args.f.upper(),"ComplexFFTSamples_Noisy_%d_%s_%s.txt" % (s,args.n,args.f))
+   outputPath= os.path.join("Output","DSP","Transform","Transform%s" % args.f.upper(),"ComplexFFTSamples_%s.txt" % args.n)
+
+print(inputPath)
+
+
+if args.f == "f32":
+    inSig = d.readF32Pattern(inputPath)
+    inSig=inSig.view(dtype=np.complex128)
+     
+    refSig = d.readF32Pattern(refPath)
+    refSig=refSig.view(dtype=np.complex128)
+     
+    sig = d.readF32Output(outputPath)
+    sig=sig.view(dtype=np.complex128)
+
+if args.f == "q31":
+    inSig = d.readQ31Pattern(inputPath)
+    inSig=inSig.view(dtype=np.complex128)
+     
+    refSig = d.readQ31Pattern(refPath)
+    refSig=refSig.view(dtype=np.complex128)
+     
+    sig = d.readQ31Output(outputPath)
+    sig=sig.view(dtype=np.complex128)
+
+if args.f == "q15":
+    inSig = d.readQ15Pattern(inputPath)
+    inSig=inSig.view(dtype=np.complex128)
+     
+    refSig = d.readQ15Pattern(refPath)
+    refSig=refSig.view(dtype=np.complex128)
+     
+    sig = d.readQ15Output(outputPath)
+    sig=sig.view(dtype=np.complex128)
+
+
+if args.i and args.f != "f32":
+    refSig = refSig / 2**sc
+
+if args.ui:
+   if args.i:
+      figure()
+      plot(abs(inSig))
+      figure()
+      plot(np.real(refSig))
+      figure()
+      plot(np.real(sig))
+   else:
+      figure()
+      plot(np.real(inSig))
+      figure()
+      plot(abs(refSig))
+      figure()
+      plot(abs(sig))
+
+print(d.SNR(refSig,sig))
+
+#figure()
+#plot(np.unwrap(np.angle(refSig)))
+#figure()
+#plot(np.unwrap(np.angle(sig)))
+#figure()
+#plot(np.unwrap(np.angle(sig)) - np.unwrap(np.angle(refSig)))
+show()#
\ No newline at end of file