1- import time
1+ import utime
22import math
33import ulab
44import ulab .numerical
55
6+ def timeit (f , * args , ** kwargs ):
7+ func_name = str (f ).split (' ' )[1 ]
8+ def new_func (* args , ** kwargs ):
9+ t = utime .ticks_us ()
10+ result = f (* args , ** kwargs )
11+ print ('execution time: ' , utime .ticks_diff (utime .ticks_us (), t ), ' us' )
12+ return result
13+ return new_func
14+
615def mean (values ):
716 return sum (values ) / len (values )
817
18+ @timeit
919def normalized_rms (values ):
1020 minbuf = int (mean (values ))
1121 samples_sum = sum (
@@ -15,26 +25,37 @@ def normalized_rms(values):
1525
1626 return math .sqrt (samples_sum / len (values ))
1727
28+ @timeit
1829def normalized_rms_ulab (values ):
1930 minbuf = ulab .numerical .mean (values )
2031 values = values - minbuf
2132 samples_sum = ulab .numerical .sum (values * values )
2233 return math .sqrt (samples_sum / len (values ))
2334
2435
36+ @timeit
37+ def normalized_std_ulab (values ):
38+ return ulab .numerical .std (values )
39+
40+ @timeit
41+ def normalized_std_ulab_iterable (values ):
42+ return ulab .numerical .std (values )
43+
2544# Instead of using sensor data, we generate some data
2645# The amplitude is 5000 so the rms should be around 5000/1.414 = 3536
2746nums_list = [int (8000 + math .sin (i ) * 5000 ) for i in range (100 )]
2847nums_array = ulab .array (nums_list )
2948
30- def timeit (s , f , n = 100 ):
31- t0 = time .monotonic_ns ()
32- for _ in range (n ):
33- x = f ()
34- t1 = time .monotonic_ns ()
35- r = (t1 - t0 ) * 1e-6 / n
36- print ("%-20s : %8.3fms [result=%f]" % (s , r , x ))
37-
3849print ("Computing the RMS value of 100 numbers" )
39- timeit ("traditional" , lambda : normalized_rms (nums_list ))
40- timeit ("ulab" , lambda : normalized_rms_ulab (nums_array ))
50+
51+ print ('in python' )
52+ normalized_rms (nums_list )
53+
54+ print ('\n in ulab, with some implementation in python' )
55+ normalized_rms_ulab (nums_array )
56+
57+ print ('\n in ulab only, with ndarray' )
58+ normalized_std_ulab (nums_array )
59+
60+ print ('\n in ulab only, with list' )
61+ normalized_std_ulab_iterable (nums_list )
0 commit comments