testdsp.py 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. import cmsisdsp as dsp
  2. import numpy as np
  3. from scipy import signal
  4. #import matplotlib.pyplot as plt
  5. #from scipy.fftpack import dct
  6. #r = dsp.arm_add_f32(np.array([1.,2,3]),np.array([4.,5,7]))
  7. #print(r)
  8. #r = dsp.arm_add_q31([1,2,3],[4,5,7])
  9. #print(r)
  10. #
  11. #r = dsp.arm_add_q15([1,2,3],[4,5,7])
  12. #print(r)
  13. #
  14. #r = dsp.arm_add_q7([-1,2,3],[4,127,7])
  15. #print(r)
  16. #
  17. #r = dsp.arm_scale_f32([1.,2,3],2)
  18. #print(r)
  19. #
  20. #r = dsp.arm_scale_q31([0x7FFF,0x3FFF,0x1FFF],1 << 20,2)
  21. #print(r)
  22. #
  23. #r = dsp.arm_scale_q15([0x7FFF,0x3FFF,0x1FFF],1 << 10,2)
  24. #print(r)
  25. #
  26. #r = dsp.arm_scale_q7([0x7F,0x3F,0x1F],1 << 5,2)
  27. #print(r)
  28. #
  29. #
  30. #r = dsp.arm_negate_f32([1.,2,3])
  31. #print(r)
  32. #
  33. #r = dsp.arm_negate_q31([1,2,3])
  34. #print(r)
  35. #
  36. #r = dsp.arm_negate_q15([1,2,3])
  37. #print(r)
  38. #
  39. #r = dsp.arm_negate_q7(np.array([0x80,0x81,0x82]))
  40. #print(r)
  41. #r = dsp.arm_cmplx_conj_f32([1.,2,3,4])
  42. #print(r)
  43. #r = dsp.arm_cmplx_conj_q31([1,2,3,4])
  44. #print(r)
  45. #r = dsp.arm_cmplx_conj_q15([1,2,3,4])
  46. #print(r)
  47. #r = dsp.arm_cmplx_dot_prod_f32([1.,2,3,4],[1.,2,3,4])
  48. #print(r)
  49. #r = dsp.arm_cmplx_dot_prod_q31([0x1FFF,0x3FFF,0x1FFF,0x3FFF],[0x1FFF,0x3FFF,0x1FFF,0x3FFF])
  50. #print(r)
  51. #r = dsp.arm_cmplx_mult_real_f32([1.0,2,3,4],[5.,5.,5.,5.])
  52. #print(r)
  53. #pidf32 = dsp.arm_pid_instance_f32(Kp=1.0,Ki=1.2,Kd=0.4)
  54. #print(pidf32.Kp())
  55. #print(pidf32.Ki())
  56. #print(pidf32.Kd())
  57. #print(pidf32.A0())
  58. #
  59. #dsp.arm_pid_init_f32(pidf32,0)
  60. #print(pidf32.A0())
  61. #print(dsp.arm_cos_f32(3.14/4.))
  62. #print(dsp.arm_sqrt_q31(0x7FFF))
  63. firf32 = dsp.arm_fir_instance_f32()
  64. dsp.arm_fir_init_f32(firf32,3,[1.,2,3],[0,0,0,0,0,0,0])
  65. print(firf32.numTaps())
  66. filtered_x = signal.lfilter([3,2,1.], 1.0, [1,2,3,4,5,1,2,3,4,5])
  67. print(filtered_x)
  68. print(dsp.arm_fir_f32(firf32,[1,2,3,4,5]))
  69. print(dsp.arm_fir_f32(firf32,[1,2,3,4,5]))
  70. def q31sat(x):
  71. if x > 0x7FFFFFFF:
  72. return(np.int32(0x7FFFFFFF))
  73. elif x < -0x80000000:
  74. return(np.int32(0x80000000))
  75. else:
  76. return(np.int32(x))
  77. q31satV=np.vectorize(q31sat)
  78. def toQ31(x):
  79. return(q31satV(np.round(x * (1<<31))))
  80. def q15sat(x):
  81. if x > 0x7FFF:
  82. return(np.int16(0x7FFF))
  83. elif x < -0x8000:
  84. return(np.int16(0x8000))
  85. else:
  86. return(np.int16(x))
  87. q15satV=np.vectorize(q15sat)
  88. def toQ15(x):
  89. return(q15satV(np.round(x * (1<<15))))
  90. def q7sat(x):
  91. if x > 0x7F:
  92. return(np.int8(0x7F))
  93. elif x < -0x80:
  94. return(np.int8(0x80))
  95. else:
  96. return(np.int8(x))
  97. q7satV=np.vectorize(q7sat)
  98. def toQ7(x):
  99. return(q7satV(np.round(x * (1<<7))))
  100. def Q31toF32(x):
  101. return(1.0*x / 2**31)
  102. def Q15toF32(x):
  103. return(1.0*x / 2**15)
  104. def Q7toF32(x):
  105. return(1.0*x / 2**7)
  106. #firq31 = dsp.arm_fir_instance_q31()
  107. #x=np.array([1,2,3,4,5])/10.0
  108. #taps=np.array([1,2,3])/10.0
  109. #xQ31=toQ31(x)
  110. #tapsQ31=toQ31(taps)
  111. #dsp.arm_fir_init_q31(firq31,3,tapsQ31,[0,0,0,0,0,0,0])
  112. #print(firq31.numTaps())
  113. #resultQ31=dsp.arm_fir_q31(firq31,xQ31)
  114. #result=Q31toF32(resultQ31)
  115. #print(result)
  116. #a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
  117. #b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]])
  118. #print(a+b)
  119. #v=dsp.arm_mat_add_f32(a,b)
  120. #print(v)
  121. #a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
  122. #b=np.array([[1.,2,3],[5.1,6,7],[9.1,10,11],[5,8,4]])
  123. #print(np.dot(a , b))
  124. #v=dsp.arm_mat_mult_f32(a,b)
  125. #print(v)
  126. def imToReal2D(a):
  127. ar=np.zeros(np.array(a.shape) * [1,2])
  128. ar[::,0::2]=a.real
  129. ar[::,1::2]=a.imag
  130. return(ar)
  131. def realToIm2D(ar):
  132. return(ar[::,0::2] + 1j * ar[::,1::2])
  133. #a=np.array([[1. + 2j,3 + 4j],[5 + 6j,7 + 8j],[9 + 10j,11 + 12j]])
  134. #b=np.array([[1. + 2j, 3 + 5.1j ,6 + 7j],[9.1 + 10j,11 + 5j,8 +4j]])
  135. #print(np.dot(a , b))
  136. #
  137. # Convert complex array to real array for use in CMSIS DSP
  138. #ar = imToReal2D(a)
  139. #br = imToReal2D(b)
  140. #
  141. #v=dsp.arm_mat_cmplx_mult_f32(ar,br)
  142. #print(v)
  143. #a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) / 30.0
  144. #b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]]) / 30.0
  145. #print(a+b)
  146. #
  147. #aQ31=toQ31(a)
  148. #bQ31=toQ31(b)
  149. #v=dsp.arm_mat_add_q31(aQ31,bQ31)
  150. #rQ31=v[1]
  151. #r=Q31toF32(rQ31)
  152. #print(r)#
  153. #a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
  154. #print(np.transpose(a))
  155. #print(dsp.arm_mat_trans_f32(a))
  156. #a = np.array([[1., 2.], [3., 4.]])
  157. #print(np.linalg.inv(a))
  158. #print(dsp.arm_mat_inverse_f32(a))
  159. #a = np.array([[1., 2.], [3., 4.]])
  160. #print(np.linalg.inv(a))
  161. #print(dsp.arm_mat_inverse_f64(a))
  162. #a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]])
  163. #print(2.5*a)
  164. #print(dsp.arm_mat_scale_f32(a,2.5))
  165. #a=np.array([1.,2,3,4,5,6,7,8,9,10,11,12])
  166. #print(np.max(a))
  167. #print(np.argmax(a))
  168. #print(dsp.arm_max_f32(a))
  169. #
  170. #print(np.mean(a))
  171. #print(dsp.arm_mean_f32(a))
  172. #
  173. #print(np.dot(a,a))
  174. #print(dsp.arm_power_f32(a))
  175. #
  176. def imToReal1D(a):
  177. ar=np.zeros(np.array(a.shape) * 2)
  178. ar[0::2]=a.real
  179. ar[1::2]=a.imag
  180. return(ar)
  181. def realToIm1D(ar):
  182. return(ar[0::2] + 1j * ar[1::2])
  183. #nb = 16
  184. #signal = np.cos(2 * np.pi * np.arange(nb) / nb)
  185. #result=np.fft.fft(signal)
  186. #print(result)
  187. #signalR = imToReal1D(signal)
  188. #cfftf32=dsp.arm_cfft_instance_f32()
  189. #status=dsp.arm_cfft_init_f32(cfftf32,nb)
  190. #print(status)
  191. #resultR = dsp.arm_cfft_f32(cfftf32,signalR,0,1)
  192. #resultI = realToIm1D(resultR)
  193. #print(resultI)
  194. #signal = signal / 10.0
  195. #result=np.fft.fft(signal)
  196. #print(result)
  197. #
  198. #signalR = imToReal1D(signal)
  199. #signalRQ31=toQ31(signalR)
  200. #cfftq31=dsp.arm_cfft_instance_q31()
  201. #status=dsp.arm_cfft_init_q31(cfftq31,nb)
  202. #print(status)
  203. #resultR = dsp.arm_cfft_q31(cfftq31,signalRQ31,0,1)
  204. #resultI = realToIm1D(Q31toF32(resultR))*16
  205. #print(resultI)
  206. #signal = signal / 10.0
  207. #result=np.fft.fft(signal)
  208. #print(result)
  209. ##
  210. #signalR = imToReal1D(signal)
  211. #signalRQ15=toQ15(signalR)
  212. #cfftq15=dsp.arm_cfft_instance_q15()
  213. #status=dsp.arm_cfft_init_q15(cfftq15,nb)
  214. #print(status)
  215. #resultR = dsp.arm_cfft_q15(cfftq15,signalRQ15,0,1)
  216. #resultR=Q15toF32(resultR)
  217. #resultI = realToIm1D(resultR)*16
  218. #print(resultI)
  219. #nb = 128
  220. #signal = np.cos(2 * np.pi * np.arange(nb) / nb)
  221. #
  222. #result=np.fft.fft(signal)
  223. ##print(result)
  224. #cfftradix4f32=dsp.arm_cfft_radix4_instance_f32()
  225. #rfftf32=dsp.arm_rfft_instance_f32()
  226. #status=dsp.arm_rfft_init_f32(rfftf32,cfftradix4f32,nb,0,1)
  227. #print(status)
  228. #resultI = dsp.arm_rfft_f32(rfftf32,signal)
  229. #print(result)
  230. #nb = 128
  231. #signal = np.cos(2 * np.pi * np.arange(nb) / nb)
  232. #signalRQ31=toQ31(signal)
  233. #
  234. #result=np.fft.fft(signal)
  235. ##print(result)
  236. #rfftq31=dsp.arm_rfft_instance_q31()
  237. #status=dsp.arm_rfft_init_q31(rfftq31,nb,0,1)
  238. #print(status)
  239. #resultI = dsp.arm_rfft_q31(rfftq31,signalRQ31)
  240. #resultI=Q31toF32(resultI)*(1 << 7)
  241. ##print(result)
  242. #nb = 128
  243. #signal = np.cos(2 * np.pi * np.arange(nb) / nb)
  244. #signalRQ15=toQ15(signal)
  245. #
  246. #result=np.fft.fft(signal)
  247. ##print(result)
  248. #rfftq15=dsp.arm_rfft_instance_q15()
  249. #status=dsp.arm_rfft_init_q15(rfftq15,nb,0,1)
  250. #print(status)
  251. #resultI = dsp.arm_rfft_q15(rfftq15,signalRQ15)
  252. #resultI=Q15toF32(resultI)*(1 << 7)
  253. #print(result)
  254. #nb = 128
  255. #nb2=64
  256. #signal = np.cos(2 * np.pi * np.arange(nb) / nb)
  257. #result=dct(signal,4,norm='ortho')
  258. ##print(result)
  259. #cfftradix4f32=dsp.arm_cfft_radix4_instance_f32()
  260. #rfftf32=dsp.arm_rfft_instance_f32()
  261. #dct4f32=dsp.arm_dct4_instance_f32()
  262. #status=dsp.arm_dct4_init_f32(dct4f32,rfftf32,cfftradix4f32,nb,nb2,0.125)
  263. #print(status)
  264. #state=np.zeros(2*nb)
  265. #resultI = dsp.arm_dct4_f32(dct4f32,state,signal)
  266. ##print(resultI)
  267. #signal = signal / 10.0
  268. #result=dct(signal,4,norm='ortho')
  269. #signalQ31=toQ31(signal)
  270. #cfftradix4q31=dsp.arm_cfft_radix4_instance_q31()
  271. #rfftq31=dsp.arm_rfft_instance_q31()
  272. #dct4q31=dsp.arm_dct4_instance_q31()
  273. #status=dsp.arm_dct4_init_q31(dct4q31,rfftq31,cfftradix4q31,nb,nb2,0x10000000)
  274. #print(status)
  275. #state=np.zeros(2*nb)
  276. #resultI = dsp.arm_dct4_q31(dct4q31,state,signalQ31)
  277. #resultI=Q31toF32(resultI)*(1 << 7)
  278. #nb = 128
  279. #nb2=64
  280. #signal = np.cos(2 * np.pi * np.arange(nb) / nb)
  281. #signal = signal / 10.0
  282. #result=dct(signal,4,norm='ortho')
  283. #signalQ15=toQ15(signal)
  284. #cfftradix4q15=dsp.arm_cfft_radix4_instance_q15()
  285. #rfftq15=dsp.arm_rfft_instance_q15()
  286. #dct4q15=dsp.arm_dct4_instance_q15()
  287. #status=dsp.arm_dct4_init_q15(dct4q15,rfftq15,cfftradix4q15,nb,nb2,0x1000)
  288. #print(status)
  289. #state=np.zeros(2*nb)
  290. #resultI = dsp.arm_dct4_q15(dct4q15,state,signalQ15)
  291. #resultI=Q15toF32(resultI)*(1 << 7)
  292. #
  293. #
  294. #from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show
  295. #figure(1)
  296. #plot(np.absolute(signal))
  297. #t = np.arange(nb)
  298. #freq = np.fft.fftfreq(t.shape[-1])
  299. #resultmag=np.absolute(result)
  300. #figure(2)
  301. #plot(resultmag)
  302. #figure(3)
  303. #cmsigmag=np.absolute(resultI)
  304. #plot(cmsigmag)
  305. #show()##
  306. #biquadf32 = dsp.arm_biquad_casd_df1_inst_f32()
  307. #numStages=1
  308. #state=np.zeros(numStages*4)
  309. #coefs=[1.,2,3,4,5]
  310. #dsp.arm_biquad_cascade_df1_init_f32(biquadf32,1,coefs,state)
  311. #print(dsp.arm_biquad_cascade_df1_f32(biquadf32,[1,2,3,4,5]))#