在Matlab

时间:2018-04-02 13:12:30

标签: matlab random signal-processing

假设我在单个列向量中有一个包含10,000个样本的信号,如[10000x1]矩阵

sig =    -0.1272
         -0.1124
         -0.1126
            .
            .
            .

并且,我想重新采样/分段所有可能数量的集合,每个集合包含1,000个样本。当我尝试使用以下代码对连续底层缓冲区应用随机缓冲区功能时:

new_sam = buffer(sig, 1000);

到目前为止生成的结果是[1000x10]矩阵,只有10个随机的1000个样本集。

new_sam = -0.0374    0.0622   -0.0773    0.0655   -0.0410   -0.0859   -0.0647    0.0424   -0.0615   -0.0615
          -0.0820    0.0873   -0.0822    0.0105   -0.0060   -0.0659   -0.0948   -0.0277   -0.0814    0.0036
          -0.0666    0.0475   -0.0772    0.0855   -0.0260   -0.0610   -0.0848    0.0123   -0.1014    0.0186
             .         .         .          .         .         .          .        .        .         .
             .         .         .          .         .         .          .        .        .         .

我想要得到的实际样本是所有可能的数字集(超过500个或更多N个随机集,每个集合1,000个样本),例如[1000 x N],但每1,000个样本应该按顺序排列他们的信号值。但是,每组都应该在信号中随机化。

1 个答案:

答案 0 :(得分:3)

使用randperm排序:

M=10*1000;
K=1000;
N=10;

sig=100*randn(M,1,'single');

idxs=cell2mat(arrayfun(@(i)sort(randperm(M,K)),1:N,'Uniform',0)')';

sig_samp=sig(idxs);