2016-07-05 2 views
0

배열의 모든 요소를 ​​처리하는 데 문제가 있습니다. 두 개의 서로 다른 배열 (x[]y[])을 가지고 있으며, 각 배열에는 40000 개의 요소가 있습니다. 저는 슬라이딩 윈도우를 사용하여 블록 들간의 상호 상관을 계산하기 위해 각각 5 개 요소를 스윕했습니다 (x[]의 5 개 요소와 y[]의 5 개 요소). 계산이 끝나면 두 번째 Window 및 배열 끝으로 계속 스윕됩니다. 상관 관계 결과를 가져 와서 새로운 배열에 저장할 수 있습니까? 입력 값은 gc_us_dist_datagc_us_prox_data이며 Correlation을 계산할 때 결과 배열을 수신하고 싶습니다. 모두의 도움을 받기를 바랍니다.처리 할 배열의 모든 요소를 ​​다른 배열에 저장하십시오.

const int16_t gc_us_dist_data[SAMPLES] //4000 SAMPLES 
    const int16_t gc_us_prox_data[SAMPLES] //4000 SAMPLES 
    /* This function is real implementation of the sliding window algorithm */ 
     int slide_window_01(int buffer1[], int N, int buffer_len){ 

     int i = 0, j = 0, s; 
     int16_t dist[SAMPLES]; 

     for(j=0 ; j + N < buffer_len; j++){ 
      /* Window starts at index 0 and is of size N */ 
      // printf("\nCurrent window :"); 
      for(s =j; s<j+N; s++){ 
       dist[SAMPLES] = buffer1[s]; 
      } 
     } 
    } 

     int slide_window_02(int buffer2[], int N, int buffer_len){ 

      int i = 0, j = 0, s; 
      int16_t prox[SAMPLES]; 

      for(j=0 ; j + N < buffer_len; j++){ 
       /* Window starts at index 0 and is of size N */ 
       // printf("\nCurrent window :"); 
       for(s =j; s<j+N; s++){ 
        prox[SAMPLES] = buffer2[s]; 
       } 
      } 
     } 
    /*------------- Cross Correlation between two signals ----------------------- 
     ---------------------------------------------------------------------------*/ 
    // x = gc_us_dist_data, y = gc_us_prox_data 

    int correlation(int dist[], int prox[]){ 

     int xy[SAMPLES], xsquare[SAMPLES], ysquare[SAMPLES]; 
     int i, xsum, ysum, xysum, xsqr_sum, ysqr_sum; 
     float coeff[SAMPLES], num, deno; 

     xsum = ysum = xysum = xsqr_sum = ysqr_sum = 0; 

     /* find the needed data to manipulate correlation coeff */ 
     for (i = 0; i < SAMPLES; i++) 
     { 
      xy[i] = dist[i] * prox[i]; 
      xsquare[i] = dist[i] * dist[i]; 
      ysquare[i] = prox[i] * prox[i]; 
      xsum = xsum + dist[i]; 
      ysum = ysum + prox[i]; 
      xysum = xysum + xy[i]; 
      xsqr_sum = xsqr_sum + xsquare[i]; 
      ysqr_sum = ysqr_sum + ysquare[i]; 
     } 

     num = 1.0 * ((SAMPLES * xysum) - (xsum * ysum)); 
     deno = 1.0 * ((SAMPLES * xsqr_sum - xsum * xsum)* (SAMPLES * ysqr_sum - ysum * ysum)); 

     /* calculate correlation coefficient */ 
     for(int i=0; i < SAMPLES; i++) 
     { 
      coeff[i] = num/sqrt(deno); 
     } 

    } 

int main(void) 
{ 
int16_t buffer1[SAMPLES], dist[SAMPLES]; 
    int16_t buffer2[SAMPLES], prox[SAMPLES]; 
    memcpy(&buffer1, &gc_us_dist_data, sizeof buffer1); //copy all elements to buffer 
    memcpy(&buffer2, &gc_us_prox_data, sizeof buffer2); //copy all elements to buffer 
    const int N = 5; 
    int size1 = sizeof(buffer1)/ sizeof(buffer1[0]); 
    int size2 = sizeof(buffer2)/ sizeof(buffer2[0]); 
    slide_window_01(buffer1,N,size1); 
    slide_window_02(buffer2,N,size2); 

    correlation(dist, prox); 
} 
+1

당신이 직면하는 어떤 문제? – Rohan

+1

"코드가 작동하지 않습니다"라고 자세히 설명해 주실 수 있습니까? * 어떻게 작동하지 않습니까? 그것은 형성되지 않습니까? 그것은 추락합니까? 예기치 않은 결과가 있습니까? [좋은 질문을하는 법을 읽어보십시오] (http://stackoverflow.com/help/how-to-ask). –

+0

Correlation() 함수의 결과를 얻을 수 없습니다. 각 블록 (x [] 및 y []) 슬라이딩 윈도우를 계산 한 후 상관 관계 결과를 수신하고 싶습니다. –

답변

0

slide_window_01slide_window_02은 함수 호출 후 볼 수 있습니다 아무것도하지 않습니다.

함수가 반환 되 자마자 손실되는 로컬 배열 (예 : int16_t dist[SAMPLES];)에 값을 채우기 만하면됩니다.

함수의 로컬 배열 int16_t dist[SAMPLES];은 메인의 dist[SAMPLES]과 아무 관련이 없습니다. 따라서 - 함수를 호출 할 때 주 변수가 이 아니고이 아닙니다.

이것은 초기화되지 않은 배열을 사용하여 correlation으로 전화하는 것을 의미합니다. 즉, 의미없는 결과를 얻지 못합니다 (실제로 정의되지 않은 동작이 있음). 기능에

당신이 유효한 인덱스가 0 ... SAMPLES-1

중 아무것도 반환하지 않습니다 기능 correlation만큼 불법

dist[SAMPLES] = buffer1[s]; 

있습니다. 모든 결과는 로컬에 저장되므로 함수가 반환 될 때 결과가 손실됩니다.

배열을 수정하는 함수가 필요한 경우에는 포인터로 이루어진 배열을 전달하면됩니다.

간단한 예 :

#include <stdio.h> 

void incrementArray(int* dst, int* src, int size) 
{ 
    int i; 
    for (i=0; i < size; ++i) 
    { 
     dst[i] = src[i] + 1; 
    } 
} 

int main(void) 
{ 
    int i; 
    int x[5] = {1, 2, 3, 4, 5}; 
    int result[5]; 

    // Print start values for x 
    for (i=0; i<5; ++i) 
    { 
     printf("%d ", x[i]); 
    } 
    printf("\n"); 

    // Call function 
    incrementArray(result, x, 5); 

    // Print result 
    for (i=0; i<5; ++i) 
    { 
     printf("%d ", result[i]); 
    } 
    printf("\n"); 

    return 0; 
} 

출력 :

1 2 3 4 5 
2 3 4 5 6 
+0

slide_window_01 및 slide_window_02를 사용하여 각 요소를 가져오고, 두 요소 (slide_window_01, slide_window_01)에서 이러한 요소를 컴퓨팅과의 상관 관계 함수로 푸시합니다. 그러나 아무 일도 일어나지 않습니다. –

+0

'slide_window_01'과'slide_window_02'에서 데이터를 가져 와서'correlation' 함수로 푸시하여 값을 계산하고 싶습니다. 그 후 결과를 새로운 배열에 저장할 수 있습니다. 하지만 기능이 제대로 작동하지 않는 것 같습니다. –

+0

@ HuỳnhNgọcTân - 함수가 로컬 변수에만 쓰기 때문에 작동하지 않습니다. – 4386427