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