2013-10-11 5 views
0

나는 벡터 1x10000 더블 을 가지고 있다고 말하고 나는이 벡터에 몇 가지 작업을 수행하고 그것을 새로운 벡터 B 1x1000000 double (A * 100)에 저장하고 싶다.첨가제 루프 matlab

예. 그리고 나는 A (1)에 대한 연산을하고 싶습니다. 곱하기 2를 곱하면 100 번됩니다. 결과를 벡터 B의 1 : 100에 배치합니다. 그런 다음 A (2)를 사용하여 같은 작업을 수행하지만 결과를 벡터 B의 101 : 200 위치에 저장합니다.

어떻게하면됩니까?

Ive는 for 루프를 두 번 시도했지만 두 번째 라운드가 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)의 새로운 값을 계산한다

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

예 :

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

다음 적절한 값으로 반복 N 회 각 벡터 B 있도록 repmatreshape를 사용 A = 1:3, n = 10 인 경우 출력은 30 x 1 벡터이며 B(1:10), B(11:20)B(21:30)의 각 요소는 모두 2, 4, and 6 값을 각각 포함합니다.