Matlab:从向量重塑矩阵
我已经在Labview中制作了一个多通道数据采集系统 并且,我将保存的二进制文件带入Matlab进行后处理 我需要根据频道对文件数据进行排序 下面是一个例子 具有3个多通道采集和5Hz采样率 第一通道电压:1V(恒定) 第二通道电压:2V(恒定) 第三通道电压:3V(恒定) 如果我在这种情况下采集信号4秒,保存的数据如下所示,因为系统将信号保存在缓冲区中,每秒一次,保存在单个文件中Matlab:从向量重塑矩阵,matlab,Matlab,我已经在Labview中制作了一个多通道数据采集系统 并且,我将保存的二进制文件带入Matlab进行后处理 我需要根据频道对文件数据进行排序 下面是一个例子 具有3个多通道采集和5Hz采样率 第一通道电压:1V(恒定) 第二通道电压:2V(恒定) 第三通道电压:3V(恒定) 如果我在这种情况下采集信号4秒,保存的数据如下所示,因为系统将信号保存在缓冲区中,每秒一次,保存在单个文件中 ch1=[1 1 1 1 1]; ch2=[2 2 2 2 2]; ch3=[3 3 3 3 3]; B=[ch
ch1=[1 1 1 1 1];
ch2=[2 2 2 2 2];
ch3=[3 3 3 3 3];
B=[ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3];
我想像下面这样重新排列数据
desiredB=[ch1 ch1 ch1 ch1; ch2 ch2 ch2 ch2; ch3 ch3 ch3 ch3];
为了重新排列B,我编写了如下代码,其中有两个for循环
fs=5; %sampling frequency
nCh=3; %number of channels
nB=length(B);
C=zeros(nB/fs,fs);
for i=1:nB/fs;
temp=B((i-1)*fs+1:fs*i);
C(i,1:fs)=temp;
end
sizeC=size(C);
T=sizeC(1)/nCh;
D=zeros(nCh,fs*T);
for j=1:T
temp2=C(3*(j-1)+1:3*j,:);
D(:,(j-1)*fs+1:j*fs)=temp2;
end
t_axis=0:1/fs:T-1/fs;
plot(t_axis,D','linewidth',2),grid on
axis([0 3.8 0 5])
xlabel('time(sec)')
ylabel('voltage(V)')
legend('first channel','second channel','third channel')
它起作用了,但当我阅读大量数据时,速度很慢
有什么好方法可以重塑此类数据吗?我想这正是您想要的:
fs=5; %sampling frequency
nCh=3; %number of channels
ch1=[11 12 13 14 15];
ch2=[21 22 23 24 25];
ch3=[31 32 33 34 35];
B=[ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3];
C = reshape(B, fs, nCh, []);
D = permute(C, [1, 3, 2]);
E = reshape(D, [], nCh).'
E =
11 12 13 14 15 11 12 13 14 15 11 12 13 14 15 11 12 13 14 15
21 22 23 24 25 21 22 23 24 25 21 22 23 24 25 21 22 23 24 25
31 32 33 34 35 31 32 33 34 35 31 32 33 34 35 31 32 33 34 35
我想这正是你想要的:
fs=5; %sampling frequency
nCh=3; %number of channels
ch1=[11 12 13 14 15];
ch2=[21 22 23 24 25];
ch3=[31 32 33 34 35];
B=[ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3];
C = reshape(B, fs, nCh, []);
D = permute(C, [1, 3, 2]);
E = reshape(D, [], nCh).'
E =
11 12 13 14 15 11 12 13 14 15 11 12 13 14 15 11 12 13 14 15
21 22 23 24 25 21 22 23 24 25 21 22 23 24 25 21 22 23 24 25
31 32 33 34 35 31 32 33 34 35 31 32 33 34 35 31 32 33 34 35
我想这正是你想要的:
fs=5; %sampling frequency
nCh=3; %number of channels
ch1=[11 12 13 14 15];
ch2=[21 22 23 24 25];
ch3=[31 32 33 34 35];
B=[ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3];
C = reshape(B, fs, nCh, []);
D = permute(C, [1, 3, 2]);
E = reshape(D, [], nCh).'
E =
11 12 13 14 15 11 12 13 14 15 11 12 13 14 15 11 12 13 14 15
21 22 23 24 25 21 22 23 24 25 21 22 23 24 25 21 22 23 24 25
31 32 33 34 35 31 32 33 34 35 31 32 33 34 35 31 32 33 34 35
我想这正是你想要的:
fs=5; %sampling frequency
nCh=3; %number of channels
ch1=[11 12 13 14 15];
ch2=[21 22 23 24 25];
ch3=[31 32 33 34 35];
B=[ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3 ch1 ch2 ch3];
C = reshape(B, fs, nCh, []);
D = permute(C, [1, 3, 2]);
E = reshape(D, [], nCh).'
E =
11 12 13 14 15 11 12 13 14 15 11 12 13 14 15 11 12 13 14 15
21 22 23 24 25 21 22 23 24 25 21 22 23 24 25 21 22 23 24 25
31 32 33 34 35 31 32 33 34 35 31 32 33 34 35 31 32 33 34 35
你有没有忘记这里的逗号:
B=[ch1-ch2-ch3;ch1-ch2-ch3;ch1-ch2-ch3;ch1-ch2-ch3]代码>?@brodroll那太容易了。;)@布罗德罗尔,这只是一个例子。一般信道数在30以上,采样率在10kHz以上。按照你的方式,这将是非常艰苦的工作。你有没有忘记这里的逗号:B=[ch1 ch2 ch3;ch1 ch2 ch3;ch1 ch2 ch3;ch1 ch2 ch3]代码>?@brodroll那太容易了。;)@布罗德罗尔,这只是一个例子。一般信道数在30以上,采样率在10kHz以上。按照你的方式,这将是非常艰苦的工作。你有没有忘记这里的逗号:B=[ch1 ch2 ch3;ch1 ch2 ch3;ch1 ch2 ch3;ch1 ch2 ch3]代码>?@brodroll那太容易了。;)@布罗德罗尔,这只是一个例子。一般信道数在30以上,采样率在10kHz以上。按照你的方式,这将是非常艰苦的工作。你有没有忘记这里的逗号:B=[ch1 ch2 ch3;ch1 ch2 ch3;ch1 ch2 ch3;ch1 ch2 ch3]代码>?@brodroll那太容易了。;)@布罗德罗尔,这只是一个例子。一般信道数在30以上,采样率在10kHz以上。以你的方式,这将是非常艰苦的工作。