NM500 TEST PGM

Dependencies:   NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed

Committer:
Nasungil
Date:
Fri May 19 07:26:18 2017 +0000
Revision:
10:74e762848659
Parent:
9:7970a5638913
Child:
11:6a81bde51be5
1st complete

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