【问题标题】:Matlab : reshaping matrix from a vectorMatlab:从向量重塑矩阵
【发布时间】:2015-10-30 02:00:51
【问题描述】:

我一直在 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=[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')

它有效,但是当我读取大数据时,它很慢。

有什么好的方法可以重塑这种数据吗?

【问题讨论】:

  • 你有没有忘记这里的逗号:B=[ch1 ch2 ch3 ;ch1 ch2 ch3; ch1 ch2 ch3 ;ch1 ch2 ch3];
  • @brodroll 那太容易了。 ;)
  • @brodroll 这只是一个例子。一般通道数在 30 以上,采样率在 10kHz 以上。以你的方式,真的很辛苦。

标签: matlab


【解决方案1】:

我认为这是你想要的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多