Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Еще о фокусе и температурах

Помимо попытки найти зависимость фокуса от температуры я еще проанализировал зависимость между температурой зеркала и подкупольного. Результаты получились из разряда "отсутствие результата — тоже результат": зависимость фокуса от температуры разных элементов крайне неявная (коэффициент корреляции мал, стандартное отклонение велико); зависимость температуры зеркала от разности температур между ним и подкупольным та же, что и была раньше (для изменения температуры зеркала на 1°C за один час в подкупольном температура должна отличаться на 10°C).


Наилучший коэффициент корреляции (-0.66) получился между фокусом и температурой зеркала. Получилось, что F = 40.22 - 0.166*Tmirror. Стандартное отклонение, правда, все равно велико: 1.49°C. Вот картинка:
F_vs_MirT
Фокус и температура зеркала.


Температуры я взял из своего архива, написав утилитку для извлечения данных (на основе CGI, который используется для формирования графиков и выдачи данных в веб). Так как данные шли с разрывами (то сервер ломался, то свет отключали), я выбрал 10 наиболее длинных непрерывных кусков и проанализировал их.
Получилось, что, во-первых, почему-то корреляция между температурами зеркала и подкупольного вышла несмещенной (максимум приходится четко на 0). Понятно, что в случаях, когда включалась система охлаждения, наблюдался сдвиг максимума.
Temperatures_03
Температуры для корреляции

MirDome_Xcorr_03
Корреляция температур с рисунка выше

Temperatures_06
Температуры, когда система охлаждения не включалась

MirDome_Xcorr_06
Корреляция температур с рисунка выше


Ну, а для скоростей изменения температуры зеркала получались примерно одинаковые коэффициенты: около 0.01час-1. Вот пример данных с наибольшей корреляцией:
dTM_vs_dT-09
Зависимость скорости изменения температуры зеркала от разности температур зеркала и подкупольного

А вот все (за исключением выбросов) данные:
dTM_vs_dT
Все данные: с 31/12/10 23:29:58 по 24/09/13 13:56:57; аппроксимация: F=0.0096*dT+0.0152


Для того, чтобы преобразовать UNIX-time и юлианские даты в обычные даты я использовал простую функцию:
function S = JDtoSTR(J)
	fmt = "%d/%m/%y %T";
	if(nargin == 2) fmt = "%d/%m/%y"; endif
	J = J(:);
	S = [];
	for i = 1:size(J,1)
		S = [S; strftime(fmt, localtime((J(i)-2440587.5)*86400))];
	endfor
endfunction

(аналогично с UNIX-time, только не надо юлианские даты в UNIX-time переводить).

А вот так меняются подписи на графиках:
Lbls=JDtoSTR(get(gca(), "xtick"));
set(gca(), "xticklabel", Lbls);

Вот так производилась "нарезка" временных интервалов на непрерывные куски:
BrokenIdxs = find([JD; 0] - [0; JD] > 1/10);
[Val, BI] = sort(diff(BrokenIdxs), 'descend');
% построение всех графиков:
for i=1:10; plot_points(i, BI, BrokenIdxs, dMir, dT, JD, MirT, DomT); endfor

А вот функция для построения графиков:
function plot_points(idx, BI, BrokenIdxs, dMir, dT, JD, MirT, DomT)
	I = BI(idx);
	first = BrokenIdxs(I);
	last = BrokenIdxs(I+1) - 1;
	iall = [first:last];
	dMir_s = dMir(iall);
	dT_s = dT(iall);
	JD_s = JD(iall);
	MirT_s = MirT(iall);
	DomT_s = DomT(iall);
	DomT_s24 = movingavg(24, DomT_s);

	Tit = sprintf("Data from %s to %s", JDtoSTR(JD_s(1)), JDtoSTR(JD_s(end)));
	plot(JD_s, [MirT_s DomT_s DomT_s24]);
	legend(["Mirror temperature"; "Indome temperature"; "Indome moving average (1 day)"]);
	xlabel("Date"); ylabel("T, \\circ{}C");
	Lbls=JDtoSTR(get(gca(), "xtick"), 1);
	set(gca(), "xticklabel", Lbls);
	title(Tit);
	print(sprintf("Temperatures_%02d.png", idx), "-dpng");
	print(sprintf("Temperatures_%02d.eps", idx), "-deps -color");
	
	corr_coeff = corr(dMir_s, dT_s)
	X=[dT_s ones(size(dT_s))];
	coeff = X\dMir_s;
	plot(dT_s, dMir_s, '.', dT, coeff(1)*dT+coeff(2));
	xlabel("T_{indome} - T_{mirror}, \\circ{}C");
	ylabel("\\Delta T_{mirror}, \\circ{}C/hour");
	sig = "";
	if(coeff(1) > 0) sig = "+"; endif
	legend(["Data"; sprintf("dT_{miror}=%f%s%f\\cdot(T_{indome}-T_{miror})\ncorrcoeff = %f", ...
		coeff(2), sig, coeff(1), corr_coeff)]);
	title(Tit);
	print(sprintf("dTM_vs_dT-%02d.png", idx), "-dpng");
	print(sprintf("dTM_vs_dT-%02d.eps", idx), "-deps -color");
	
	[Xcorr Lag] = xcorr(MirT_s, DomT_s, 'coeff');
	[Xcorr24 Lag24] = xcorr(MirT_s, DomT_s24, 'coeff');
	plot(Lag/24, [Xcorr Xcorr24])
	xlabel("Lag, days");
	ylabel("Xcorr coefficient");
	legend(["Correlation of Mirror and Indome temperatures"; "Correlation of Mirror and moving average (24h) of indome"], "location", "southeast");
	Xm = max(Xcorr);
	Shft = Lag(find(Xcorr == Xm));
	text(Shft/24, Xm, sprintf(" <-- %d hours",Shft));
	Max24 = max(Xcorr24); Shft24 = Lag(find(Xcorr24 == Max24));
	text(Shft24/24, Max24, sprintf(" <-- %d hours", Shft24));
	title(Tit);
	print(sprintf("MirDome_Xcorr_%02d.png", idx), "-dpng");
	print(sprintf("MirDome_Xcorr_%02d.eps", idx), "-deps -color");
endfunction

Ну и скользящее среднее:
function Y = movingavg(Window, Data)
% Y = movavg(Window, Data)
% moving average of *Data* by patterns of *Window* size
%
	Y = filter(ones(1,Window)/Window, 1, Data);
endfunction

Tags: octave, БТА
Subscribe

  • Понаблюдал, блин!

    Опять у нас что-то с сетью поломали. Хотел было протестировать, как наша подвесная часть оптоволоконного спектрографа работает, а из дома связь с…

  • Релюшки на CAN-шине

    Закончил с прошивкой для новой железяки. Как "наследница" USB-CAN переходника, она умеет все то же самое + несколько специфичных вещей (опрос…

  • Дохлый SSD

    Писал уже о китайском SSD, сдохшем за полтора месяца работы. Вот он, герой: Сегодня у нас опять работы с оптоволоконным спектрографом на цейссе,…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 4 comments