stm32_ekf_wrapper.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. /**********************************
  2. **********************************/
  3. #include "main.h"
  4. #if defined(MATLAB_MEX_FILE)
  5. #include "tmwtypes.h"
  6. #include "simstruc_types.h"
  7. #else
  8. #include "rtwtypes.h"
  9. #endif
  10. #ifdef SIMULINK_USE_ARM_MATH
  11. #include "arm_math.h"
  12. #else
  13. #include <math.h>
  14. #endif
  15. float Rs;
  16. float Ls;
  17. float flux;
  18. float Q_0_0;
  19. //float Q_0_1;
  20. //float Q_0_2;
  21. //float Q_0_3;
  22. //float Q_1_0;
  23. float Q_1_1;
  24. //float Q_1_2;
  25. //float Q_1_3;
  26. //float Q_2_0;
  27. //float Q_2_1;
  28. float Q_2_2;
  29. //float Q_2_3;
  30. //float Q_3_0;
  31. //float Q_3_1;
  32. //float Q_3_2;
  33. float Q_3_3;
  34. float R_0_0;
  35. //float R_0_1;
  36. //float R_1_0;
  37. float R_1_1;
  38. float T;
  39. float vs_ab_0_0;
  40. float vs_ab_1_0;
  41. float is_ab_0_0;
  42. float is_ab_1_0;
  43. float P0_0_0;
  44. float P0_0_1;
  45. float P0_0_2;
  46. float P0_0_3;
  47. float P0_1_0;
  48. float P0_1_1;
  49. float P0_1_2;
  50. float P0_1_3;
  51. float P0_2_0;
  52. float P0_2_1;
  53. float P0_2_2;
  54. float P0_2_3;
  55. float P0_3_0;
  56. float P0_3_1;
  57. float P0_3_2;
  58. float P0_3_3;
  59. float H_0_0;
  60. //float H_0_1;
  61. //float H_0_2;
  62. //float H_0_3;
  63. //float H_1_0;
  64. float H_1_1;
  65. //float H_1_2;
  66. //float H_1_3;
  67. float B_0_0;
  68. //float B_0_1;
  69. //float B_1_0;
  70. float B_1_1;
  71. //float B_2_0;
  72. //float B_2_1;
  73. //float B_3_0;
  74. //float B_3_1;
  75. float F_0_0;
  76. //float F_0_1;
  77. float F_0_2;
  78. float F_0_3;
  79. //float F_1_0;
  80. float F_1_1;
  81. float F_1_2;
  82. float F_1_3;
  83. //float F_2_0;
  84. //float F_2_1;
  85. //float F_2_2;
  86. //float F_2_3;
  87. //float F_3_0;
  88. //float F_3_1;
  89. float F_3_2;
  90. //float F_3_3;
  91. float temp_0_0;
  92. float temp_0_1;
  93. float temp_0_2;
  94. float temp_0_3;
  95. float temp_1_0;
  96. float temp_1_1;
  97. float temp_1_2;
  98. float temp_1_3;
  99. float temp_2_0;
  100. float temp_2_1;
  101. float temp_2_2;
  102. float temp_2_3;
  103. float temp_3_0;
  104. float temp_3_1;
  105. float temp_3_2;
  106. float temp_3_3;
  107. float f1_0_0;
  108. float f1_1_0;
  109. float f1_2_0;
  110. float f1_3_0;
  111. float f2_0_0;
  112. //float f2_0_1;
  113. float f2_0_2;
  114. float f2_0_3;
  115. //float f2_1_0;
  116. float f2_1_1;
  117. float f2_1_2;
  118. float f2_1_3;
  119. //float f2_2_0;
  120. //float f2_2_1;
  121. float f2_2_2;
  122. //float f2_2_3;
  123. //float f2_3_0;
  124. //float f2_3_1;
  125. float f2_3_2;
  126. float f2_3_3;
  127. float X_pred_0_0;
  128. float X_pred_1_0;
  129. float X_pred_2_0;
  130. float X_pred_3_0;
  131. float Y_pred_0_0;
  132. float Y_pred_1_0;
  133. float Y_0_0;
  134. float Y_1_0;
  135. float P_pred_0_0;
  136. float P_pred_0_1;
  137. float P_pred_0_2;
  138. float P_pred_0_3;
  139. float P_pred_1_0;
  140. float P_pred_1_1;
  141. float P_pred_1_2;
  142. float P_pred_1_3;
  143. float P_pred_2_0;
  144. float P_pred_2_1;
  145. float P_pred_2_2;
  146. float P_pred_2_3;
  147. float P_pred_3_0;
  148. float P_pred_3_1;
  149. float P_pred_3_2;
  150. float P_pred_3_3;
  151. float temp_0_0_t;
  152. float temp_0_1_t;
  153. float temp_1_0_t;
  154. float temp_1_1_t;
  155. float temp;
  156. float K_0_0;
  157. float K_0_1;
  158. float K_1_0;
  159. float K_1_1;
  160. float K_2_0;
  161. float K_2_1;
  162. float K_3_0;
  163. float K_3_1;
  164. float tempa_0_0;
  165. float tempa_1_0;
  166. float tempa_2_0;
  167. float tempa_3_0;
  168. #define u_width 7
  169. #define y_width 1
  170. void stm32_ekf_Start_wrapper(real_T *xD)
  171. {
  172. Rs = RS_PARAMETER;
  173. Ls = LS_PARAMETER;
  174. flux = FLUX_PARAMETER;
  175. Q_0_0 = 0.1f;
  176. //Q_0_1 = 0.0f;
  177. //Q_0_2 = 0.0f;
  178. //Q_0_3 = 0.0f;
  179. //Q_1_0 = 0.0f;
  180. Q_1_1 = 0.1f;
  181. //Q_1_2 = 0.0f;
  182. //Q_1_3 = 0.0f;
  183. //Q_2_0 = 0.0f;
  184. //Q_2_1 = 0.0f;
  185. Q_2_2 = 0.1f;
  186. //Q_2_3 = 0.0f;
  187. //Q_3_0 = 0.0f;
  188. //Q_3_1 = 0.0f;
  189. //Q_3_2 = 0.0f;
  190. Q_3_3 = 0.001f;
  191. R_0_0 = 0.2f;
  192. //R_0_1 = 0.0f;
  193. //R_1_0 = 0.0f;
  194. R_1_1 = 0.2f;
  195. T = 0.0001f;
  196. H_0_0 = 1.0f;
  197. //H_0_1 = 0.0f;
  198. //H_0_2 = 0.0f;
  199. //H_0_3 = 0.0f;
  200. //H_1_0 = 0.0f;
  201. H_1_1 = 1.0f;
  202. //H_1_2 = 0.0f;
  203. //H_1_3 = 0.0f;
  204. B_0_0 = 1.0f/Ls;
  205. //B_0_1 = 0.0f;
  206. //B_1_0 = 0.0f;
  207. B_1_1 = 1.0f/Ls;
  208. //B_2_0 = 0.0f;
  209. //B_2_1 = 0.0f;
  210. //B_3_0 = 0.0f;
  211. //B_3_1 = 0.0f;
  212. P0_0_0 = 0.0f;
  213. P0_0_1 = 0.0f;
  214. P0_0_2 = 0.0f;
  215. P0_0_3 = 0.0f;
  216. P0_1_0 = 0.0f;
  217. P0_1_1 = 0.0f;
  218. P0_1_2 = 0.0f;
  219. P0_1_3 = 0.0f;
  220. P0_2_0 = 0.0f;
  221. P0_2_1 = 0.0f;
  222. P0_2_2 = 0.0f;
  223. P0_2_3 = 0.0f;
  224. P0_3_0 = 0.0f;
  225. P0_3_1 = 0.0f;
  226. P0_3_2 = 0.0f;
  227. P0_3_3 = 0.0f;
  228. }
  229. void stm32_ekf_Outputs_wrapper(const real32_T *u,
  230. real32_T *y,
  231. const real_T *xD)
  232. {
  233. y[0] = xD[0];
  234. y[1] = xD[1];
  235. y[2] = xD[2];
  236. y[3] = xD[3];
  237. }
  238. void stm32_ekf_Update_wrapper(const real32_T *u,
  239. real32_T *y,
  240. real_T *xD)
  241. {
  242. vs_ab_0_0 = u[0];
  243. vs_ab_1_0 = u[1];
  244. is_ab_0_0 = u[2];
  245. is_ab_1_0 = u[3];
  246. Rs = u[4];
  247. Ls = u[5];
  248. flux = u[6];
  249. /*
  250. P0_0_0 = xD[4];
  251. P0_0_1 = xD[5];
  252. P0_0_2 = xD[6];
  253. P0_0_3 = xD[7];
  254. P0_1_0 = xD[8];
  255. P0_1_1 = xD[9];
  256. P0_1_2 = xD[10];
  257. P0_1_3 = xD[11];
  258. P0_2_0 = xD[12];
  259. P0_2_1 = xD[13];
  260. P0_2_2 = xD[14];
  261. P0_2_3 = xD[15];
  262. P0_3_0 = xD[16];
  263. P0_3_1 = xD[17];
  264. P0_3_2 = xD[18];
  265. P0_3_3 = xD[19];
  266. */
  267. #ifdef SIMULINK_USE_ARM_MATH
  268. F_0_0 = -Rs/Ls;
  269. //F_0_1 = 0.0f;
  270. F_0_2 = flux/Ls*arm_sin_f32(xD[3]);
  271. F_0_3 = flux/Ls*xD[2]*arm_cos_f32(xD[3]);
  272. //F_1_0 = 0.0f;
  273. F_1_1 = -Rs/Ls;
  274. F_1_2 = -flux/Ls*arm_cos_f32(xD[3]);
  275. F_1_3 = flux/Ls*xD[2]*arm_sin_f32(xD[3]);
  276. //F_2_0 = 0.0f;
  277. //F_2_1 = 0.0f;
  278. //F_2_2 = 0.0f;
  279. //F_2_3 = 0.0f;
  280. //F_3_0 = 0.0f;
  281. //F_3_1 = 0.0f;
  282. F_3_2 = 1.0f;
  283. //F_3_3 = 0.0f;
  284. #else
  285. F_0_0 = -Rs/Ls;
  286. F_0_1 = 0.0f;
  287. F_0_2 = flux/Ls*sin(xD[3]);
  288. F_0_3 = flux/Ls*xD[2]*cos(xD[3]);
  289. F_1_0 = 0.0f;
  290. F_1_1 = -Rs/Ls;
  291. F_1_2 = -flux/Ls*cos(xD[3]);
  292. F_1_3 = flux/Ls*xD[2]*sin(xD[3]);
  293. F_2_0 = 0.0f;
  294. F_2_1 = 0.0f;
  295. F_2_2 = 0.0f;
  296. F_2_3 = 0.0f;
  297. F_3_0 = 0.0f;
  298. F_3_1 = 0.0f;
  299. F_3_2 = 1.0f;
  300. F_3_3 = 0.0f;
  301. #endif
  302. temp_0_0 = 1.0f;
  303. //temp_0_1 = 0.0f;
  304. //temp_0_2 = 0.0f;
  305. //temp_0_3 = 0.0f;
  306. //temp_1_0 = 0.0f;
  307. temp_1_1 = 1.0f;
  308. //temp_1_2 = 0.0f;
  309. //temp_1_3 = 0.0f;
  310. //temp_2_0 = 0.0f;
  311. //temp_2_1 = 0.0f;
  312. temp_2_2 = 1.0f;
  313. //temp_2_3 = 0.0f;
  314. //temp_3_0 = 0.0f;
  315. //temp_3_1 = 0.0f;
  316. //temp_3_2 = 0.0f;
  317. temp_3_3 = 1.0f;
  318. #ifdef SIMULINK_USE_ARM_MATH
  319. f1_0_0 = -Rs/Ls*xD[0]+flux/Ls*xD[2]*arm_sin_f32(xD[3]);
  320. f1_1_0 = -Rs/Ls*xD[1]-flux/Ls*xD[2]*arm_cos_f32(xD[3]);
  321. f1_2_0 = 0.0f;
  322. f1_3_0 = xD[2];
  323. #else
  324. f1_0_0 = -Rs/Ls*xD[0]+flux/Ls*xD[2]*sin(xD[3]);
  325. f1_1_0 = -Rs/Ls*xD[1]-flux/Ls*xD[2]*cos(xD[3]);
  326. f1_2_0 = 0.0f;
  327. f1_3_0 = xD[2];
  328. #endif
  329. f2_0_0 = temp_0_0 + (T*F_0_0);
  330. //f2_0_1 = temp_0_1;
  331. f2_0_2 = (T*F_0_2);
  332. f2_0_3 = (T*F_0_3);
  333. //f2_1_0 = temp_1_0;
  334. f2_1_1 = temp_1_1 + (T*F_1_1);
  335. f2_1_2 = (T*F_1_2);
  336. f2_1_3 = (T*F_1_3);
  337. //f2_2_0 = temp_2_0;
  338. //f2_2_1 = temp_2_1;
  339. f2_2_2 = temp_2_2;
  340. //f2_2_3 = temp_2_3;
  341. //f2_3_0 = temp_3_0;
  342. //f2_3_1 = temp_3_1;
  343. f2_3_2 = (T*F_3_2);
  344. f2_3_3 = temp_3_3;
  345. X_pred_0_0 = xD[0] + T*(f1_0_0 + B_0_0*vs_ab_0_0);
  346. X_pred_1_0 = xD[1] + T*(f1_1_0 + B_1_1*vs_ab_1_0);
  347. X_pred_2_0 = xD[2] + T*(f1_2_0);
  348. X_pred_3_0 = xD[3] + T*(f1_3_0);
  349. Y_pred_0_0 = H_0_0*X_pred_0_0;
  350. Y_pred_1_0 = H_1_1*X_pred_1_0;
  351. Y_0_0 = is_ab_0_0;
  352. Y_1_0 = is_ab_1_0;
  353. P_pred_0_0 = f2_0_0*P0_0_0 + f2_0_2*P0_2_0 + f2_0_3*P0_3_0;
  354. P_pred_0_1 = f2_0_0*P0_0_1 + f2_0_2*P0_2_1 + f2_0_3*P0_3_1;
  355. P_pred_0_2 = f2_0_0*P0_0_2 + f2_0_2*P0_2_2 + f2_0_3*P0_3_2;
  356. P_pred_0_3 = f2_0_0*P0_0_3 + f2_0_2*P0_2_3 + f2_0_3*P0_3_3;
  357. P_pred_1_0 = f2_1_1*P0_1_0 + f2_1_2*P0_2_0 + f2_1_3*P0_3_0;
  358. P_pred_1_1 = f2_1_1*P0_1_1 + f2_1_2*P0_2_1 + f2_1_3*P0_3_1;
  359. P_pred_1_2 = f2_1_1*P0_1_2 + f2_1_2*P0_2_2 + f2_1_3*P0_3_2;
  360. P_pred_1_3 = f2_1_1*P0_1_3 + f2_1_2*P0_2_3 + f2_1_3*P0_3_3;
  361. P_pred_2_0 = f2_2_2*P0_2_0;
  362. P_pred_2_1 = f2_2_2*P0_2_1;
  363. P_pred_2_2 = f2_2_2*P0_2_2;
  364. P_pred_2_3 = f2_2_2*P0_2_3;
  365. P_pred_3_0 = f2_3_2*P0_2_0 + f2_3_3*P0_3_0;
  366. P_pred_3_1 = f2_3_2*P0_2_1 + f2_3_3*P0_3_1;
  367. P_pred_3_2 = f2_3_2*P0_2_2 + f2_3_3*P0_3_2;
  368. P_pred_3_3 = f2_3_2*P0_2_3 + f2_3_3*P0_3_3;
  369. P_pred_0_0 = P_pred_0_0*f2_0_0 + P_pred_0_2*f2_0_2 + P_pred_0_3*f2_0_3 + Q_0_0;
  370. P_pred_0_1 = P_pred_0_1*f2_1_1 + P_pred_0_2*f2_1_2 + P_pred_0_3*f2_1_3;
  371. P_pred_0_2 = P_pred_0_2*f2_2_2;
  372. P_pred_0_3 = P_pred_0_2*f2_3_2 + P_pred_0_3*f2_3_3;
  373. P_pred_1_0 = P_pred_1_0*f2_0_0 + P_pred_1_2*f2_0_2 + P_pred_1_3*f2_0_3;
  374. P_pred_1_1 = P_pred_1_1*f2_1_1 + P_pred_1_2*f2_1_2 + P_pred_1_3*f2_1_3 + Q_1_1;
  375. P_pred_1_2 = P_pred_1_2*f2_2_2;
  376. P_pred_1_3 = P_pred_1_2*f2_3_2 + P_pred_1_3*f2_3_3;
  377. P_pred_2_0 = P_pred_2_0*f2_0_0 + P_pred_2_2*f2_0_2 + P_pred_2_3*f2_0_3;
  378. P_pred_2_1 = P_pred_2_1*f2_1_1 + P_pred_2_2*f2_1_2 + P_pred_2_3*f2_1_3;
  379. P_pred_2_2 = P_pred_2_2*f2_2_2 + Q_2_2;
  380. P_pred_2_3 = P_pred_2_2*f2_3_2 + P_pred_2_3*f2_3_3;
  381. P_pred_3_0 = P_pred_3_0*f2_0_0 + P_pred_3_2*f2_0_2 + P_pred_3_3*f2_0_3;
  382. P_pred_3_1 = P_pred_3_1*f2_1_1 + P_pred_3_2*f2_1_2 + P_pred_3_3*f2_1_3;
  383. P_pred_3_2 = P_pred_3_2*f2_2_2;
  384. P_pred_3_3 = P_pred_3_2*f2_3_2 + P_pred_3_3*f2_3_3 + Q_3_3;
  385. temp_0_0 = H_0_0*P_pred_0_0;
  386. temp_0_1 = H_0_0*P_pred_0_1;
  387. temp_0_2 = H_0_0*P_pred_0_2;
  388. temp_0_3 = H_0_0*P_pred_0_3;
  389. temp_1_0 = H_1_1*P_pred_1_0;
  390. temp_1_1 = H_1_1*P_pred_1_1;
  391. temp_1_2 = H_1_1*P_pred_1_2;
  392. temp_1_3 = H_1_1*P_pred_1_3;
  393. temp_0_0 = temp_0_0*H_0_0+ R_0_0;
  394. temp_0_1 = temp_0_1*H_1_1;
  395. temp_1_0 = temp_1_0*H_0_0;
  396. temp_1_1 = temp_1_1*H_1_1 + R_1_1;
  397. temp_0_0_t = temp_0_0;
  398. temp_0_1_t = temp_0_1;
  399. temp_1_0_t = temp_1_0;
  400. temp_1_1_t = temp_1_1;
  401. temp = temp_0_0*temp_1_1 - temp_0_1*temp_1_0;
  402. if(temp != 0)
  403. {
  404. temp_0_0 = temp_1_1_t/temp;
  405. temp_0_1 = -temp_0_1_t/temp;
  406. temp_1_0 = -temp_1_0_t/temp;
  407. temp_1_1 = temp_0_0_t/temp;
  408. }
  409. K_0_0 = P_pred_0_0*H_0_0;
  410. K_0_1 = P_pred_0_1*H_1_1;
  411. K_1_0 = P_pred_1_0*H_0_0;
  412. K_1_1 = P_pred_1_1*H_1_1;
  413. K_2_0 = P_pred_2_0*H_0_0;
  414. K_2_1 = P_pred_2_1*H_1_1;
  415. K_3_0 = P_pred_3_0*H_0_0;
  416. K_3_1 = P_pred_3_1*H_1_1;
  417. K_0_0 = K_0_0*temp_0_0 + K_0_1*temp_1_0;
  418. K_0_1 = K_0_0*temp_0_1 + K_0_1*temp_1_1;
  419. K_1_0 = K_1_0*temp_0_0 + K_1_1*temp_1_0;
  420. K_1_1 = K_1_0*temp_0_1 + K_1_1*temp_1_1;
  421. K_2_0 = K_2_0*temp_0_0 + K_2_1*temp_1_0;
  422. K_2_1 = K_2_0*temp_0_1 + K_2_1*temp_1_1;
  423. K_3_0 = K_3_0*temp_0_0 + K_3_1*temp_1_0;
  424. K_3_1 = K_3_0*temp_0_1 + K_3_1*temp_1_1;
  425. tempa_0_0 = X_pred_0_0 + K_0_0*(Y_0_0 - Y_pred_0_0) + K_0_1*(Y_1_0 - Y_pred_1_0);
  426. tempa_1_0 = X_pred_1_0 + K_1_0*(Y_0_0 - Y_pred_0_0) + K_1_1*(Y_1_0 - Y_pred_1_0);
  427. tempa_2_0 = X_pred_2_0 + K_2_0*(Y_0_0 - Y_pred_0_0) + K_2_1*(Y_1_0 - Y_pred_1_0);
  428. tempa_3_0 = X_pred_3_0 + K_3_0*(Y_0_0 - Y_pred_0_0) + K_3_1*(Y_1_0 - Y_pred_1_0);
  429. temp_0_0 = K_0_0*H_0_0;
  430. temp_0_1 = K_0_1*H_1_1;
  431. //temp_0_2 = 0.0f;
  432. //temp_0_3 = 0.0f;
  433. temp_1_0 = K_1_0*H_0_0;
  434. temp_1_1 = K_1_1*H_1_1;
  435. //temp_1_2 = 0.0f;
  436. //temp_1_3 = 0.0f;
  437. temp_2_0 = K_2_0*H_0_0;
  438. temp_2_1 = K_2_1*H_1_1;
  439. //temp_2_2 = 0.0f;
  440. //temp_2_3 = 0.0f;
  441. temp_3_0 = K_3_0*H_0_0;
  442. temp_3_1 = K_3_1*H_1_1;
  443. //temp_3_2 = 0.0f;
  444. //temp_3_3 = 0.0f;
  445. P0_0_0 = P_pred_0_0 - (temp_0_0*P_pred_0_0 + temp_0_1*P_pred_1_0);
  446. P0_0_1 = P_pred_0_1 - (temp_0_0*P_pred_0_1 + temp_0_1*P_pred_1_1);
  447. P0_0_2 = P_pred_0_2 - (temp_0_0*P_pred_0_2 + temp_0_1*P_pred_1_2);
  448. P0_0_3 = P_pred_0_3 - (temp_0_0*P_pred_0_3 + temp_0_1*P_pred_1_3);
  449. P0_1_0 = P_pred_1_0 - (temp_1_0*P_pred_0_0 + temp_1_1*P_pred_1_0);
  450. P0_1_1 = P_pred_1_1 - (temp_1_0*P_pred_0_1 + temp_1_1*P_pred_1_1);
  451. P0_1_2 = P_pred_1_2 - (temp_1_0*P_pred_0_2 + temp_1_1*P_pred_1_2);
  452. P0_1_3 = P_pred_1_3 - (temp_1_0*P_pred_0_3 + temp_1_1*P_pred_1_3);
  453. P0_2_0 = P_pred_2_0 - (temp_2_0*P_pred_0_0 + temp_2_1*P_pred_1_0);
  454. P0_2_1 = P_pred_2_1 - (temp_2_0*P_pred_0_1 + temp_2_1*P_pred_1_1);
  455. P0_2_2 = P_pred_2_2 - (temp_2_0*P_pred_0_2 + temp_2_1*P_pred_1_2);
  456. P0_2_3 = P_pred_2_3 - (temp_2_0*P_pred_0_3 + temp_2_1*P_pred_1_3);
  457. P0_3_0 = P_pred_3_0 - (temp_3_0*P_pred_0_0 + temp_3_1*P_pred_1_0);
  458. P0_3_1 = P_pred_3_1 - (temp_3_0*P_pred_0_1 + temp_3_1*P_pred_1_1);
  459. P0_3_2 = P_pred_3_2 - (temp_3_0*P_pred_0_2 + temp_3_1*P_pred_1_2);
  460. P0_3_3 = P_pred_3_3 - (temp_3_0*P_pred_0_3 + temp_3_1*P_pred_1_3);
  461. #ifdef SIMULINK_USE_ARM_MATH
  462. if(tempa_3_0>(2.0f*PI))
  463. {
  464. tempa_3_0 -= (2.0f*PI);
  465. }
  466. #else
  467. if(tempa_3_0>(6.2831853f))
  468. {
  469. tempa_3_0 -= (6.2831853f);
  470. }
  471. #endif
  472. xD[0] = tempa_0_0;
  473. xD[1] = tempa_1_0;
  474. xD[2] = tempa_2_0;
  475. xD[3] = tempa_3_0;
  476. /*
  477. xD[4] = P0_0_0;
  478. xD[5] = P0_0_1;
  479. xD[6] = P0_0_2;
  480. xD[7] = P0_0_3;
  481. xD[8] = P0_1_0;
  482. xD[9] = P0_1_1;
  483. xD[10] = P0_1_2;
  484. xD[11] = P0_1_3;
  485. xD[12] = P0_2_0;
  486. xD[13] = P0_2_1;
  487. xD[14] = P0_2_2;
  488. xD[15] = P0_2_3;
  489. xD[16] = P0_3_0;
  490. xD[17] = P0_3_1;
  491. xD[18] = P0_3_2;
  492. xD[19] = P0_3_3;*/
  493. }