diff options
Diffstat (limited to 'DSP/PythonWrapper/testdsp.py')
-rw-r--r-- | DSP/PythonWrapper/testdsp.py | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/DSP/PythonWrapper/testdsp.py b/DSP/PythonWrapper/testdsp.py new file mode 100644 index 0000000..77086c7 --- /dev/null +++ b/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 |