2 차원 배열의 푸리에 변환이 필요한 프로젝트에서 작업 중입니다.iPhone Accelerate Framework 2 차원 배열을 변환하는 FFT
그러나 FFT 또는 특히 vDSP 전문가는 아닙니다.
나는 here, here 또는 here의 예제를 보았지만 그것들은 1D 어레이 용이거나 이해할 수 없다.
if (!_double2DArray) {
_double2DArray = (double**) malloc([traces count]*sizeof(double*));
}
for (NSInteger i=0; i<[traces count]; i++) {
Trace *trace = [traces objectAtIndex:i];
_double2DArray[i] = (double*) malloc(length*sizeof(double));
NSMutableArray *traceAxis = [trace getTraceAxis:axis];
for (NSInteger j=0; j<[[trace traceLength] integerValue]; j++) {
_double2DArray[i][j] = [[traceAxis objectAtIndex:j] doubleValue];
}
}
@dwbrito : Objective-C는 C와 같은 공식 지정이 없지만 C의 수퍼 세트라고하며 C는 가변 길이 배열을 지원합니다. 예를 들어, 다음 코드는 Apple clang 4.0에서 오류없이 컴파일됩니다 :'void foo (int a, int b) {float x [a] [b]; float (* y) [a] [b] = malloc (sizeof * y); float (* z) [b] = malloc (a * sizeof * z); }'. 가장 큰 세 번째 대안은 자동 객체가 (스택 크기 제한 때문에) 큰 배열에 더 좋고 간단한 구문'z [i] [j]'에서 사용할 수 있기 때문입니다. –
사실, 제 문제는 적어도 vDSP 샘플에서 2d 어레이를 사용하는 방식이 일반적인 배열 [x] [y]가 아니라 대신 1d 어레이 인 것 같습니다 : https : // developer (신호 * (r * C + c) * 스트라이드) = 체크섬을 확인하십시오. /apple.com/library/mac/ # samplecode/vDSPExamples/Listings/DemonstrateFFT2D_c.html # // apple_ref/doc/uid/DTS10004300-DemonstrateFFT2D_c-DontLinkElementID_7 = "부분) – dwbrito
@dwbrito :이 경우에는 하나의 보폭을 사용하고 무시할 수 있습니다. 그런 다음 인덱싱은'Signal [r * C + c]'입니다. 이것은'S [r] [c]'와 같습니다. 'S'는 cast (float (*) [C]) 신호와 같이 2 차원으로 변환 된 1 차원 배열입니다. 이 변환은 Apple 컴파일러를 사용하는 Apple 시스템에서 안전합니다. 또는 1 차원 배열을 유지하면서 그림과 같이 인덱스 산술을 명시 적으로 사용할 수 있습니다. (스트라이드는 일부 요소 만 사용하여 행렬 또는 다운 샘플링 단일 행을 가로 지르는 목적을 가지고 있습니다. 대부분 실제 배열에 대해 하나의 스트라이드를 사용해야합니다.) –