example_1_10.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. # Bug corrections for version 1.9
  2. import cmsisdsp as dsp
  3. import cmsisdsp.fixedpoint as f
  4. import numpy as np
  5. import math
  6. import colorama
  7. from colorama import init,Fore, Back, Style
  8. from numpy.testing import assert_allclose
  9. import matplotlib.pyplot as plt
  10. from scipy import signal
  11. import scipy.signal.windows as win
  12. init()
  13. def printTitle(s):
  14. print("\n" + Fore.GREEN + Style.BRIGHT + s + Style.RESET_ALL)
  15. def printSubTitle(s):
  16. print("\n" + Style.BRIGHT + s + Style.RESET_ALL)
  17. def genwelch(n):
  18. ik = 2*np.array(range(n)) / n
  19. w = ik -1;
  20. w = 1 - w**2
  21. if len(w)!=n:
  22. print("Error with window len in Welch")
  23. exit(1)
  24. return(w)
  25. def genbartlett(n):
  26. w = win.bartlett(n,sym=False)
  27. return(w)
  28. def genhamming(n):
  29. w = win.hamming(n,sym=False)
  30. return(w)
  31. def genhanning(n):
  32. w = win.hann(n,sym=False)
  33. return(w)
  34. def gennuttall3(n):
  35. w = win.general_cosine(n,
  36. [0.375, 0.5 , 0.125 ],sym=False)
  37. return(w)
  38. def gennuttall4(n):
  39. w = win.general_cosine(n,
  40. [0.3125, 0.46875,0.1875 , 0.03125],sym=False)
  41. return(w)
  42. def gennuttall3a(n):
  43. w = win.general_cosine(n,
  44. [0.40897, 0.5 ,0.09103],sym=False)
  45. return(w)
  46. def gennuttall3b(n):
  47. w = win.general_cosine(n,
  48. [0.4243801, 0.4973406 , 0.0782793 ],sym=False)
  49. return(w)
  50. def gennuttall4a(n):
  51. w = win.general_cosine(n,
  52. [0.338946, 0.481973,0.161054 , 0.018027 ],sym=False)
  53. return(w)
  54. def genblackman_harris_92db(n):
  55. w = win.blackmanharris(n,sym=False)
  56. return(w)
  57. def gennuttall4b(n):
  58. w = win.general_cosine(n,
  59. [0.355768, 0.487396 ,
  60. 0.144232 , 0.012604 ],sym=False)
  61. return(w)
  62. def gennuttall4c(n):
  63. w = win.nuttall(n,sym=False)
  64. return(w)
  65. def genhft90d(n):
  66. w = win.general_cosine(n,
  67. [1 ,1.942604 ,
  68. 1.340318 , 0.440811 , 0.043097 ],sym=False)
  69. return(w)
  70. def genhft95(n):
  71. w = win.general_cosine(n,
  72. [1, 1.9383379 ,
  73. 1.3045202 ,0.4028270 ,0.0350665 ]
  74. ,sym=False)
  75. return(w)
  76. def genhft116d(n):
  77. w = win.general_cosine(n,
  78. [1, 1.9575375 ,
  79. 1.4780705 ,0.6367431 ,
  80. 0.1228389 ,0.0066288 ]
  81. ,sym=False)
  82. return(w)
  83. def genhft144d(n):
  84. w = win.general_cosine(n,
  85. [1 ,1.96760033 ,
  86. 1.57983607 , 0.81123644 ,
  87. 0.22583558 ,0.02773848 , 0.00090360 ]
  88. ,sym=False)
  89. return(w)
  90. def genhft169d(n):
  91. w = win.general_cosine(n,
  92. [1, 1.97441843 ,
  93. 1.65409889 , 0.95788187 ,
  94. 0.33673420 , 0.06364622 ,
  95. 0.00521942 ,0.00010599 ]
  96. ,sym=False)
  97. return(w)
  98. def genhft196d(n):
  99. w = win.general_cosine(n,
  100. [1, 1.979280420 ,
  101. 1.710288951 , 1.081629853 ,
  102. 0.448734314 , 0.112376628 ,
  103. 0.015122992 ,0.000871252 , 0.000011896 ]
  104. ,sym=False)
  105. return(w)
  106. def genhft223d(n):
  107. w = win.general_cosine(n,
  108. [1, 1.98298997309,
  109. 1.75556083063 , 1.19037717712 ,
  110. 0.56155440797 , 0.17296769663 ,
  111. 0.03233247087 ,0.00324954578 ,
  112. 0.00013801040 ,0.00000132725 ]
  113. ,sym=False)
  114. return(w)
  115. def genhft248d(n):
  116. w = win.general_cosine(n,
  117. [1, 1.985844164102 ,
  118. 1.791176438506 , 1.282075284005 ,
  119. 0.667777530266 , 0.240160796576 ,
  120. 0.056656381764 ,0.008134974479 ,
  121. 0.000624544650 ,0.000019808998 ,
  122. 0.000000132974 ]
  123. ,sym=False)
  124. return(w)
  125. printTitle("Regular windows")
  126. printSubTitle("Welch")
  127. ref = genwelch(128)
  128. wf32 = dsp.arm_welch_f32(128)
  129. assert_allclose(ref,wf32)
  130. wf64 = dsp.arm_welch_f64(128)
  131. assert_allclose(ref,wf64)
  132. printSubTitle("Bartlett")
  133. ref = genbartlett(128)
  134. wf32 = dsp.arm_bartlett_f32(128)
  135. assert_allclose(ref,wf32)
  136. wf64 = dsp.arm_bartlett_f64(128)
  137. assert_allclose(ref,wf64)
  138. printSubTitle("Hamming")
  139. ref = genhamming(128)
  140. wf32 = dsp.arm_hamming_f32(128)
  141. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  142. wf64 = dsp.arm_hamming_f64(128)
  143. assert_allclose(ref,wf64)
  144. printSubTitle("Hanning")
  145. ref = genhanning(128)
  146. wf32 = dsp.arm_hanning_f32(128)
  147. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  148. wf64 = dsp.arm_hanning_f64(128)
  149. assert_allclose(ref,wf64)
  150. printSubTitle("Nuttall3")
  151. ref = gennuttall3(128)
  152. wf32 = dsp.arm_nuttall3_f32(128)
  153. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  154. wf64 = dsp.arm_nuttall3_f64(128)
  155. assert_allclose(ref,wf64)
  156. printSubTitle("Nuttall4")
  157. ref = gennuttall4(128)
  158. wf32 = dsp.arm_nuttall4_f32(128)
  159. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  160. wf64 = dsp.arm_nuttall4_f64(128)
  161. assert_allclose(ref,wf64)
  162. printSubTitle("Nuttall3a")
  163. ref = gennuttall3a(128)
  164. wf32 = dsp.arm_nuttall3a_f32(128)
  165. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  166. wf64 = dsp.arm_nuttall3a_f64(128)
  167. assert_allclose(ref,wf64)
  168. printSubTitle("Nuttall3b")
  169. ref = gennuttall3b(128)
  170. wf32 = dsp.arm_nuttall3b_f32(128)
  171. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  172. wf64 = dsp.arm_nuttall3b_f64(128)
  173. assert_allclose(ref,wf64)
  174. printSubTitle("Nuttall4a")
  175. ref = gennuttall4a(128)
  176. wf32 = dsp.arm_nuttall4a_f32(128)
  177. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  178. wf64 = dsp.arm_nuttall4a_f64(128)
  179. assert_allclose(ref,wf64)
  180. printSubTitle("Blackman Harris")
  181. ref = genblackman_harris_92db(128)
  182. wf32 = dsp.arm_blackman_harris_92db_f32(128)
  183. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  184. wf64 = dsp.arm_blackman_harris_92db_f64(128)
  185. assert_allclose(ref,wf64)
  186. printSubTitle("Nuttall4b")
  187. ref = gennuttall4b(128)
  188. wf32 = dsp.arm_nuttall4b_f32(128)
  189. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  190. wf64 = dsp.arm_nuttall4b_f64(128)
  191. assert_allclose(ref,wf64)
  192. printSubTitle("Nuttall4c")
  193. ref = gennuttall4c(128)
  194. wf32 = dsp.arm_nuttall4c_f32(128)
  195. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  196. wf64 = dsp.arm_nuttall4c_f64(128)
  197. assert_allclose(ref,wf64)
  198. printTitle("Flat-top windows")
  199. printSubTitle("HFT90D")
  200. ref = genhft90d(128)
  201. wf32 = dsp.arm_hft90d_f32(128)
  202. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  203. wf64 = dsp.arm_hft90d_f64(128)
  204. assert_allclose(ref,wf64)
  205. printSubTitle("HFT95")
  206. ref = genhft95(128)
  207. wf32 = dsp.arm_hft95_f32(128)
  208. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  209. wf64 = dsp.arm_hft95_f64(128)
  210. assert_allclose(ref,wf64)
  211. printSubTitle("HFT116D")
  212. ref = genhft116d(128)
  213. wf32 = dsp.arm_hft116d_f32(128)
  214. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  215. wf64 = dsp.arm_hft116d_f64(128)
  216. assert_allclose(ref,wf64)
  217. printSubTitle("HFT144D")
  218. ref = genhft144d(128)
  219. wf32 = dsp.arm_hft144d_f32(128)
  220. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  221. wf64 = dsp.arm_hft144d_f64(128)
  222. assert_allclose(ref,wf64)
  223. printSubTitle("HFT196D")
  224. ref = genhft196d(128)
  225. wf32 = dsp.arm_hft196d_f32(128)
  226. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  227. wf64 = dsp.arm_hft196d_f64(128)
  228. assert_allclose(ref,wf64)
  229. printSubTitle("HFT223D")
  230. ref = genhft223d(128)
  231. wf32 = dsp.arm_hft223d_f32(128)
  232. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  233. wf64 = dsp.arm_hft223d_f64(128)
  234. assert_allclose(ref,wf64)
  235. printSubTitle("HFT248D")
  236. ref = genhft248d(128)
  237. wf32 = dsp.arm_hft248d_f32(128)
  238. assert_allclose(ref,wf32,rtol=1e-6,atol=2e-6)
  239. wf64 = dsp.arm_hft248d_f64(128)
  240. assert_allclose(ref,wf64,rtol=3e-15,atol=3e-15)