用零填充重塑矩阵

时间:2014-11-15 06:19:46

标签: matlab matrix

我正在使用重塑功能处理矩阵。我有一个矩阵大小990 x 8。首先,我将重构为A x 400,其中A将被确定为s.t 990x8是由400设计的。因此,我们必须添加80个零作为填充。所以,A是

 (990+10)/400=200

我的新矩阵是20 x 400。现在我在A中设置了一行作为错误行。第二步,我想用该行错误恢复我的orignal矩阵大小990 x 8。因此,数字行错误将是

400/8=50 rows 

当您看到下图时,非常清楚。现在我想通过matlab代码实现这个方案。让我看看我的实现如下。但是,它与我的目标不相似。它在单个行中显示为-1(例如:[0 0 -1 0 0 ..],真正的答案必须是[0 0 0 ...]或[-1 -1 -1 ..],因为如果没有行错误只会包含0或1,错误行只有-1值)。请修复帮助我

    bitstream = reshape( orignalPacket.', [],1); %size 990 x 8
    %% Add padding        
    bitstream(end+80)=0; % add zeros padding at the end
    %% New matrix 20 x 400
    newmatrix= reshape( bitstream.', [],psize);
    %% Add one error row
    newmatrix(5,:)=-1; %row 5th is error

    %% Recovery to orignal packet
    bitstream_re = reshape( newmatrix, [],1);
    bitstream_re(end-80+1:end)=[];%% Remove padding
    matrix_re=reshape(permute(reshape(bitstream_re,size(bitstream_re,2),8,[]),[2 1 3]),8,[]);
    matrix_re=matrix_re'; %Recovery matrix- 

1 个答案:

答案 0 :(得分:1)

您遇到的问题是因为MATLAB使用了列主索引,而您的操作则是逐行索引到矩阵中。

这里的修改后的代码似乎有效 -

error_row = 5; %// row index to be set as error row

bitstream = orignalPacket; %// Assuming orignalPacket is of size 990 x 8

bitstream(end+10,:)=0; %// pad with 10 rows of zeros at the end

%// New matrix 20 x 400
newmatrix = reshape(bitstream.',400,20).';

%// Add one error row
newmatrix(error_row,:)=-1; %// row 5th is error

%// Recovery orignal packet
bitstream_re = reshape(newmatrix.',1,[]); %//'
bitstream_re(end-80+1:end)=[]; %// Remove padding

matrix_re = reshape(bitstream_re,8,[]).'; %//'# Recovered matrix

顺便说一下,你可以实现相同的输出matrix_re而不需要用这些重新整形和繁琐的索引 -

matrix_re = orignalPacket; %// Assuming orignalPacket is of size 990 x 8
error_row = 5; %// row index to be set as error row
matrix_re(50*(error_row-1) + 1 :50*error_row,:) = -1;