NN library trained with actual motor data
neural_network_3ph.cpp@0:efebbd20f066, 2016-11-07 (annotated)
- Committer:
- cpm219
- Date:
- Mon Nov 07 22:06:38 2016 +0000
- Revision:
- 0:efebbd20f066
latest version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cpm219 | 0:efebbd20f066 | 1 | // |
cpm219 | 0:efebbd20f066 | 2 | // File: neural_network_3ph.cpp |
cpm219 | 0:efebbd20f066 | 3 | // |
cpm219 | 0:efebbd20f066 | 4 | // Code generated for Simulink model 'neural_network_3ph'. |
cpm219 | 0:efebbd20f066 | 5 | // |
cpm219 | 0:efebbd20f066 | 6 | // Model version : 1.12 |
cpm219 | 0:efebbd20f066 | 7 | // Simulink Coder version : 8.10 (R2016a) 10-Feb-2016 |
cpm219 | 0:efebbd20f066 | 8 | // C/C++ source code generated on : Tue Nov 01 15:14:34 2016 |
cpm219 | 0:efebbd20f066 | 9 | // |
cpm219 | 0:efebbd20f066 | 10 | // Target selection: ert.tlc |
cpm219 | 0:efebbd20f066 | 11 | // Embedded hardware selection: ARM Compatible->ARM Cortex |
cpm219 | 0:efebbd20f066 | 12 | // Code generation objectives: Unspecified |
cpm219 | 0:efebbd20f066 | 13 | // Validation result: Not run |
cpm219 | 0:efebbd20f066 | 14 | // |
cpm219 | 0:efebbd20f066 | 15 | #include "neural_network_3ph.h" |
cpm219 | 0:efebbd20f066 | 16 | #include "neural_network_3ph_private.h" |
cpm219 | 0:efebbd20f066 | 17 | |
cpm219 | 0:efebbd20f066 | 18 | // Block signals (auto storage) |
cpm219 | 0:efebbd20f066 | 19 | B_neural_network_3ph_T neural_network_3ph_B; |
cpm219 | 0:efebbd20f066 | 20 | |
cpm219 | 0:efebbd20f066 | 21 | // Real-time model |
cpm219 | 0:efebbd20f066 | 22 | RT_MODEL_neural_network_3ph_T neural_network_3ph_M_; |
cpm219 | 0:efebbd20f066 | 23 | RT_MODEL_neural_network_3ph_T *const neural_network_3ph_M = |
cpm219 | 0:efebbd20f066 | 24 | &neural_network_3ph_M_; |
cpm219 | 0:efebbd20f066 | 25 | real_T rt_roundd_snf(real_T u) |
cpm219 | 0:efebbd20f066 | 26 | { |
cpm219 | 0:efebbd20f066 | 27 | real_T y; |
cpm219 | 0:efebbd20f066 | 28 | if (fabs(u) < 4.503599627370496E+15) { |
cpm219 | 0:efebbd20f066 | 29 | if (u >= 0.5) { |
cpm219 | 0:efebbd20f066 | 30 | y = floor(u + 0.5); |
cpm219 | 0:efebbd20f066 | 31 | } else if (u > -0.5) { |
cpm219 | 0:efebbd20f066 | 32 | y = u * 0.0; |
cpm219 | 0:efebbd20f066 | 33 | } else { |
cpm219 | 0:efebbd20f066 | 34 | y = ceil(u - 0.5); |
cpm219 | 0:efebbd20f066 | 35 | } |
cpm219 | 0:efebbd20f066 | 36 | } else { |
cpm219 | 0:efebbd20f066 | 37 | y = u; |
cpm219 | 0:efebbd20f066 | 38 | } |
cpm219 | 0:efebbd20f066 | 39 | |
cpm219 | 0:efebbd20f066 | 40 | return y; |
cpm219 | 0:efebbd20f066 | 41 | } |
cpm219 | 0:efebbd20f066 | 42 | |
cpm219 | 0:efebbd20f066 | 43 | // Model step function |
cpm219 | 0:efebbd20f066 | 44 | void neural_network_custom(real_T arg_In1[61], real_T arg_Out1[2]) |
cpm219 | 0:efebbd20f066 | 45 | { |
cpm219 | 0:efebbd20f066 | 46 | int32_T i; |
cpm219 | 0:efebbd20f066 | 47 | real_T tmp; |
cpm219 | 0:efebbd20f066 | 48 | real_T tmp_0; |
cpm219 | 0:efebbd20f066 | 49 | real_T tmp_1; |
cpm219 | 0:efebbd20f066 | 50 | real_T tmp_2; |
cpm219 | 0:efebbd20f066 | 51 | real_T tmp_3; |
cpm219 | 0:efebbd20f066 | 52 | real_T rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 53 | real_T rtb_Sum1; |
cpm219 | 0:efebbd20f066 | 54 | |
cpm219 | 0:efebbd20f066 | 55 | // DotProduct: '<S9>/Dot Product' |
cpm219 | 0:efebbd20f066 | 56 | tmp_2 = 0.0; |
cpm219 | 0:efebbd20f066 | 57 | |
cpm219 | 0:efebbd20f066 | 58 | // DotProduct: '<S10>/Dot Product' |
cpm219 | 0:efebbd20f066 | 59 | tmp_3 = 0.0; |
cpm219 | 0:efebbd20f066 | 60 | |
cpm219 | 0:efebbd20f066 | 61 | // DotProduct: '<S11>/Dot Product' |
cpm219 | 0:efebbd20f066 | 62 | rtb_Sum1 = 0.0; |
cpm219 | 0:efebbd20f066 | 63 | |
cpm219 | 0:efebbd20f066 | 64 | // DotProduct: '<S12>/Dot Product' |
cpm219 | 0:efebbd20f066 | 65 | neural_network_3ph_B.d0 = 0.0; |
cpm219 | 0:efebbd20f066 | 66 | |
cpm219 | 0:efebbd20f066 | 67 | // DotProduct: '<S13>/Dot Product' |
cpm219 | 0:efebbd20f066 | 68 | neural_network_3ph_B.d1 = 0.0; |
cpm219 | 0:efebbd20f066 | 69 | |
cpm219 | 0:efebbd20f066 | 70 | // DotProduct: '<S14>/Dot Product' |
cpm219 | 0:efebbd20f066 | 71 | tmp = 0.0; |
cpm219 | 0:efebbd20f066 | 72 | |
cpm219 | 0:efebbd20f066 | 73 | // DotProduct: '<S15>/Dot Product' |
cpm219 | 0:efebbd20f066 | 74 | tmp_0 = 0.0; |
cpm219 | 0:efebbd20f066 | 75 | |
cpm219 | 0:efebbd20f066 | 76 | // DotProduct: '<S16>/Dot Product' |
cpm219 | 0:efebbd20f066 | 77 | tmp_1 = 0.0; |
cpm219 | 0:efebbd20f066 | 78 | for (i = 0; i < 61; i++) { |
cpm219 | 0:efebbd20f066 | 79 | // Bias: '<S22>/Add min y' incorporates: |
cpm219 | 0:efebbd20f066 | 80 | // Bias: '<S22>/Subtract min x' |
cpm219 | 0:efebbd20f066 | 81 | // Gain: '<S22>/range y // range x' |
cpm219 | 0:efebbd20f066 | 82 | // Inport: '<Root>/In1' |
cpm219 | 0:efebbd20f066 | 83 | |
cpm219 | 0:efebbd20f066 | 84 | rtb_Addminy = (arg_In1[i] + neural_network_3ph_ConstP.Subtractminx_Bias[i]) * |
cpm219 | 0:efebbd20f066 | 85 | neural_network_3ph_ConstP.rangeyrangex_Gain[i] + -1.0; |
cpm219 | 0:efebbd20f066 | 86 | |
cpm219 | 0:efebbd20f066 | 87 | // DotProduct: '<S9>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 88 | // Constant: '<S7>/IW{1,1}(1,:)'' |
cpm219 | 0:efebbd20f066 | 89 | |
cpm219 | 0:efebbd20f066 | 90 | tmp_2 += neural_network_3ph_ConstP.IW111_Value[i] * rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 91 | |
cpm219 | 0:efebbd20f066 | 92 | // DotProduct: '<S10>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 93 | // Constant: '<S7>/IW{1,1}(2,:)'' |
cpm219 | 0:efebbd20f066 | 94 | |
cpm219 | 0:efebbd20f066 | 95 | tmp_3 += neural_network_3ph_ConstP.IW112_Value[i] * rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 96 | |
cpm219 | 0:efebbd20f066 | 97 | // DotProduct: '<S11>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 98 | // Constant: '<S7>/IW{1,1}(3,:)'' |
cpm219 | 0:efebbd20f066 | 99 | |
cpm219 | 0:efebbd20f066 | 100 | rtb_Sum1 += neural_network_3ph_ConstP.IW113_Value[i] * rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 101 | |
cpm219 | 0:efebbd20f066 | 102 | // DotProduct: '<S12>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 103 | // Constant: '<S7>/IW{1,1}(4,:)'' |
cpm219 | 0:efebbd20f066 | 104 | |
cpm219 | 0:efebbd20f066 | 105 | neural_network_3ph_B.d0 += neural_network_3ph_ConstP.IW114_Value[i] * |
cpm219 | 0:efebbd20f066 | 106 | rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 107 | |
cpm219 | 0:efebbd20f066 | 108 | // DotProduct: '<S13>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 109 | // Constant: '<S7>/IW{1,1}(5,:)'' |
cpm219 | 0:efebbd20f066 | 110 | |
cpm219 | 0:efebbd20f066 | 111 | neural_network_3ph_B.d1 += neural_network_3ph_ConstP.IW115_Value[i] * |
cpm219 | 0:efebbd20f066 | 112 | rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 113 | |
cpm219 | 0:efebbd20f066 | 114 | // DotProduct: '<S14>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 115 | // Constant: '<S7>/IW{1,1}(6,:)'' |
cpm219 | 0:efebbd20f066 | 116 | |
cpm219 | 0:efebbd20f066 | 117 | tmp += neural_network_3ph_ConstP.IW116_Value[i] * rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 118 | |
cpm219 | 0:efebbd20f066 | 119 | // DotProduct: '<S15>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 120 | // Constant: '<S7>/IW{1,1}(7,:)'' |
cpm219 | 0:efebbd20f066 | 121 | |
cpm219 | 0:efebbd20f066 | 122 | tmp_0 += neural_network_3ph_ConstP.IW117_Value[i] * rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 123 | |
cpm219 | 0:efebbd20f066 | 124 | // DotProduct: '<S16>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 125 | // Constant: '<S7>/IW{1,1}(8,:)'' |
cpm219 | 0:efebbd20f066 | 126 | |
cpm219 | 0:efebbd20f066 | 127 | tmp_1 += neural_network_3ph_ConstP.IW118_Value[i] * rtb_Addminy; |
cpm219 | 0:efebbd20f066 | 128 | } |
cpm219 | 0:efebbd20f066 | 129 | |
cpm219 | 0:efebbd20f066 | 130 | // Sum: '<S2>/netsum' incorporates: |
cpm219 | 0:efebbd20f066 | 131 | // DotProduct: '<S10>/Dot Product' |
cpm219 | 0:efebbd20f066 | 132 | // DotProduct: '<S11>/Dot Product' |
cpm219 | 0:efebbd20f066 | 133 | // DotProduct: '<S12>/Dot Product' |
cpm219 | 0:efebbd20f066 | 134 | // DotProduct: '<S13>/Dot Product' |
cpm219 | 0:efebbd20f066 | 135 | // DotProduct: '<S14>/Dot Product' |
cpm219 | 0:efebbd20f066 | 136 | // DotProduct: '<S15>/Dot Product' |
cpm219 | 0:efebbd20f066 | 137 | // DotProduct: '<S16>/Dot Product' |
cpm219 | 0:efebbd20f066 | 138 | // DotProduct: '<S9>/Dot Product' |
cpm219 | 0:efebbd20f066 | 139 | |
cpm219 | 0:efebbd20f066 | 140 | neural_network_3ph_B.dv0[0] = tmp_2; |
cpm219 | 0:efebbd20f066 | 141 | neural_network_3ph_B.dv0[1] = tmp_3; |
cpm219 | 0:efebbd20f066 | 142 | neural_network_3ph_B.dv0[2] = rtb_Sum1; |
cpm219 | 0:efebbd20f066 | 143 | neural_network_3ph_B.dv0[3] = neural_network_3ph_B.d0; |
cpm219 | 0:efebbd20f066 | 144 | neural_network_3ph_B.dv0[4] = neural_network_3ph_B.d1; |
cpm219 | 0:efebbd20f066 | 145 | neural_network_3ph_B.dv0[5] = tmp; |
cpm219 | 0:efebbd20f066 | 146 | neural_network_3ph_B.dv0[6] = tmp_0; |
cpm219 | 0:efebbd20f066 | 147 | neural_network_3ph_B.dv0[7] = tmp_1; |
cpm219 | 0:efebbd20f066 | 148 | |
cpm219 | 0:efebbd20f066 | 149 | // DotProduct: '<S20>/Dot Product' |
cpm219 | 0:efebbd20f066 | 150 | tmp_2 = 0.0; |
cpm219 | 0:efebbd20f066 | 151 | |
cpm219 | 0:efebbd20f066 | 152 | // DotProduct: '<S21>/Dot Product' |
cpm219 | 0:efebbd20f066 | 153 | tmp_3 = 0.0; |
cpm219 | 0:efebbd20f066 | 154 | for (i = 0; i < 8; i++) { |
cpm219 | 0:efebbd20f066 | 155 | // Sum: '<S8>/Sum1' incorporates: |
cpm219 | 0:efebbd20f066 | 156 | // Constant: '<S2>/b{1}' |
cpm219 | 0:efebbd20f066 | 157 | // Constant: '<S8>/one' |
cpm219 | 0:efebbd20f066 | 158 | // Constant: '<S8>/one1' |
cpm219 | 0:efebbd20f066 | 159 | // Gain: '<S8>/Gain' |
cpm219 | 0:efebbd20f066 | 160 | // Gain: '<S8>/Gain1' |
cpm219 | 0:efebbd20f066 | 161 | // Sum: '<S2>/netsum' |
cpm219 | 0:efebbd20f066 | 162 | // Sum: '<S8>/Sum' |
cpm219 | 0:efebbd20f066 | 163 | |
cpm219 | 0:efebbd20f066 | 164 | rtb_Sum1 = 1.0 / (exp((neural_network_3ph_B.dv0[i] + |
cpm219 | 0:efebbd20f066 | 165 | neural_network_3ph_ConstP.b1_Value[i]) * -2.0) + 1.0) * 2.0 - 1.0; |
cpm219 | 0:efebbd20f066 | 166 | |
cpm219 | 0:efebbd20f066 | 167 | // DotProduct: '<S20>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 168 | // Constant: '<S18>/IW{2,1}(1,:)'' |
cpm219 | 0:efebbd20f066 | 169 | |
cpm219 | 0:efebbd20f066 | 170 | tmp_2 += neural_network_3ph_ConstP.IW211_Value[i] * rtb_Sum1; |
cpm219 | 0:efebbd20f066 | 171 | |
cpm219 | 0:efebbd20f066 | 172 | // DotProduct: '<S21>/Dot Product' incorporates: |
cpm219 | 0:efebbd20f066 | 173 | // Constant: '<S18>/IW{2,1}(2,:)'' |
cpm219 | 0:efebbd20f066 | 174 | |
cpm219 | 0:efebbd20f066 | 175 | tmp_3 += neural_network_3ph_ConstP.IW212_Value[i] * rtb_Sum1; |
cpm219 | 0:efebbd20f066 | 176 | } |
cpm219 | 0:efebbd20f066 | 177 | |
cpm219 | 0:efebbd20f066 | 178 | // Outport: '<Root>/Out1' incorporates: |
cpm219 | 0:efebbd20f066 | 179 | // Bias: '<S24>/Subtract min y' |
cpm219 | 0:efebbd20f066 | 180 | // DotProduct: '<S20>/Dot Product' |
cpm219 | 0:efebbd20f066 | 181 | // DotProduct: '<S21>/Dot Product' |
cpm219 | 0:efebbd20f066 | 182 | // Gain: '<S24>/Divide by range y' |
cpm219 | 0:efebbd20f066 | 183 | // Rounding: '<Root>/Rounding Function' |
cpm219 | 0:efebbd20f066 | 184 | // Sum: '<S3>/netsum' |
cpm219 | 0:efebbd20f066 | 185 | |
cpm219 | 0:efebbd20f066 | 186 | arg_Out1[0] = rt_roundd_snf(fabs(((tmp_2 + -0.2665606286241351) + 1.0) * 0.5)); |
cpm219 | 0:efebbd20f066 | 187 | arg_Out1[1] = rt_roundd_snf(fabs(((tmp_3 + -0.17510563077530578) + 1.0) * 0.5)); |
cpm219 | 0:efebbd20f066 | 188 | } |
cpm219 | 0:efebbd20f066 | 189 | |
cpm219 | 0:efebbd20f066 | 190 | // Model initialize function |
cpm219 | 0:efebbd20f066 | 191 | void neural_network_initialize(void) |
cpm219 | 0:efebbd20f066 | 192 | { |
cpm219 | 0:efebbd20f066 | 193 | // Registration code |
cpm219 | 0:efebbd20f066 | 194 | |
cpm219 | 0:efebbd20f066 | 195 | // initialize error status |
cpm219 | 0:efebbd20f066 | 196 | rtmSetErrorStatus(neural_network_3ph_M, (NULL)); |
cpm219 | 0:efebbd20f066 | 197 | } |
cpm219 | 0:efebbd20f066 | 198 | |
cpm219 | 0:efebbd20f066 | 199 | // Model terminate function |
cpm219 | 0:efebbd20f066 | 200 | void neural_network_3ph_terminate(void) |
cpm219 | 0:efebbd20f066 | 201 | { |
cpm219 | 0:efebbd20f066 | 202 | // (no terminate code required) |
cpm219 | 0:efebbd20f066 | 203 | } |
cpm219 | 0:efebbd20f066 | 204 | |
cpm219 | 0:efebbd20f066 | 205 | // |
cpm219 | 0:efebbd20f066 | 206 | // File trailer for generated code. |
cpm219 | 0:efebbd20f066 | 207 | // |
cpm219 | 0:efebbd20f066 | 208 | // [EOF] |
cpm219 | 0:efebbd20f066 | 209 | // |