RMUL2025/lib/cmsis_5/CMSIS/DSP/Testing/DebugScripts/debug.py

99 lines
3.0 KiB
Python
Executable File

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()#