Matlab 求4D矩阵中的FFT和求和

Matlab 求4D矩阵中的FFT和求和,matlab,matrix,fft,Matlab,Matrix,Fft,请,我有F(8*409600*3)matrix。我想把它重塑成B(8*512*3*800)矩阵(每一行应该分成800部分),然后我必须为每个(8*512)找到快速傅立叶变换(FFT)行,然后乘以它的共轭数,再除以一个常数,然后我必须找到第四维中每行元素的总和,并用第四维中的切片数求平均值(800)。我是说 (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,

请,我有
F(8*409600*3)
matrix。我想把它重塑成
B(8*512*3*800)
矩阵(每一行应该分成
800
部分),然后我必须为每个
(8*512)找到快速傅立叶变换
(FFT)
行,然后乘以它的共轭数,再除以一个常数,然后我必须找到第四维中每行元素的总和,并用第四维中的切片数求平均值
(800)
。我是说

(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;

谢谢

我想你应该试试
B=重塑(F,8512,[],3)获取8×512×800×3数组

然后做
C1=abs(fft(B,[],2))^2
进行512点FFT并将频谱转换为功率谱。(请注意,对于复杂的
c
conj(c)*c==abs(c)^2
,以保证机器精度。)

然后你想平均这些800512点PSD:
C2=square(平均值(C1,3))。如果不在此处使用
挤压
,则将使用8×512×1×3数组,而
挤压
只是消除了1长度的维度,将
C2
保留为8×512×3数组。我更喜欢在这里使用
mean
,而不是求和除法,因为这更清楚地表明了你想要实现的目标

最后,您似乎有一个
3000
因子,因此:
C3=C2/3000


我是这样想你的问题的。你有八个传感器(麦克风、光电二极管等等)。每个传感器收集409600个样本。你这样做三天。所以你得到了原始的
F
矩阵,它是8乘409600乘3


现在,您想看看三天内每个传感器的功率谱密度是如何变化的。因此,您将每个传感器/天的409600个样本分为800个数据块,每个数据块得到512个样本,数据块之间没有重叠。在上面的代码中,取每个512个长块的FFT,并平均所有800个。这就给您留下了一个8×512×3的阵列,现在您可以得到您想要的:每天每个传感器的PSD估计值。

(1)当您的输入数据是随机的时,您如何知道它不是正确的结果?
C4
尺寸是否错误?(2)
B
是四维的。您想在三维上进行一维FFT,还是在三维和四维上进行二维FFT?(您的代码沿第二维度进行1D FFT,长度为512个元素。)(3)
F
的第二维度长度为409600=512*800。但是,
重塑
不会将409600个元素保持在一起:
B
的第三维(长度3)介于512和800之间。这真的是你想要的吗?关于(3)上面:考虑一个简化的2D例子:<代码> f= [1:10;101:110;1001:1010] < /COD>code>F
是10乘3,从0、100和1000开始包含一到十。如果我做了
B1=重塑(F,5,2,[])
,长度为10的第一个维度将被分成两个维度,长度为5和2,更重要的是,它们将保持在一起:
B1(:,:,1)
B
的第一个“页面”将是
1:5
6:10
,作为两列。然而,
B2=reformate(F,5,[],2)
将做一些非常不同的事情,
B2
将把
F
的三列混合在一起。“我不确定你想要那个。”艾哈迈德·法西,谢谢你。我有结果的曲线图,所以我知道它不正确。我有真实的数据,但这只是一个例子。我的原始数据是8*409600*3,我需要找到PSD(功率谱密度)的平均值,为了做到这一点,我必须将(8*409600)分成800个部分,每个部分有512个点。在那之后,我必须找到每个512点的FFT,然后乘以共轭,除以这里的常数(点数*频率分辨率),然后我将得到一行512点的PSD。我有800行,我需要这样做,然后我必须找到PSD的平均值,求所有列的和,除以800。我想对第二维中的每一行进行FFT。我想在整形后将每个切片保持在一起。B1(:,:,1)这就是为什么我使用B=重塑(F,8512,3,[]);非常感谢你。确切地说,我有一个麦克风的数据(我有八个麦克风),每个麦克风都有(1*409600),我做了三个案例。所以我得到了(8*409600*3)。我必须找到PSD(每个麦克风的平均PSD,为了做到这一点,我使用了上述步骤)