제발, F(8*409600*3)
행렬이 있습니다. 나는 B(8*512*3*800)
행렬 (각각의 행은 800
부분으로 나눠야 함)로 바꾼다. 그리고 나서 (FFT)
을 개의 행으로 변환하고 그것을 켤레로 곱하고 상수로 나눈 다음에 요소의 합계를 구해야한다. 제 4 차원의 각 행의 수와 제 4 차원 (800)
내의 슬라이스의 수로 평균화한다. 내 말은4D 행렬에서 FFT 및 합계 찾기
(B(1,1,1,1) +B(1,1,1,2)+B(1,1,1,3)……+B(1,1,1,800))/800
(B(1,2,1,1) +B(1,2,1,2)+B(1,2,1,3)……+B(1,2,1,800))/800
등 각 행에 대해서도 마찬가지입니다.
아래 코드를 사용하면 올바르게 작동하지만 올바른 결과를 얻지 못합니다.
F=rand(8,409600,3);
B=reshape(F,8,512,3,[]);
C1=fft(B, [],2);
C2=C1.*conj(C1);
C3=C2/(3000);
C4=sum(C3,4)/800;
덕분에
(1) 입력 데이터가 무작위 인 경우 올바른 결과가 아님을 어떻게 알 수 있습니까? 'C4'가 잘못된 크기입니까? (2) B는 4 차원이다. 3 차원에서 1D FFT를, 3 차원 및 4 차원에서 2D FFT를 사용 하시겠습니까? (귀하의 코드는 길이가 512 요소 인 * 초 * 차원을 따라 1D FFT를 사용합니다.) (3)'F'의 두 번째 차원의 길이는 409600 = 512 * 800입니다. 그러나 그 '재구성'은 409600 개의 요소를 함께 유지하지 않을 것입니다 : B의 3 차원 (길이 3)은 512와 800 사이입니다. 정말로 원하는 것입니까? –
위의 (3)에 대해서 : 단순화 된 2D 예제를 생각해 보자 :'F = [1:10; 101 : 110; 1001 : 1010]. 'F ='는 10 x 3이며, 0에서 100까지 1000에서 시작하여 1부터 10까지를 포함합니다.'B1 = reshape (F, 5, 2, []))'를 수행하면 길이 10의 첫 번째 차원은 B와 B의 첫 번째 페이지는 '1 : 5'가 될 것이며, 더 중요하게는 두 개의 차원으로 나뉘어집니다. '6 : 10'을 두 개의 열로 나타냅니다. * 그러나 *,'B2 = reshape (F, 5, [], 2)'는 매우 다른 것을 할 것이고'B2'는'F'의 세개의 컬럼을 혼합 할 것입니다. 네가 그걸 원하는지 확신 할 수 없어. –
@Ahmed Fasih, 감사합니다.그 결과에 대한 음모가 있는데 그것이 맞지 않다는 것을 알았습니다. 실제 데이터를 가지고 있지만 이것은 단지 예일뿐입니다. 원래 데이터는 8 * 409600 * 3이고 PSD (power spectral density)의 평균을 구해야합니다. 그리고 그것을하기 위해, 나는 800 부분으로 (8 * 409600)를 깨야 만한다. 각 부분은 512 점을 가진다. 그 후, 나는 각 512 포인트에 대해 FFT를 찾아 공액으로 곱하고 여기에있는 상수 (나눗셈 * 주파수 해상도)로 나눈 다음 512 포인트를 가진 한 행에 대해 PSD를 얻습니다. – user6052232