NM500 TEST PGM
Dependencies: NM500Lib_Socket NM500_Test_Socket SDFileSystem_Socket mbed
Diff: main.cpp
- Revision:
- 10:74e762848659
- Parent:
- 9:7970a5638913
- Child:
- 11:6a81bde51be5
--- a/main.cpp Thu May 18 06:06:13 2017 +0000 +++ b/main.cpp Fri May 19 07:26:18 2017 +0000 @@ -2,53 +2,130 @@ #include "NM500.h" int data_learn(void); +int data_classify(void); + +Timer t, st; unsigned char vector[NEURONSIZE]; int main() { - int minif,maxif=0,gcr,learn=0,classify=0; - + //time measure start + t.start(); + //NM500 & SD Card Init if(begin() == 0) - printf("\nNM500 Init\n"); + printf("\n\nNM500 Init\n"); else - error("Init error"); - - //kNN Mode 설정 - //setKNN(); + error("Init error"); //minif test - write(NM_MINIF,3); - minif = read(NM_MINIF); + write(NM_MINIF,3); + int minif = read(NM_MINIF); //maxif test write(NM_MAXIF,10000); - maxif = read(NM_MAXIF); + int maxif = read(NM_MAXIF); //GCR test write(NM_GCR,5); - gcr = read(NM_GCR); - + int gcr = read(NM_GCR); + //printf("gcr : %d",gcr); + + st.start(); //Neuron learn - data_learn(); + int learn = data_learn(); + st.stop(); + printf("Learn complete\n"); + printf("Learn Time : %d ms\n",st.read_ms()); //data save + st.start(); int save = NeuronToSD(); + st.stop(); + printf("Save Complete\n"); + printf("Save Time : %d ms\n",st.read_ms()); + //forget forget(); int forget = NCOUNT(); - printf("forget : %d", forget); + + //restore + st.start(); + int restore = SDToNeurons(); + st.stop(); + printf("Restore Complete\n"); + printf("Restore Time : %d ms\n",st.read_ms()); + + setKNN(); + //classify + st.start(); + int classify = data_classify(); + st.stop(); + printf("Classify Complete\n"); + printf("classify Time : %d ms\n",st.read_ms()); + - SDToNeurons(); - - printf("\nMINIF : %d\n", minif); - printf("\nMAXIF : %d\n", maxif); - printf("\nGCR : %d\n", gcr); - printf("\nSAVE : %d\n", save); - printf("\nFORGET : %d\n", forget);// -// printf("\nMinif : %d\n", minif); -// printf("\nMinif : %d\n", minif); -// printf("\nMinif : %d\n", minif); + printf("\n****************Tset Result****************\n"); + //minif result + if(minif == 3) + printf("MINIF # PASS\n"); + else + printf("MINIF # FAIL\n"); + + //maxif result + if(maxif == 10000) + printf("MAXIF # PASS\n"); + else + printf("MAXIF # FAIL\n"); + + //GCR result + if(gcr == 5) + printf("GCR # PASS\n"); + else + printf("GCR # FAIL\n"); + + + //forget result + if(forget == 0) + printf("FORGET # PASS\n"); + else + printf("FORGET # FAIL\n"); + + //learn result + if(learn == MAXNEURONS){ + printf("Daisy Chain # PASS\n"); + printf("Learn # PASS\n"); + } + + else if(learn == 2){ + printf("Daisy Chain # FAIL\n"); + printf("Learn # PASS\n"); + } + else if(learn == 0){ + printf("Daisy Chain # unknown\n"); + printf("Learn # FAIL\n"); + } + + //classify result + if(classify == 1){ + printf("Classify # PASS\n"); + printf("Distance # PASS\n"); + } + else if(classify == 2){ + printf("Classify # PASS\n"); + printf("Distance # FAIL\n"); + } + else if(classify == 0){ + printf("Classify # FAIL\n"); + printf("Distance # PASS\n"); + } + + printf("POWER SAVE ON\n"); + write(NM_POWER_SAVE,0); + t.stop(); + printf("Total Time : %d ms\n",t.read_ms()); + + } @@ -72,7 +149,7 @@ } //data learn ncnt = learn(vector, NEURONSIZE, i); //input : data, neuronsize, cat, return : ncount - printf("ncount # %d\n",ncnt); + //printf("ncount # %d\n",ncnt); if(ncnt == old_ncnt) //ncount가 변화가 없으면 return 0; //학습 실패 or ncount 레지스터 불량 @@ -81,10 +158,10 @@ //test display - printf("vector : "); - for(int j=0;j<NEURONSIZE;j++) - printf(" %d,",vector[j]); - printf(" cat : %d\n", i); + // printf("vector : "); +// for(int j=0;j<NEURONSIZE;j++) +// printf(" %d,",vector[j]); +// printf(" cat : %d\n", i); } //학습 완료 후 ncount가 MAXNEURONS보다 작을 경우 if(ncnt < MAXNEURONS) @@ -92,5 +169,28 @@ return ncnt; //정상 출력 } +int data_classify(void) +{ + int distance, cat, nid; + //number of neuron 1156 + for(int i=1;i<=MAXNEURONS;i++){ + //test 벡터 생성 + for(int j =0;j<NEURONSIZE;j=j+2){ //size of neuron 256 + vector[j] = i>>8; //upper bit save + vector[j+1] = i; //low bit save + } + //분류(knn모드, k=2) + //input : data, data length output : distance, category, Neuron ID return 인식된 데이터 갯수 + int nsr = classify(vector, NEURONSIZE, &distance, &cat, &nid); + if(i!=cat) + return 0; //분류 실패 + if(distance != 0) + return 2; //distance error +// +// printf(" neuron# %d \t", nid); +// printf(" distance = %d,\t ", distance); +// printf(" cat = %d\n", cat); + } + return 1; //정상 분류 +} -