다소 쉬운 질문이 있지만 쉽게 해결할 수 없습니다. 물건은 이것과 같다, 길이가 32 인 x 신호를 가지고있다. x[32]
. 그리고이 배열은 각 단계에서 실시간 신호의 값을 얻습니다. 1 단계에서 나는 [0:31] 값, 2 단계 [1:32], 3 단계 [2:33] 등의 값을 얻습니다. 중첩하려는 최종 신호를 얻으려면이 값을 추가하고 배열에 저장하십시오. 이것을 시도하는 방법은 특정 길이의 배열을 선언하는 것입니다. 150이라고 가정 해 보겠습니다. xfinal[150]
. 그리고 xfinal을 채우기 위해 나는 이것을한다.중복 값을 배열에 저장하는 중
Step 1. xfinal[0:31] = x[0:31].
Step 2. xfinal[1:31] = xfinal[1:31] + x[0:30].
xfinal[32] = x[31];
Step 3. xfinal[2:32] = xfinal[2:32] + x[0:30].
xfinal[33] = x[31];
등등. 이 방법은 x_final에있는 모든 값이 32가 될 때마다 합계가 될 것입니다.
이렇게하려면 C에서 쓴 코드는 (x가 프레임이기 때문에 조금 복잡해 지므로 픽셀을 복사해야합니다. 픽셀에 의해.
void Overlapadd (float **final_X, float **all_frames_X, int add_index,int w, int h)
{
for (int i=0; i< frame_size ; i++) { // for every pixel
for(int j=add_index; j<add_index+32; j++){
final_X[j][i] += all_frames_S[j-add_index][i];
}
}
add_index++;
}
나는 그것을 저장할 왜이 코드의 문제는 내가 시간의 큰 기간을 실행할 때 final_X
배열을 작성하고 final_X[add_index+32]
는 메모리가 갈 것이다. 이것은이다 순환 방식입니다. 끝까지 도달하면 다시 0으로 돌아갑니다. 문제는 final_X
의 지점에 도달하면 add_index = 60이라고 가정 해 보겠습니다. 따라서 final_X[add_index]
은 32 프레임의 합계가되지만 final_X[add_index+1]
은 단 31 프레임의 일부가 될 것이며, final_X[add_index+2]
은 30 프레임의 일부가 될 것입니다. 그리고이 값은 새 x 값을 추가하여 새 값을 얻는 데 도움이되므로 저에게 중요합니다.
내가 분명히했는지는 모르겠지만 아마도 도움이되기를 바라고 있습니다. 그래서 질문은 어떻게 오버랩하여 신호를 추가하고 오랜 기간 동안 벡터에 저장할 수 있는가하는 것입니다.
질문에서 이해하기 어려운 두 가지가 있습니다. 1) 설명 및 스케치에서 'final_X'를 1 차원 배열로 처리하는 동안 코드에서이 코드를 2 차원으로 사용합니다. 2) "메모리 부족"상태를 어떻게 결정하는지는 명확하지 않습니다. 할당 단계를 포함 할 수 있습니까? –
나는 쉽게 따라 할 수 있도록 final_X를 1 차원 배열로 취급했습니다. x 자체는 배열이므로 final_x는 배열의 배열이되지만 원칙은 동일합니다. 메모리 부족으로 인해 나는 final_X에 대해 150 프레임을 할당하고 어떤 시점에서는 final_X [151]라고 부릅니다. – CRS