Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Drivers/CMSIS/DSP/PythonWrapper/testdsp.py')
-rw-r--r--Drivers/CMSIS/DSP/PythonWrapper/testdsp.py363
1 files changed, 363 insertions, 0 deletions
diff --git a/Drivers/CMSIS/DSP/PythonWrapper/testdsp.py b/Drivers/CMSIS/DSP/PythonWrapper/testdsp.py
new file mode 100644
index 000000000..77086c7c5
--- /dev/null
+++ b/Drivers/CMSIS/DSP/PythonWrapper/testdsp.py
@@ -0,0 +1,363 @@
+import cmsisdsp as dsp
+import numpy as np
+from scipy import signal
+#import matplotlib.pyplot as plt
+#from scipy.fftpack import dct
+
+#r = dsp.arm_add_f32(np.array([1.,2,3]),np.array([4.,5,7]))
+#print(r)
+
+#r = dsp.arm_add_q31([1,2,3],[4,5,7])
+#print(r)
+#
+#r = dsp.arm_add_q15([1,2,3],[4,5,7])
+#print(r)
+#
+#r = dsp.arm_add_q7([-1,2,3],[4,127,7])
+#print(r)
+#
+#r = dsp.arm_scale_f32([1.,2,3],2)
+#print(r)
+#
+#r = dsp.arm_scale_q31([0x7FFF,0x3FFF,0x1FFF],1 << 20,2)
+#print(r)
+#
+#r = dsp.arm_scale_q15([0x7FFF,0x3FFF,0x1FFF],1 << 10,2)
+#print(r)
+#
+#r = dsp.arm_scale_q7([0x7F,0x3F,0x1F],1 << 5,2)
+#print(r)
+#
+#
+#r = dsp.arm_negate_f32([1.,2,3])
+#print(r)
+#
+#r = dsp.arm_negate_q31([1,2,3])
+#print(r)
+#
+#r = dsp.arm_negate_q15([1,2,3])
+#print(r)
+#
+#r = dsp.arm_negate_q7(np.array([0x80,0x81,0x82]))
+#print(r)
+
+#r = dsp.arm_cmplx_conj_f32([1.,2,3,4])
+#print(r)
+
+#r = dsp.arm_cmplx_conj_q31([1,2,3,4])
+#print(r)
+
+#r = dsp.arm_cmplx_conj_q15([1,2,3,4])
+#print(r)
+
+#r = dsp.arm_cmplx_dot_prod_f32([1.,2,3,4],[1.,2,3,4])
+#print(r)
+
+#r = dsp.arm_cmplx_dot_prod_q31([0x1FFF,0x3FFF,0x1FFF,0x3FFF],[0x1FFF,0x3FFF,0x1FFF,0x3FFF])
+#print(r)
+
+#r = dsp.arm_cmplx_mult_real_f32([1.0,2,3,4],[5.,5.,5.,5.])
+#print(r)
+
+#pidf32 = dsp.arm_pid_instance_f32(Kp=1.0,Ki=1.2,Kd=0.4)
+#print(pidf32.Kp())
+#print(pidf32.Ki())
+#print(pidf32.Kd())
+#print(pidf32.A0())
+#
+#dsp.arm_pid_init_f32(pidf32,0)
+#print(pidf32.A0())
+
+#print(dsp.arm_cos_f32(3.14/4.))
+
+#print(dsp.arm_sqrt_q31(0x7FFF))
+
+firf32 = dsp.arm_fir_instance_f32()
+dsp.arm_fir_init_f32(firf32,3,[1.,2,3],[0,0,0,0,0,0,0])
+print(firf32.numTaps())
+filtered_x = signal.lfilter([3,2,1.], 1.0, [1,2,3,4,5,1,2,3,4,5])
+print(filtered_x)
+print(dsp.arm_fir_f32(firf32,[1,2,3,4,5]))
+print(dsp.arm_fir_f32(firf32,[1,2,3,4,5]))
+
+def q31sat(x):
+ if x > 0x7FFFFFFF:
+ return(np.int32(0x7FFFFFFF))
+ elif x < -0x80000000:
+ return(np.int32(0x80000000))
+ else:
+ return(np.int32(x))
+
+q31satV=np.vectorize(q31sat)
+
+def toQ31(x):
+ return(q31satV(np.round(x * (1<<31))))
+
+def q15sat(x):
+ if x > 0x7FFF:
+ return(np.int16(0x7FFF))
+ elif x < -0x8000:
+ return(np.int16(0x8000))
+ else:
+ return(np.int16(x))
+
+q15satV=np.vectorize(q15sat)
+
+def toQ15(x):
+ return(q15satV(np.round(x * (1<<15))))
+
+def q7sat(x):
+ if x > 0x7F:
+ return(np.int8(0x7F))
+ elif x < -0x80:
+ return(np.int8(0x80))
+ else:
+ return(np.int8(x))
+
+q7satV=np.vectorize(q7sat)
+
+def toQ7(x):
+ return(q7satV(np.round(x * (1<<7))))
+
+def Q31toF32(x):
+ return(1.0*x / 2**31)
+
+def Q15toF32(x):
+ return(1.0*x / 2**15)
+
+def Q7toF32(x):
+ return(1.0*x / 2**7)
+
+#firq31 = dsp.arm_fir_instance_q31()
+#x=np.array([1,2,3,4,5])/10.0
+#taps=np.array([1,2,3])/10.0
+#xQ31=toQ31(x)
+#tapsQ31=toQ31(taps)
+#dsp.arm_fir_init_q31(firq31,3,tapsQ31,[0,0,0,0,0,0,0])
+#print(firq31.numTaps())
+#resultQ31=dsp.arm_fir_q31(firq31,xQ31)
+#result=Q31toF32(resultQ31)
+#print(result)
+
+#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
+#b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]])
+#print(a+b)
+#v=dsp.arm_mat_add_f32(a,b)
+#print(v)
+
+#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
+#b=np.array([[1.,2,3],[5.1,6,7],[9.1,10,11],[5,8,4]])
+#print(np.dot(a , b))
+#v=dsp.arm_mat_mult_f32(a,b)
+#print(v)
+
+def imToReal2D(a):
+ ar=np.zeros(np.array(a.shape) * [1,2])
+ ar[::,0::2]=a.real
+ ar[::,1::2]=a.imag
+ return(ar)
+
+def realToIm2D(ar):
+ return(ar[::,0::2] + 1j * ar[::,1::2])
+
+#a=np.array([[1. + 2j,3 + 4j],[5 + 6j,7 + 8j],[9 + 10j,11 + 12j]])
+#b=np.array([[1. + 2j, 3 + 5.1j ,6 + 7j],[9.1 + 10j,11 + 5j,8 +4j]])
+#print(np.dot(a , b))
+#
+# Convert complex array to real array for use in CMSIS DSP
+#ar = imToReal2D(a)
+#br = imToReal2D(b)
+#
+#v=dsp.arm_mat_cmplx_mult_f32(ar,br)
+#print(v)
+
+#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) / 30.0
+#b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]]) / 30.0
+#print(a+b)
+#
+#aQ31=toQ31(a)
+#bQ31=toQ31(b)
+#v=dsp.arm_mat_add_q31(aQ31,bQ31)
+#rQ31=v[1]
+#r=Q31toF32(rQ31)
+#print(r)#
+
+#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
+#print(np.transpose(a))
+#print(dsp.arm_mat_trans_f32(a))
+
+#a = np.array([[1., 2.], [3., 4.]])
+#print(np.linalg.inv(a))
+#print(dsp.arm_mat_inverse_f32(a))
+
+#a = np.array([[1., 2.], [3., 4.]])
+#print(np.linalg.inv(a))
+#print(dsp.arm_mat_inverse_f64(a))
+
+#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
+#print(2.5*a)
+#print(dsp.arm_mat_scale_f32(a,2.5))
+
+#a=np.array([1.,2,3,4,5,6,7,8,9,10,11,12])
+#print(np.max(a))
+#print(np.argmax(a))
+#print(dsp.arm_max_f32(a))
+#
+#print(np.mean(a))
+#print(dsp.arm_mean_f32(a))
+#
+#print(np.dot(a,a))
+#print(dsp.arm_power_f32(a))
+#
+
+def imToReal1D(a):
+ ar=np.zeros(np.array(a.shape) * 2)
+ ar[0::2]=a.real
+ ar[1::2]=a.imag
+ return(ar)
+
+def realToIm1D(ar):
+ return(ar[0::2] + 1j * ar[1::2])
+
+#nb = 16
+#signal = np.cos(2 * np.pi * np.arange(nb) / nb)
+
+#result=np.fft.fft(signal)
+#print(result)
+#signalR = imToReal1D(signal)
+#cfftf32=dsp.arm_cfft_instance_f32()
+#status=dsp.arm_cfft_init_f32(cfftf32,nb)
+#print(status)
+#resultR = dsp.arm_cfft_f32(cfftf32,signalR,0,1)
+#resultI = realToIm1D(resultR)
+#print(resultI)
+
+#signal = signal / 10.0
+#result=np.fft.fft(signal)
+#print(result)
+#
+#signalR = imToReal1D(signal)
+#signalRQ31=toQ31(signalR)
+#cfftq31=dsp.arm_cfft_instance_q31()
+#status=dsp.arm_cfft_init_q31(cfftq31,nb)
+#print(status)
+#resultR = dsp.arm_cfft_q31(cfftq31,signalRQ31,0,1)
+#resultI = realToIm1D(Q31toF32(resultR))*16
+#print(resultI)
+
+#signal = signal / 10.0
+#result=np.fft.fft(signal)
+#print(result)
+##
+#signalR = imToReal1D(signal)
+#signalRQ15=toQ15(signalR)
+#cfftq15=dsp.arm_cfft_instance_q15()
+#status=dsp.arm_cfft_init_q15(cfftq15,nb)
+#print(status)
+#resultR = dsp.arm_cfft_q15(cfftq15,signalRQ15,0,1)
+#resultR=Q15toF32(resultR)
+#resultI = realToIm1D(resultR)*16
+#print(resultI)
+
+#nb = 128
+#signal = np.cos(2 * np.pi * np.arange(nb) / nb)
+#
+#result=np.fft.fft(signal)
+##print(result)
+#cfftradix4f32=dsp.arm_cfft_radix4_instance_f32()
+#rfftf32=dsp.arm_rfft_instance_f32()
+#status=dsp.arm_rfft_init_f32(rfftf32,cfftradix4f32,nb,0,1)
+#print(status)
+#resultI = dsp.arm_rfft_f32(rfftf32,signal)
+#print(result)
+
+#nb = 128
+#signal = np.cos(2 * np.pi * np.arange(nb) / nb)
+#signalRQ31=toQ31(signal)
+#
+#result=np.fft.fft(signal)
+##print(result)
+#rfftq31=dsp.arm_rfft_instance_q31()
+#status=dsp.arm_rfft_init_q31(rfftq31,nb,0,1)
+#print(status)
+#resultI = dsp.arm_rfft_q31(rfftq31,signalRQ31)
+#resultI=Q31toF32(resultI)*(1 << 7)
+##print(result)
+
+#nb = 128
+#signal = np.cos(2 * np.pi * np.arange(nb) / nb)
+#signalRQ15=toQ15(signal)
+#
+#result=np.fft.fft(signal)
+##print(result)
+#rfftq15=dsp.arm_rfft_instance_q15()
+#status=dsp.arm_rfft_init_q15(rfftq15,nb,0,1)
+#print(status)
+#resultI = dsp.arm_rfft_q15(rfftq15,signalRQ15)
+#resultI=Q15toF32(resultI)*(1 << 7)
+#print(result)
+
+
+#nb = 128
+#nb2=64
+#signal = np.cos(2 * np.pi * np.arange(nb) / nb)
+#result=dct(signal,4,norm='ortho')
+##print(result)
+
+#cfftradix4f32=dsp.arm_cfft_radix4_instance_f32()
+#rfftf32=dsp.arm_rfft_instance_f32()
+#dct4f32=dsp.arm_dct4_instance_f32()
+#status=dsp.arm_dct4_init_f32(dct4f32,rfftf32,cfftradix4f32,nb,nb2,0.125)
+#print(status)
+#state=np.zeros(2*nb)
+#resultI = dsp.arm_dct4_f32(dct4f32,state,signal)
+##print(resultI)
+
+
+#signal = signal / 10.0
+#result=dct(signal,4,norm='ortho')
+#signalQ31=toQ31(signal)
+#cfftradix4q31=dsp.arm_cfft_radix4_instance_q31()
+#rfftq31=dsp.arm_rfft_instance_q31()
+#dct4q31=dsp.arm_dct4_instance_q31()
+#status=dsp.arm_dct4_init_q31(dct4q31,rfftq31,cfftradix4q31,nb,nb2,0x10000000)
+#print(status)
+#state=np.zeros(2*nb)
+#resultI = dsp.arm_dct4_q31(dct4q31,state,signalQ31)
+#resultI=Q31toF32(resultI)*(1 << 7)
+
+#nb = 128
+#nb2=64
+#signal = np.cos(2 * np.pi * np.arange(nb) / nb)
+#signal = signal / 10.0
+#result=dct(signal,4,norm='ortho')
+#signalQ15=toQ15(signal)
+#cfftradix4q15=dsp.arm_cfft_radix4_instance_q15()
+#rfftq15=dsp.arm_rfft_instance_q15()
+#dct4q15=dsp.arm_dct4_instance_q15()
+#status=dsp.arm_dct4_init_q15(dct4q15,rfftq15,cfftradix4q15,nb,nb2,0x1000)
+#print(status)
+#state=np.zeros(2*nb)
+#resultI = dsp.arm_dct4_q15(dct4q15,state,signalQ15)
+#resultI=Q15toF32(resultI)*(1 << 7)
+#
+#
+#from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show
+#figure(1)
+#plot(np.absolute(signal))
+#t = np.arange(nb)
+#freq = np.fft.fftfreq(t.shape[-1])
+#resultmag=np.absolute(result)
+#figure(2)
+#plot(resultmag)
+#figure(3)
+#cmsigmag=np.absolute(resultI)
+#plot(cmsigmag)
+#show()##
+
+#biquadf32 = dsp.arm_biquad_casd_df1_inst_f32()
+#numStages=1
+#state=np.zeros(numStages*4)
+#coefs=[1.,2,3,4,5]
+#dsp.arm_biquad_cascade_df1_init_f32(biquadf32,1,coefs,state)
+#print(dsp.arm_biquad_cascade_df1_f32(biquadf32,[1,2,3,4,5]))# \ No newline at end of file