| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- # New functions for version 1.4 of the Python wrapper
- import cmsisdsp as dsp
- import cmsisdsp.fixedpoint as f
- import numpy as np
- import math
- import colorama
- from colorama import init,Fore, Back, Style
- init()
- def printTitle(s):
- print("\n" + Fore.GREEN + Style.BRIGHT + s + Style.RESET_ALL)
- def printSubTitle(s):
- print("\n" + Style.BRIGHT + s + Style.RESET_ALL)
- printTitle("ArcTan2")
- angles=[0,
- math.pi/4,
- math.pi/2,
- 3*math.pi/4,
- math.pi,
- 5*math.pi/4,
- 3*math.pi/2,
- 7*math.pi/4
- ]
- x = np.cos(angles)
- y = np.sin(angles)
- vals=list(zip(y,x))
- printSubTitle("Atan2 Referebce")
- ref=np.array([np.arctan2(yv,xv) for (yv,xv) in vals])/math.pi*180
- print(ref)
- printSubTitle("Atan2 F32")
- resf32=np.array([dsp.arm_atan2_f32(yv,xv)[1] for (yv,xv) in vals])/math.pi*180
- print(resf32)
- print(np.isclose(ref,resf32,1e-6,1e-6))
- printSubTitle("Atan2 Q31")
- xQ31=f.toQ31(x)
- yQ31=f.toQ31(y)
- valsQ31=list(zip(yQ31,xQ31))
- resq31=4*f.Q31toF32(np.array([dsp.arm_atan2_q31(yv,xv)[1] for (yv,xv) in valsQ31]))/math.pi*180
- print(resq31)
- print(np.isclose(ref,resq31,1e-8,1e-8))
- printSubTitle("Atan2 Q15")
- xQ15=f.toQ15(x)
- yQ15=f.toQ15(y)
- valsQ15=list(zip(yQ15,xQ15))
- resq15=4*f.Q15toF32(np.array([dsp.arm_atan2_q15(yv,xv)[1] for (yv,xv) in valsQ15]))/math.pi*180
- print(resq15)
- print(np.isclose(ref,resq15,1e-3,1e-3))
- printTitle("MSE")
- NBSAMPLES = 50
- def mse(a,b):
- err = a - b
- return(np.dot(err,err) / len(a))
- a=np.random.randn(NBSAMPLES)
- a = a / np.max(np.abs(a))
- b=np.random.randn(NBSAMPLES)
- b = b / np.max(np.abs(b))
- printSubTitle("MSE Reference")
- ref = mse(a,b)
- print(ref)
- printSubTitle("MSE f64")
- resf64= dsp.arm_mse_f64(a,b)
- print(resf64)
- print(np.isclose(ref,resf64,1e-14,1e-14))
- printSubTitle("MSE f32")
- resf32 = dsp.arm_mse_f32(a,b)
- print(resf32)
- print(np.isclose(ref,resf32,1e-7,1e-7))
- printSubTitle("MSE Q31")
- aQ31 = f.toQ31(a)
- bQ31 = f.toQ31(b)
- resQ31 = f.Q31toF32(dsp.arm_mse_q31(aQ31,bQ31))
- print(resQ31)
- print(np.isclose(ref,resQ31,1e-7,1e-7))
- aQ15 = f.toQ15(a)
- bQ15 = f.toQ15(b)
- printSubTitle("MSE Q15")
- resQ15 = dsp.arm_mse_q15(aQ15,bQ15)
- print("%04X" % resQ15)
- resQ15 = f.Q15toF32(resQ15)
- print(resQ15)
- print(np.isclose(ref,resQ15,1e-4,1e-4))
- aQ7 = f.toQ7(a)
- bQ7 = f.toQ7(b)
- printSubTitle("MSE Q7")
- resQ7 = dsp.arm_mse_q7(aQ7,bQ7)
- print("%04X" % resQ7)
- resQ7 = f.Q7toF32(resQ7)
- print(resQ7)
- print(np.isclose(ref,resQ7,1e-2,1e-2))
|