2013-12-08 3 views
2

Как генерировать случайные фазы вектор размера 1xN следующие этих условий:Генерация случайных фазы факторов

N = [4,8,16,32]; % number of columns in output phase matrix (P_out) 
theta= 1xN random values of theta 
P=exp(j*theta) % Phase factor 
P_out= 1xN output row vector for different N values of theeta 

условия для выбора тета:

  1. 0 <= theta<= 2*pi % Range of theta
  2. Каждый тета является любое целое число кратное наименьшего ненулевого тока

    например, например, для N = 4: theta=[45,0,180,225]% случайные углы

    здесь каждое значение тета является кратным 45: [45x0 = 45, 45x1 = 45, 45x4 = 180, 45x5 = 225]

Любая помощь ценится , приветствует.

ответ

1

Вы можете сделать это следующим образом:

N = 8;          % number of angles 
A0 = randi(360);       % random minimum angle in deg 
A1 = N*A0;         % maximum angle 
theta = linspace(A0,A1,N);     % equidistant angles 
theta = theta(randperm(numel(theta))); % shuffle array 
P = exp(1i.*theta*pi/180);     % calculate phase factor 

или directy в радианах:

A0 = 0.2*pi; 
A1 = N*A0; 
... 
P = exp(1i.*theta); 

Если вы хотите наборы P для различных значений N вам нужно хранить массивы в клетке array (или struct), поскольку каждый массив P имеет разную длину.

Для достижения этой цели вы можете использовать cellfun.

function P_out = getPhaseFactorSet() 

N = {4,8,16,32};        % number of angles 
P_out = cellfun(@getPhaseFactor,N) 

end 

function P = getPhaseFactor(N) 
A0 = randi(360);        % random minimum angle in deg 
A1 = N*A0;         % maximum angle 
theta = linspace(A0,A1,N);     % equidistant angles 
theta = theta(randperm(numel(theta))); % shuffle array 
P{1} = exp(1i.*theta*pi/180);    % calculate phase factor 
end 
+0

Спасибо за ответ, но мое требование случайные углы (1xN) и каждый представляет собой целое число, кратное (потому что тета может быть равна нулю также, но не обязательно всегда) наименьшего ненулевого angle.In вашего значения кода из тета будет одинаковым каждый раз. – user2888999

+0

@ Это не ясно из вашего вопроса, посмотрите на редактирование – thewaywewalk

+0

Извините, что беспокою вас, но с вашим кодом мне нужно установить минимальный и максимальный угол. Нельзя ли это случайный процесс, чтобы получить углы случайным образом от 0 до 360 градусов. – user2888999

Смежные вопросы