2016-06-28 1 views
1
I는 크기 (A)의 이차원 배열 크기 N의 일차원 배열로 변환해야

겹치는 2 차원 배열의 1 차원 배열을 변환 * B> N. 우리는 이러한 경우를 보자

int oneDimensionalArray[6] = {7, 8, 10, 11, 12, 15}; 
//then the second array would be 
int twoDimensionalArray[2][4] = {{7, 8, 10, 11}, 
           {10, 11, 12, 15}}; 

이것은 디지털 사운드 프로세싱에 사용되는 소위 중첩 합산 방식에 사용됩니다. 나는 부적절한 결과를 제공 이러한 접근 시도 : 나는 또한 모듈로 연산을 이용하여 관계를 찾는 시도했습니다

for(unsigned long i = 0; i < amountOfWindows; i++) 
    { 
     for(unsigned long j = hopSize; j < windowLength; j++) 
     { 
      //buffer without the overlapping 
      if((i * amountOfWindows + j) >= bufferLength) 
       break; 

      windowedBuffer[i][j] = unwindowedBuffer[i * amountOfWindows + j]; 
     } 
    } 

    for(unsigned long i = 1; i < amountOfWindows; i++) 
    { 
     for(unsigned long j = 0; j < hopSize; j++) 
     { 
      // Filling the overlapping region 
      windowedBuffer[i][j] = windowedBuffer[i-1][windowLength - hopSize + i]; 
     } 
    } 

을하지만 오른쪽 하나를 찾을 수 없습니다.

windowedBuffer[m][n % (windowLength - hopSize)] = unwindowedBuffer[n]; 
+0

그리고'j + 2 * i'? – Jarod42

+0

무슨 소리 야? 그게 뭐야? – Kokos34

+0

중복이 '2'입니다. – Jarod42

답변

1

이미 (귀하의 코멘트에서) hopSize을 알고 있기 때문에, 당신이 원하는 것은 단순히 :

for (size_t i = 0; i < amountOfWindows; ++i) { 
    for (size_t j = 0; j < windowLength; ++j) { 
     windowedBuffer[i][j] = unwindowedBuffer[i * hopSize + j]; 
    } 
} 

경우 amountOfWindows, windowLengthhopSize 당신이 매개 변수입니다 이것은 내가 시도한 하나입니다 (예에서 2, 4 및 2 번).