NM500 TEST PGM

Dependencies:   NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed

Committer:
Nasungil
Date:
Mon May 29 04:32:29 2017 +0000
Revision:
11:6a81bde51be5
Parent:
10:74e762848659
Child:
12:c8fbe49527e7
1st test
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nasungil 8:c41405662e53 1 #include "mbed.h"
Nasungil 8:c41405662e53 2 #include "NM500.h"
Nasungil 8:c41405662e53 3
Nasungil 8:c41405662e53 4 int data_learn(void);
Nasungil 10:74e762848659 5 int data_classify(void);
Nasungil 10:74e762848659 6
Nasungil 10:74e762848659 7 Timer t, st;
Nasungil 11:6a81bde51be5 8 //Serial pc(SERIAL_TX, SERIAL_RX);
Nasungil 8:c41405662e53 9 unsigned char vector[NEURONSIZE];
Nasungil 8:c41405662e53 10
Nasungil 11:6a81bde51be5 11 int main() {
Nasungil 8:c41405662e53 12 //NM500 & SD Card Init
Nasungil 8:c41405662e53 13 if(begin() == 0)
Nasungil 10:74e762848659 14 printf("\n\nNM500 Init\n");
Nasungil 8:c41405662e53 15 else
Nasungil 11:6a81bde51be5 16 printf("\nInit error\n");
Nasungil 11:6a81bde51be5 17
Nasungil 11:6a81bde51be5 18 //time measure start
Nasungil 11:6a81bde51be5 19 t.start();
Nasungil 11:6a81bde51be5 20
Nasungil 8:c41405662e53 21 //minif test
Nasungil 10:74e762848659 22 write(NM_MINIF,3);
Nasungil 10:74e762848659 23 int minif = read(NM_MINIF);
Nasungil 11:6a81bde51be5 24
Nasungil 8:c41405662e53 25 //maxif test
Nasungil 9:7970a5638913 26 write(NM_MAXIF,10000);
Nasungil 10:74e762848659 27 int maxif = read(NM_MAXIF);
Nasungil 8:c41405662e53 28
Nasungil 8:c41405662e53 29 //GCR test
Nasungil 9:7970a5638913 30 write(NM_GCR,5);
Nasungil 10:74e762848659 31 int gcr = read(NM_GCR);
Nasungil 10:74e762848659 32 //printf("gcr : %d",gcr);
Nasungil 10:74e762848659 33
Nasungil 10:74e762848659 34 st.start();
Nasungil 8:c41405662e53 35 //Neuron learn
Nasungil 11:6a81bde51be5 36 printf("Learn Start\n");
Nasungil 10:74e762848659 37 int learn = data_learn();
Nasungil 11:6a81bde51be5 38 if(learn == 0x7fff) //change
Nasungil 11:6a81bde51be5 39 learn = MAXNEURONS;
Nasungil 10:74e762848659 40 st.stop();
Nasungil 11:6a81bde51be5 41 printf("Learn Complete\n");
Nasungil 10:74e762848659 42 printf("Learn Time : %d ms\n",st.read_ms());
Nasungil 11:6a81bde51be5 43 st.reset();
Nasungil 8:c41405662e53 44
Nasungil 9:7970a5638913 45 //data save
Nasungil 10:74e762848659 46 st.start();
Nasungil 11:6a81bde51be5 47 printf("Save Start\n");
Nasungil 9:7970a5638913 48 int save = NeuronToSD();
Nasungil 10:74e762848659 49 st.stop();
Nasungil 10:74e762848659 50 printf("Save Complete\n");
Nasungil 10:74e762848659 51 printf("Save Time : %d ms\n",st.read_ms());
Nasungil 11:6a81bde51be5 52 st.reset();
Nasungil 9:7970a5638913 53
Nasungil 10:74e762848659 54 //forget
Nasungil 9:7970a5638913 55 forget();
Nasungil 9:7970a5638913 56 int forget = NCOUNT();
Nasungil 10:74e762848659 57
Nasungil 10:74e762848659 58 //restore
Nasungil 10:74e762848659 59 st.start();
Nasungil 11:6a81bde51be5 60 printf("Restore Start\n");
Nasungil 10:74e762848659 61 int restore = SDToNeurons();
Nasungil 10:74e762848659 62 st.stop();
Nasungil 10:74e762848659 63 printf("Restore Complete\n");
Nasungil 10:74e762848659 64 printf("Restore Time : %d ms\n",st.read_ms());
Nasungil 11:6a81bde51be5 65 st.reset();
Nasungil 10:74e762848659 66
Nasungil 10:74e762848659 67 setKNN();
Nasungil 10:74e762848659 68 //classify
Nasungil 10:74e762848659 69 st.start();
Nasungil 11:6a81bde51be5 70 printf("Classify Start\n");
Nasungil 10:74e762848659 71 int classify = data_classify();
Nasungil 10:74e762848659 72 st.stop();
Nasungil 10:74e762848659 73 printf("Classify Complete\n");
Nasungil 10:74e762848659 74 printf("classify Time : %d ms\n",st.read_ms());
Nasungil 10:74e762848659 75
Nasungil 9:7970a5638913 76
Nasungil 10:74e762848659 77 printf("\n****************Tset Result****************\n");
Nasungil 10:74e762848659 78 //minif result
Nasungil 10:74e762848659 79 if(minif == 3)
Nasungil 10:74e762848659 80 printf("MINIF # PASS\n");
Nasungil 10:74e762848659 81 else
Nasungil 10:74e762848659 82 printf("MINIF # FAIL\n");
Nasungil 10:74e762848659 83
Nasungil 10:74e762848659 84 //maxif result
Nasungil 10:74e762848659 85 if(maxif == 10000)
Nasungil 10:74e762848659 86 printf("MAXIF # PASS\n");
Nasungil 10:74e762848659 87 else
Nasungil 10:74e762848659 88 printf("MAXIF # FAIL\n");
Nasungil 10:74e762848659 89
Nasungil 10:74e762848659 90 //GCR result
Nasungil 10:74e762848659 91 if(gcr == 5)
Nasungil 10:74e762848659 92 printf("GCR # PASS\n");
Nasungil 10:74e762848659 93 else
Nasungil 10:74e762848659 94 printf("GCR # FAIL\n");
Nasungil 10:74e762848659 95
Nasungil 10:74e762848659 96
Nasungil 10:74e762848659 97 //forget result
Nasungil 10:74e762848659 98 if(forget == 0)
Nasungil 10:74e762848659 99 printf("FORGET # PASS\n");
Nasungil 10:74e762848659 100 else
Nasungil 10:74e762848659 101 printf("FORGET # FAIL\n");
Nasungil 10:74e762848659 102
Nasungil 10:74e762848659 103 //learn result
Nasungil 10:74e762848659 104 if(learn == MAXNEURONS){
Nasungil 10:74e762848659 105 printf("Daisy Chain # PASS\n");
Nasungil 10:74e762848659 106 printf("Learn # PASS\n");
Nasungil 10:74e762848659 107 }
Nasungil 10:74e762848659 108
Nasungil 10:74e762848659 109 else if(learn == 2){
Nasungil 10:74e762848659 110 printf("Daisy Chain # FAIL\n");
Nasungil 10:74e762848659 111 printf("Learn # PASS\n");
Nasungil 10:74e762848659 112 }
Nasungil 11:6a81bde51be5 113 else {
Nasungil 10:74e762848659 114 printf("Daisy Chain # unknown\n");
Nasungil 11:6a81bde51be5 115 printf("# %d Neuron Learn FAIL\n",learn);
Nasungil 10:74e762848659 116 }
Nasungil 10:74e762848659 117
Nasungil 10:74e762848659 118 //classify result
Nasungil 10:74e762848659 119 if(classify == 1){
Nasungil 10:74e762848659 120 printf("Classify # PASS\n");
Nasungil 10:74e762848659 121 printf("Distance # PASS\n");
Nasungil 10:74e762848659 122 }
Nasungil 10:74e762848659 123 else if(classify == 2){
Nasungil 10:74e762848659 124 printf("Classify # PASS\n");
Nasungil 10:74e762848659 125 printf("Distance # FAIL\n");
Nasungil 10:74e762848659 126 }
Nasungil 11:6a81bde51be5 127 else {
Nasungil 11:6a81bde51be5 128 printf("# %d Neuron Classify FAIL\n",classify);
Nasungil 10:74e762848659 129 printf("Distance # PASS\n");
Nasungil 10:74e762848659 130 }
Nasungil 10:74e762848659 131
Nasungil 10:74e762848659 132 printf("POWER SAVE ON\n");
Nasungil 10:74e762848659 133 write(NM_POWER_SAVE,0);
Nasungil 10:74e762848659 134 t.stop();
Nasungil 10:74e762848659 135 printf("Total Time : %d ms\n",t.read_ms());
Nasungil 10:74e762848659 136
Nasungil 10:74e762848659 137
Nasungil 8:c41405662e53 138
Nasungil 8:c41405662e53 139
Nasungil 8:c41405662e53 140 }
Nasungil 8:c41405662e53 141 int data_learn(void)
Nasungil 8:c41405662e53 142 {
Nasungil 8:c41405662e53 143 int ncnt=0,old_ncnt=0; //ncount, old ncount
Nasungil 8:c41405662e53 144
Nasungil 8:c41405662e53 145 //number of neuron 576*2
Nasungil 8:c41405662e53 146 for(int i=1;i<=MAXNEURONS;i++){
Nasungil 8:c41405662e53 147 // ex
Nasungil 8:c41405662e53 148 // 1. 0 1 0 1....
Nasungil 8:c41405662e53 149 // 2. 0 2 0 2....
Nasungil 8:c41405662e53 150 // 3. 0 3 0 3....
Nasungil 8:c41405662e53 151 // .....
Nasungil 8:c41405662e53 152 // 255. 0 255 0 255....
Nasungil 8:c41405662e53 153 // 256. 1 0 1 0....
Nasungil 8:c41405662e53 154 // 257. 1 1 1 1....
Nasungil 8:c41405662e53 155 for(int j =0;j<NEURONSIZE;j=j+2){
Nasungil 8:c41405662e53 156 vector[j] = i>>8; //upper bit save
Nasungil 8:c41405662e53 157 vector[j+1] = i; //low bit save
Nasungil 8:c41405662e53 158 }
Nasungil 8:c41405662e53 159 //data learn
Nasungil 8:c41405662e53 160 ncnt = learn(vector, NEURONSIZE, i); //input : data, neuronsize, cat, return : ncount
Nasungil 11:6a81bde51be5 161 if(ncnt == 0x7fff) //change
Nasungil 11:6a81bde51be5 162 ncnt = MAXNEURONS;
Nasungil 10:74e762848659 163 //printf("ncount # %d\n",ncnt);
Nasungil 8:c41405662e53 164
Nasungil 11:6a81bde51be5 165 if(ncnt == old_ncnt) //ncount가 변화가 없으면
Nasungil 11:6a81bde51be5 166 printf("\nNeuron Learn Fail # %d\n",ncnt);
Nasungil 11:6a81bde51be5 167 else //ncount가 증가하였을 경우
Nasungil 8:c41405662e53 168 old_ncnt = ncnt; //old ncount 갱신
Nasungil 8:c41405662e53 169
Nasungil 11:6a81bde51be5 170 printf(".");
Nasungil 8:c41405662e53 171 }
Nasungil 11:6a81bde51be5 172 printf("\n");
Nasungil 11:6a81bde51be5 173 printf("NCOUNT : %d\n",ncnt);
Nasungil 8:c41405662e53 174 //학습 완료 후 ncount가 MAXNEURONS보다 작을 경우
Nasungil 11:6a81bde51be5 175 if(ncnt == MAXNEURONS/2)
Nasungil 8:c41405662e53 176 return 2; //데이지체인 불량
Nasungil 8:c41405662e53 177 return ncnt; //정상 출력
Nasungil 8:c41405662e53 178 }
Nasungil 8:c41405662e53 179
Nasungil 10:74e762848659 180 int data_classify(void)
Nasungil 10:74e762848659 181 {
Nasungil 10:74e762848659 182 int distance, cat, nid;
Nasungil 10:74e762848659 183 //number of neuron 1156
Nasungil 10:74e762848659 184 for(int i=1;i<=MAXNEURONS;i++){
Nasungil 10:74e762848659 185 //test 벡터 생성
Nasungil 10:74e762848659 186 for(int j =0;j<NEURONSIZE;j=j+2){ //size of neuron 256
Nasungil 10:74e762848659 187 vector[j] = i>>8; //upper bit save
Nasungil 11:6a81bde51be5 188 vector[j+1] = i; //low bit save
Nasungil 10:74e762848659 189 }
Nasungil 11:6a81bde51be5 190
Nasungil 10:74e762848659 191 //input : data, data length output : distance, category, Neuron ID return 인식된 데이터 갯수
Nasungil 10:74e762848659 192 int nsr = classify(vector, NEURONSIZE, &distance, &cat, &nid);
Nasungil 11:6a81bde51be5 193 printf(".");
Nasungil 11:6a81bde51be5 194 printf(" neuron# %d \t", nid);
Nasungil 11:6a81bde51be5 195 printf(" distance = %d,\t ", distance);
Nasungil 11:6a81bde51be5 196 printf(" cat = %d\n", cat);
Nasungil 11:6a81bde51be5 197
Nasungil 11:6a81bde51be5 198 if(nid!=cat){
Nasungil 11:6a81bde51be5 199 printf("Classify Fail # %d \n",nid);
Nasungil 11:6a81bde51be5 200 return cat; //분류 실패
Nasungil 11:6a81bde51be5 201 }
Nasungil 11:6a81bde51be5 202 if(distance != 0){
Nasungil 11:6a81bde51be5 203 printf("Distance Fail \n");
Nasungil 10:74e762848659 204 return 2; //distance error
Nasungil 11:6a81bde51be5 205 }
Nasungil 11:6a81bde51be5 206
Nasungil 11:6a81bde51be5 207 }
Nasungil 11:6a81bde51be5 208 printf("\n");
Nasungil 10:74e762848659 209 return 1; //정상 분류
Nasungil 10:74e762848659 210 }
Nasungil 8:c41405662e53 211
Nasungil 11:6a81bde51be5 212
Nasungil 11:6a81bde51be5 213