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