Рассчитайте периодограмму, используя переменные 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
, но он говорит:
индекс должен быть реальным положительные целые числа или логические выражения.
Да, очевидная ошибка. Вы не называете реальные положительные целые числа или логики как индекс, а 't (:, f)'. Как вы определили матричную запись в M (3,4.2)? Скорее странно. Какова цель 't (:, f)'? 't' - это вектор строки, поэтому вызов всех строк является довольно избыточным. 'f' содержит 95 значений, а' t' имеет 82 значения. Таким образом, вы не можете просто заменить «f» на свой номер индекса. – Adriaan
Начните с одного значения для 'f' и убедитесь, что вы получили правильный ответ. Я не уверен, что 'T' даже правилен для одного значения ... не говоря уже о полном цикле. Это еще до того, как вы попытаетесь зациклиться. Некоторые проблемы с 'tan (sum (....) ./ sum (....)' ... нет необходимости в точечном операторе для двух одиночных значений. И 't (:, f)' действительно не делает смысл там – Matt
@toolic, если вы собираетесь редактировать вопросы, пожалуйста, получите * все * встроенного кода. Если вы не можете идентифицировать его, тогда не редактируйте вопрос ... – excaza