2015-11-09 2 views
-3

Рассчитайте периодограмму, используя переменные a и b, для последовательности частот f, между 1 и 20, с интервалами 0,2. Для каждого значения частоты, найти значение, через уравнениеВыпуск MATLAB для

T = (1/(4*pi*f))*atan(sum(sin(4*pi*f*t(i))))/(sum(cos(4*pi*f*t(i))) 

Затем вычислить значение periodgram для частоты f, P(f), через уравнение:

P(f) = ((sum(MasterYi(i)*sin(2*pi*f(t(i)-T))))^2)/(sum(sin^2(2*pi*f(t(i)-T))))+... ((sum(MasterYi(i)*cos(2*pi*f(t(i)-T))))^2)/(sum(cos^2(2*pi*f(t(i)-T)))) 

Где,

MasterYi = a * sin(2*pi*f(ti-T))+b*cos(2*pi*f(ti-T)) 

У меня есть этот код:

for f = 1:0.2:20 
%t is a value that we know 
t = 1:82; 
T(:,f) = (1./(4*pi.*f)).*tan(sum(sin(4*pi*f*t(:,f))))./(sum(cos(4*pi*f.*t(:,f)))) 

end 

На данный момент мы просто пытаемся получить значения для T, но он говорит:

индекс должен быть реальным положительные целые числа или логические выражения.

+0

Да, очевидная ошибка. Вы не называете реальные положительные целые числа или логики как индекс, а 't (:, f)'. Как вы определили матричную запись в M (3,4.2)? Скорее странно. Какова цель 't (:, f)'? 't' - это вектор строки, поэтому вызов всех строк является довольно избыточным. 'f' содержит 95 значений, а' t' имеет 82 значения. Таким образом, вы не можете просто заменить «f» на свой номер индекса. – Adriaan

+0

Начните с одного значения для 'f' и убедитесь, что вы получили правильный ответ. Я не уверен, что 'T' даже правилен для одного значения ... не говоря уже о полном цикле. Это еще до того, как вы попытаетесь зациклиться. Некоторые проблемы с 'tan (sum (....) ./ sum (....)' ... нет необходимости в точечном операторе для двух одиночных значений. И 't (:, f)' действительно не делает смысл там – Matt

+1

@toolic, если вы собираетесь редактировать вопросы, пожалуйста, получите * все * встроенного кода. Если вы не можете идентифицировать его, тогда не редактируйте вопрос ... – excaza

ответ

0

Я очень смущен относительно того, что происходит. Я делаю предположение, что t(:,f) в вопросе является ошибкой. С помощью этого предположения один из способов решить проблему стоимости T выглядит следующим образом:

% create a function handle to the T equation 
T = @(f,t) (1/(4*pi*f))*atan(sum(sin(4*pi*f*t)))/(sum(cos(4*pi*f*t))); 
% create the t vector 
t = 0:82; 
% create the f vector 
f = 1:.02:20; 
% pre-allocate the results Tresults 
Tresults = zeros(length(f),1); 
% loop over f finding T 
for x = 1:length(f) 
    Tresults(x) = T(f(x), t); 
end 

Проблема в том, нужно использовать целое число в качестве индекса для ваших результатов. f не может быть индексом, поскольку он содержит значения, такие как 1.2, 1.4, 1.6, которые не являются целыми числами. Вы можете следовать этому шаблону и распространить его на остальные ваши уравнения. Я бы продолжил, но в описании проблемы отсутствуют переменные, например ti, a, b. Есть крутые способы решить это, используя bsxfun, но это слишком продвинуто на этом этапе.

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