2013-10-11 44 views
0

說我有一個向量A 1x10000雙 ,我想對這個向量做一些操作,並將它存儲在一個新的向量B 1x1000000 double(A * 100)中。添加劑迴路matlab

E.g.我想對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 
+2

你能否提供一個簡單的例子,其中A只有3個元素? – Dan

+0

發佈您的代碼,它會幫助我們幫助您! – Tyler

+0

A = 1x3和B = 1x6 然後,我想要做一個循環,需要A(1)* 2。並存儲在B(1)和B(2)中。之後,我想A(2)* 2並將其存儲在B(3)和B(4)中。最後我想要A(3)* 2並存儲在B(5)和B(6)中。 我想這可能很簡單,但不知何故,我只是無法弄清楚。 – user2871474

回答

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 
1

使用

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

其中n是尺寸增加係數(在您的示例中爲100或2)。

如果您不確定此解決方案的工作原理,請參閱repmatreshape的文檔。

0

首先,計算A的新值:

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

然後使用repmatreshape使一個矢量B用適當的值的每個重複n次:

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

例如如果是A = 1:3, n = 10,則輸出是30×1向量,其中B(1:10),B(11:20)B(21:30)中的每個元素都分別包含值2, 4, and 6