0

假设我有一个向量 A 1x10000 double,我想对这个向量进行一些操作,并将其存储在一个新的向量 B 1x1000000 double(A*100) 中。

例如,我想对 A(1) 进行操作,比如说乘以 2,执行 100 次。并将结果放在向量 B 的 1:100 位置。然后取 A(2),并进行相同的操作,但将这些结果存储在向量 B 的 101:200 位置。

我怎样才能做到这一点?

我尝试过使用双循环,但我不知道如何更改它,以便第二轮存储在 101:200 位置。

这是我一直在尝试做的代码:

    % Random bitstream
msg = rand(1,10000) > 0.5;

% generate phaseshift bitstream with phaseshift +-180deg(+-1)
L = length(msg);

newmsg = zeros(1,L);
for i=1:L,
    if msg(i) == 0
        newmsg(i) = -1;
    else
        newmsg(i) = 1;
    end
end

% t = 0:.1:(L/100)-1;
t = 0:0.1:10-0.1;
fc  = 10e6;
fs = 2*fc;
sint = sin(2*pi*fc/fs*t);

%plot sine
plot(t*1/fs,sint);


%% This is the problem
Tx1 = zeros(1,L*length(t));
m = 0;
for j=1:L*length(t),
    m = m+1;
    if (m < L)
        for k=1:L,
            Tx1(k) = sint.*newmsg(m);
        end
    end
end 
4

3 回答 3

1

利用

B = reshape(repmat(A*2,n,1),1,[])

哪里n是尺寸增加因子(在您的示例中为 100 或 2)。

如果您不确定此解决方案的工作原理repmat,请参阅文档。reshape

于 2013-10-11T15:26:54.540 回答
0

首先,计算 A 的新值:

A2 = A*2;  % for your case, sint.*newmsg should work

然后使用repmatandreshape制作一个向量 B ,其中每个值重复 n 次:

B = repmat(A2,[n,1]);
l = length(A2)*n;
B = reshape(B,[l,1]);

例如,如果A = 1:3, n = 10,则输出是一个 30 x 1 向量,其中 , 和 中的每个元素B(1:10)B(11:20)分别B(21:30)包含值2, 4, and 6

于 2013-10-11T15:39:24.170 回答
0

我希望,这段代码能解决你的问题,但你必须稍微修改一下:

a = 1:1:10 ;
b = zeros(1,length(a)*10) ;
for (i =1:length(a)),
    k = ones (1,10) * a(i) ;
    for (jj = 1 : 10),
        bb(1,((i-1)*10)+jj) = k (i) ;
    end
end
于 2013-10-11T15:24:33.743 回答