Добавил:
wattpad
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы. Владимиров / Оптимизация_Лабораторная_№7 / Labaa_7
.m % Лабораторная работа 7
% Читаем входные данные из файла
clc; close all; clear all;
% pkg load statistics;
pkg load signal;
pkg load statistics;
profile resume;
zfile='A_Data_Var_16.txt'; % Задать файл для считывания данных
ZSig=dlmread(zfile,','); % Считываем в массив ZSig
N=length(ZSig); % Считаем длину массива данных
t=1:N;
% Считаем статданные по первичному массиву
% [1:Минимум, 2:1-квартиль, 3:медиана, 4:3-квартиль, 5:максимум, 6:среднее, 7:СКО,
% 8:ассиметрия, 9:эксцесс, 10:дисперсия]
disp('Моменты входной последовательности');
disp('1:минимум, 2:1-квартиль, 3:медиана, 4:3-квартиль, 5:максимум, 6:среднее,')
disp('7:СКО, 8:ассиметрия, 9:эксцесс, 10:дисперсия');
% Stat_ZSig_1=[statistics (ZSig), var(ZSig)];
Stat_ZSig_1=[min(ZSig),quantile(ZSig,[0.25 0.5 0.75]),max(ZSig),mean(ZSig),std(ZSig),skewness(ZSig),kurtosis(ZSig),var(ZSig)]
% Строим гистограмму данных и функцию распределения
K_1_hist=ceil(1+3.32*log10(N)); % Число колонок гистограммы (правило Штюргеса ГОСТ)
K_2_hist=ceil(1+log2(N)); % Число колонок гистограммы_ЧКГ (правило Стёрджеса ГОСТ)
K_3_hist=ceil(2*((N)^(1/3))); % ЧКГ (правило Райса)
K_4_hist=ceil(1+log2(N)+log2(1+(abs(Stat_ZSig_1(8)))/Stat_ZSig_1(7)));% ЧКГ(формула Доана)
K_5_hist=ceil(5*log10(N)); % ЧКГ (правило Брукса и Каррузера ГОСТ)
Mhist=K_1_hist; % Число колонок гистограммы::=> выбрать(но, не более N/5-рек.ГОСТ)
[NZSig, IDZSig]=hist(ZSig,Mhist); Pv_NZSig=NZSig./N;
[NZSig3, IDZSig3]=hist(ZSig,(3*Mhist)); Pv_NZSig3=NZSig3./N;% гистограмма на 3*K-колонок
% Считаем эмпирическую функцию распределения(ЭФР)- сглаженную по гистограмме
FZSig(1)=0;
for l=2:length(NZSig3);
FZSig(l)=FZSig(l-1)+NZSig3(l);
endfor
FxZSig=[Stat_ZSig_1(1), IDZSig3, Stat_ZSig_1(5)];
FyZSig=[0, (FZSig(1)+1)/N, FZSig(2:1:length(NZSig3))./N, 1];
% или второй вариант ЭФР- полную по ВХ
FxZSig_1=sort(ZSig); FyZSig_1=1/N:1/N:1;
% Рисуем на графике гистограмму данных
hf1 = figure (); hold on; title('Гистограмма входных данных','fontsize',14);
bar(IDZSig,NZSig,'c'); plot(IDZSig,NZSig,'r','linewidth',2); xlabel('A'); ylabel('K');
bar(IDZSig3,NZSig3,'g'); plot(IDZSig3,NZSig3,'b','linewidth',2); grid on;
hf2 = figure (); hold on; title('Функция плотности вероятности','fontsize',14);
bar(IDZSig,Pv_NZSig,'c'); plot(IDZSig,Pv_NZSig,'r','linewidth',2); xlabel('A'); ylabel('P');
bar(IDZSig3,Pv_NZSig3,'g'); plot(IDZSig3,Pv_NZSig3,'b','linewidth',2); grid on;
% Рисуем на графике функцию распределения
hf3 = figure (); hold on; title('Функция распределения','fontsize',14); xlabel('A'); ylabel('P');
plot(FxZSig,FyZSig,'g','linewidth',3,FxZSig_1,FyZSig_1,'b','linewidth',2); grid on;
% Убираем из данных постоянную составляющую (матожидание)
ZSigW=ZSig-Stat_ZSig_1(6);
disp('Значение A_0 = '); disp(Stat_ZSig_1(6));
% Вычисляем автокорреляционную функцию
[Rcorr_ZSigW,lagsR_ZSigW]=xcov(ZSigW,(N-1),'coeff');
% Рисуем график автокорреляции
hf4 = figure (); hold on; title('Автокорреляционная функция','fontsize',14);
plot(lagsR_ZSigW,Rcorr_ZSigW,'b','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
% Разбиваем данные на два фрагмента и оцениваем ВКФ
ZSigW_1=ZSigW(1:(N/2-1)); ZSigW_2=ZSigW(N/2:(N-2));
% Вычисляем взаимнокорреляционную функцию
[Rcorr12_ZSigW,lagsR12_ZSigW]=xcov(ZSigW_1,ZSigW_2,(N/2-1),'coeff');
% Рисуем график взаимной корреляции
hf5 = figure (); hold on; set(hf5,'color',[0 1 1]); title('ВКФ 2-х половин ВХ','fontsize',14);
plot(lagsR12_ZSigW,Rcorr12_ZSigW,'k','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
% Проводим знаковую статистику
SGN_1_ZSigW=sign(ZSigW);
% Определяем максим. длительность полож. и отриц. имп.
s_1=0; k_1=0;
for i=1:N
if SGN_1_ZSigW(i)==1;
s_1=s_1+1;
else
s_1=0;
end
if s_1>k_1
max_1=s_1; k_1=max_1;
end
end
s_m1=0; k_m1=0;
for i=1:N
if SGN_1_ZSigW(i)==-1;
s_m1=s_m1+1;
else
s_m1=0;
end
if s_m1>k_m1
max_m1=s_m1; k_m1=max_m1;
end
end
ZSigW_k_1=k_1
ZSigW_k_m1=k_m1
% Максимальный период (для определения нижней границы частоты условного сигнала)
Tmax_ZSigW=ZSigW_k_1+ZSigW_k_m1; Fmin_ZSigW=1/Tmax_ZSigW;
% Находим функцию скользящего среднего ZSigW-аналогично FIR-фильтрации без весов
wZSW=fix(Tmax_ZSigW/6); % задаем размер окна
if(mod(wZSW,2)==0)
wZSW=wZSW+1;
endif
hwZSW=(wZSW-1)/2; % интервал влево и вправо от середины окна
MZSwW=zeros(1,N); MZSwW(1)=ZSigW(1);
for jW=2:N % Задаем размер индексного окна в массиве
MZSanW=0; zwW=0;
if(jW<=hwZSW)
k1W=1; k2W=jW+hwZSW; zwW=k2W-k1W;
elseif(jW+hwZSW>N)
k1W=jW-hwZSW; k2W=N; zwW=k2W-k1W;
else
k1W=jW-hwZSW; k2W=jW+hwZSW; zwW=wZSW;
endif
for lW=k1W:k2W
MZSanW=MZSanW+ZSigW(lW);
endfor
MZSwW(jW)=MZSanW/zwW;
endfor
M_ZSigW=MZSwW;
% запись в файл
dlmwrite('M_ZSigW_dat_srednee.txt',M_ZSigW,',');
% Вычитаем из Данных без пост.сост. Скольз.Cреднее(CC)
ZSigW_Min_A0_SS=ZSigW-M_ZSigW;
% Выполним фильтрацию ZSigW-аналогично авторегресии(АР) со СС, но с весами
% Определим коэфф. IIR-фильтра
[b,a]=butter(4,0.5);
ARM_ZSigW=filtfilt(b,a,ZSigW);
% запись в файл
dlmwrite('ARM_ZSigW_dat.txt',ARM_ZSigW,',');
% Вычитаем из Данных без пост.сост. функцию АРСС - ARM_ZSigW
ZSigW_Min_A0_ARMSS=ZSigW-ARM_ZSigW;
% Рисуем график вх. данных без А0 совместно с СС и АРСС
hf6 = figure (); hold on; title('Графики "ВХ-А0", "СС", "АРСС"','fontsize',14);
plot(t,ZSigW,'b','linewidth',2,t,M_ZSigW,'r','linewidth',3);
plot(t,ARM_ZSigW,'g','linewidth',3); grid on; xlabel('t=1:N'); ylabel('A');
% Оценим на графике остатки шума ВХ-СС и ВХ-АРСС
hf7 = figure (); hold on; set(hf7,'color',[1 1 0]); xlabel('t=1:N'); ylabel('S');
plot(t,ZSigW_Min_A0_SS,'color',[0 0 0],'linewidth',2,t,ZSigW_Min_A0_ARMSS,'g','linewidth',3);
grid on; title('Графики остатков шумов ("ВХ-А0") -"СС", ("ВХ-А0") -"АРСС"','fontsize',14);
% Вычисляем статданные для полученных функций СС и АРСС
disp('Моменты функции СС');
% Stat_M_ZSigW_1=[statistics(M_ZSigW), var(M_ZSigW)];
Stat_M_ZSigW_1=[min(M_ZSigW),quantile(M_ZSigW,[0.25 0.5 0.75]),max(M_ZSigW),mean(M_ZSigW),std(M_ZSigW),skewness(M_ZSigW),kurtosis(M_ZSigW),var(M_ZSigW)];
disp('Моменты функции АРСС');
Stat_ARM_ZSigW_1=[min(ARM_ZSigW),quantile(ARM_ZSigW,[0.25 0.5 0.75]),max(ARM_ZSigW),mean(ARM_ZSigW),std(ARM_ZSigW),skewness(ARM_ZSigW),kurtosis(ARM_ZSigW),var(ARM_ZSigW)];
% Оцениваем статданные по остаткам шумов
%Stat_Err_M_ZSigW=[statistics(ZSigW_Min_A0_SS), var(ZSigW_Min_A0_SS)];
%Stat_Err_ARM_ZSigW=[statistics(ZSigW_Min_A0_ARMSS), var(ZSigW_Min_A0_ARMSS)];
Stat_Err_M_ZSigW=[min(ZSigW_Min_A0_SS),quantile(ZSigW_Min_A0_SS,[0.25 0.5 0.75]),max(ZSigW_Min_A0_SS),mean(ZSigW_Min_A0_SS),std(ZSigW_Min_A0_SS),skewness(ZSigW_Min_A0_SS),kurtosis(ZSigW_Min_A0_SS),var(ZSigW_Min_A0_SS)];
Stat_Err_ARM_ZSigW=[min(ZSigW_Min_A0_ARMSS),quantile(ZSigW_Min_A0_ARMSS,[0.25 0.5 0.75]),max(ZSigW_Min_A0_ARMSS),mean(ZSigW_Min_A0_ARMSS),std(ZSigW_Min_A0_ARMSS),skewness(ZSigW_Min_A0_ARMSS),kurtosis(ZSigW_Min_A0_ARMSS),var(ZSigW_Min_A0_ARMSS)];
% Вычисляем спектральную плотность мощности(СПМ) оценки модели СС методом Уэлча
S_dim=50; % длина массива сегмента данных
nft=64; % количество точек БПФ
[Cos_M_ZSigW,freq1_M_ZSigW]=pwelch(M_ZSigW,S_dim,[],nft,1,0,'half','onesided','plot','no-strip','sloppy');
Acos_M_ZSigW=sqrt(Cos_M_ZSigW./(2*N/S_dim-1));
% Аналогично вычисляем СПМ оценки модели АРСС мет. Уэлча
[Cos_ARM_ZSigW,freq1_ARM_ZSigW]=pwelch(ARM_ZSigW,S_dim,[],nft,1,0,'half','onesided','plot','no-strip','sloppy');
Acos_ARM_ZSigW=sqrt(Cos_ARM_ZSigW./(2*N/S_dim-1));
% Отображаем СПМ моделей СС и АРСС на графике
hf8 = figure ();hold on; title('График СПМ моделей "СС" и "АРСС"','fontsize',14);
stem(freq1_M_ZSigW,Acos_M_ZSigW,'r','linewidth',6); xlabel('f');
plot(freq1_M_ZSigW,Acos_M_ZSigW,'r','linewidth',2); ylabel('A');
stem(freq1_ARM_ZSigW,Acos_ARM_ZSigW,'g','linewidth',3);
plot(freq1_ARM_ZSigW,Acos_ARM_ZSigW,'g','linewidth',2); grid on;
% Выполняем апроксимацию-дискр. косинусн. преобразование(ДКП) для функций СС и АРСС
Acos_M_ZSigW1=dct(M_ZSigW); % ДКП СС
Apr_M_ZSigW1=idct(Acos_M_ZSigW1); % обратное ДКП СС
Err_Apr_M_ZSigW=M_ZSigW-Apr_M_ZSigW1; % Находим ошибку апр. для СС
Acos_ARM_ZSigW1=dct(ARM_ZSigW); % ДКП АРСС
Apr_ARM_ZSigW1=idct(Acos_ARM_ZSigW1); % обратное ДКП АРСС
Err_Apr_ARM_ZSigW=ARM_ZSigW-Apr_ARM_ZSigW1; % Находим ошибку апр. для АРСС
% Оценим на графике точность апроксимации СС и АРСС-(ошибки)
hf9 = figure (); hold on; set(hf9,'color',[1 1 0]);
plot(t,Err_Apr_M_ZSigW,'r','linewidth',2,t,Err_Apr_ARM_ZSigW,'g','linewidth',3);
grid on; title('График ошибок апроксимации ДКП моделей "СС" и "АРСС"','fontsize',14);
ylabel('Error'); xlabel('t=1:N');
% Используя результаты анализа и апроксимации моделируем ВХ. данные
Apr_ZSig_1_A0_SS=Stat_ZSig_1(6)+Apr_M_ZSigW1+Stat_Err_M_ZSigW(7)*randn(size(t))*0.3+SGN_1_ZSigW*Stat_Err_M_ZSigW(7)*0.7;
Apr_ZSig_1_A0_ARSS=Stat_ZSig_1(6)+Apr_ARM_ZSigW1+Stat_Err_ARM_ZSigW(7)*randn(size(t))*0.3+SGN_1_ZSigW*Stat_Err_ARM_ZSigW(7)*0.7;
% Оцениваем статданные модельных апроксимаций
disp('Моменты модели СС');
Stat_D_M_ZSigW=[min(Apr_ZSig_1_A0_SS),quantile(Apr_ZSig_1_A0_SS,[0.25 0.5 0.75]),max(Apr_ZSig_1_A0_SS),mean(Apr_ZSig_1_A0_SS),std(Apr_ZSig_1_A0_SS),skewness(Apr_ZSig_1_A0_SS),kurtosis(Apr_ZSig_1_A0_SS),var(Apr_ZSig_1_A0_SS)];
disp('Моменты модели АРСС');
Stat_D_ARM_ZSigW=[min(Apr_ZSig_1_A0_ARSS),quantile(Apr_ZSig_1_A0_ARSS,[0.25 0.5 0.75]),max(Apr_ZSig_1_A0_ARSS),mean(Apr_ZSig_1_A0_ARSS),std(Apr_ZSig_1_A0_ARSS),skewness(Apr_ZSig_1_A0_ARSS),kurtosis(Apr_ZSig_1_A0_ARSS),var(Apr_ZSig_1_A0_ARSS)];
% Рисуем результаты апроксимации на исходных данных
hf91 = figure (); hold on; set(hf91,'color',[0 1 1]);
plot(t,ZSig,'b','linewidth',2,t,Apr_ZSig_1_A0_ARSS,'g','linewidth',3);
plot(t,Apr_ZSig_1_A0_SS,'r','linewidth',2); ylabel('A'); xlabel('t=1:N');
grid on; title('Исходные и экстраполированные данные по моделям "СС" и "АРСС"','fontsize',14);
% Вычисляем взаимнокорреляционные функции моделей и ВХ данных
[Rcorr_M_ZSig_apr,lagsR12_M_ZSig]=xcov(ZSig,Apr_ZSig_1_A0_SS,(N-1),'coeff');
% Рисуем график взаимной корреляции ВХ и апроксимация СС
hf10 = figure (); hold on; title('ВКФ исходного и экстраполированного массива по модели "СС"','fontsize',14);
plot(lagsR12_M_ZSig,Rcorr_M_ZSig_apr,'b','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
[Rcorr_ARM_ZSig_apr,lagsR12_ARM_ZSig]=xcov(ZSig,Apr_ZSig_1_A0_ARSS,(N-1),'coeff');
% Рисуем график взаимной корреляции ВХ и апроксимация АРСС
hf11 = figure (); hold on; title('ВКФ исходного и экстраполированного массива по модели "АРСС"','fontsize',14);
plot(lagsR12_ARM_ZSig,Rcorr_ARM_ZSig_apr,'b','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
% Выполняем расчет по критерию Колмогорова-Смирнова
disp('Оценка по критерию Колмогорова-Смирнова модели СС');
disp('Если p>0.1 - H0 - отклоняется; ks-знач.статистики; d-расст.между F(x1 и x2)');
[pZSigM,ksZSigM,dZSigM]=kstest2(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по критерию Колмогорова-Смирнова модели АРСС');
[pZSigARM,ksZSigARM,dZSigARM]=kstest2(ZSig,Apr_ZSig_1_A0_ARSS)
% Выполняем расчет по критерию Хи-квадрат
disp('Оценка по критерию Хи-квадрат модели СС');
disp('Если статистика p>kchi - H0 - отклоняется; kchi-знач.стат.Хи-квадрат; f-степ.свободы');
[HirpZSigM,HirkchiZSigM,HirdfZSigM]=chi2gof(ZSig,Apr_ZSig_1_A0_SS,3*Mhist)
disp('Оценка по критерию Хи-квадрат модели АРСС');
[HirpZSigARM,HirkchiZSigARM,HirdfZSigARM]=chi2gof(ZSig,Apr_ZSig_1_A0_ARSS,3*Mhist)
% Готовим данные для гипотетической функции распределения ГФР
Fx_M_ZSig_1=sort(Apr_ZSig_1_A0_SS); Fx_ARM_ZSig_1=sort(Apr_ZSig_1_A0_ARSS);
% Рисуем на графике функции распределения ЭФР и ГФР
hf33 = figure (); hold on; title('Функции распределения','fontsize',14); xlabel('A'); ylabel('P');
plot(FxZSig,FyZSig,'k','linewidth',2,FxZSig_1,FyZSig_1,'b','linewidth',2); grid on;
plot(Fx_M_ZSig_1,FyZSig_1,'r','linewidth',2,Fx_ARM_ZSig_1,FyZSig_1,'g','linewidth',2);
% Готовим рисуем и сравниваем плотн. вероятн. ВХ, СС и АРСС
[NZSig3_M22, IDZSig3_M22]=hist(Apr_ZSig_1_A0_SS,(3*Mhist)); Pv_NZSig3_M22=NZSig3_M22./N;
[NZSig3_ARM22, IDZSig3_ARM22]=hist(Apr_ZSig_1_A0_ARSS,(3*Mhist)); Pv_NZSig3_ARM22=NZSig3_ARM22./N;
hf22 = figure (); hold on; title('Функции плотности вероятности','fontsize',14);
stem(IDZSig3,Pv_NZSig3); plot(IDZSig3,Pv_NZSig3,'b','linewidth',2);
plot(IDZSig3_M22,Pv_NZSig3_M22,'r','linewidth',3);
plot(IDZSig3_ARM22,Pv_NZSig3_ARM22,'g','linewidth',3);
grid on; xlabel('A'); ylabel('P');
% Выполняем расчет по критерию Пирсона
disp('Оценка по критерию Пирсона модели СС');
disp('Если статистика pval=0 - H0 - принимается; stat-знач.статистики; dist-тип распред., t-Стьюдент');
[pZSigM_3]=correlation_test(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по критерию Пирсона модели АРСС');
[pZSigARM_3]=correlation_test(ZSig,Apr_ZSig_1_A0_ARSS)
% Выполняем расчет по критерию Стьюдента
[hZSigM_4,pZSigM_4,ciZSigM_4,dfZSigM_4]=ttest(ZSig,Apr_ZSig_1_A0_SS);
[hZSigARM_4,pZSigARM_4,ciZSigARM_4,dfZSigARM_4]=ttest(ZSig,Apr_ZSig_1_A0_ARSS);
disp('Оценка согласно парному критерию сравнения средних модели СС');
disp('Если статистика h=0 - H0 - принимается; p-знач.вероятности статистики t-теста Стьюдента');
disp('Если статистика h=1 - H0 - отклоняется');
tt_ZSigM_4=[hZSigM_4;pZSigM_4]
disp('Оценка согласно парному критерию сравнения средних модели АРСС');
tt_ZSigARM_4=[hZSigARM_4;pZSigARM_4]
% Выполняем расчет по критерию срединного значения - медианы
disp('Оценка по медианному критерию для модели СС');
disp('Если статистика b=h=0 - H0 - принимается; p-знач.вероятности статистики теста');
disp('Если статистика b=h=1 - H0 - отклоняется');
[pZSigM_5,bZSigM_5,nZSigM_5]=signtest(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по медианному критерию для модели АРСС');
[pZSigARM_5,bZSigARM_5,nZSigARM_5]=signtest(ZSig,Apr_ZSig_1_A0_ARSS)
% Выполняем расчет по критерию Манна-Уитни-эквив. критерию суммы рангов Вилкоксона
disp('Оценка по критерию Манна-Уитни-Вилкоксона модели СС');
disp('Если статистика p<=0.95(0.9)-гипотеза сдвига H0-принимается; p>0.95(0.9)-H0-отклоняется');
disp('z-знач.статистики; если z<=0.525-гипотеза сдвига H0-принимается; z>0.525-H0-отклоняется');
[pZSigM_6,zZSigM_6]=ranksum(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по критерию Манна-Уитни-Вилкоксона модели АРСС');
[pZSigARM_6,zZSigARM_6]=ranksum(ZSig,Apr_ZSig_1_A0_ARSS)
% Соберем и выведем матрицу моментов для наглядности
disp('Матрица моментов');
disp('Вход, функ.СС, функ.АРСС, мод.СС, мод.АРСС');
format short;
Matr_Mom=[Stat_ZSig_1' Stat_M_ZSigW_1' Stat_ARM_ZSigW_1' Stat_D_M_ZSigW' Stat_D_ARM_ZSigW'];
Moment=Matr_Mom
% Последняя строка;
% Читаем входные данные из файла
clc; close all; clear all;
% pkg load statistics;
pkg load signal;
pkg load statistics;
profile resume;
zfile='A_Data_Var_16.txt'; % Задать файл для считывания данных
ZSig=dlmread(zfile,','); % Считываем в массив ZSig
N=length(ZSig); % Считаем длину массива данных
t=1:N;
% Считаем статданные по первичному массиву
% [1:Минимум, 2:1-квартиль, 3:медиана, 4:3-квартиль, 5:максимум, 6:среднее, 7:СКО,
% 8:ассиметрия, 9:эксцесс, 10:дисперсия]
disp('Моменты входной последовательности');
disp('1:минимум, 2:1-квартиль, 3:медиана, 4:3-квартиль, 5:максимум, 6:среднее,')
disp('7:СКО, 8:ассиметрия, 9:эксцесс, 10:дисперсия');
% Stat_ZSig_1=[statistics (ZSig), var(ZSig)];
Stat_ZSig_1=[min(ZSig),quantile(ZSig,[0.25 0.5 0.75]),max(ZSig),mean(ZSig),std(ZSig),skewness(ZSig),kurtosis(ZSig),var(ZSig)]
% Строим гистограмму данных и функцию распределения
K_1_hist=ceil(1+3.32*log10(N)); % Число колонок гистограммы (правило Штюргеса ГОСТ)
K_2_hist=ceil(1+log2(N)); % Число колонок гистограммы_ЧКГ (правило Стёрджеса ГОСТ)
K_3_hist=ceil(2*((N)^(1/3))); % ЧКГ (правило Райса)
K_4_hist=ceil(1+log2(N)+log2(1+(abs(Stat_ZSig_1(8)))/Stat_ZSig_1(7)));% ЧКГ(формула Доана)
K_5_hist=ceil(5*log10(N)); % ЧКГ (правило Брукса и Каррузера ГОСТ)
Mhist=K_1_hist; % Число колонок гистограммы::=> выбрать(но, не более N/5-рек.ГОСТ)
[NZSig, IDZSig]=hist(ZSig,Mhist); Pv_NZSig=NZSig./N;
[NZSig3, IDZSig3]=hist(ZSig,(3*Mhist)); Pv_NZSig3=NZSig3./N;% гистограмма на 3*K-колонок
% Считаем эмпирическую функцию распределения(ЭФР)- сглаженную по гистограмме
FZSig(1)=0;
for l=2:length(NZSig3);
FZSig(l)=FZSig(l-1)+NZSig3(l);
endfor
FxZSig=[Stat_ZSig_1(1), IDZSig3, Stat_ZSig_1(5)];
FyZSig=[0, (FZSig(1)+1)/N, FZSig(2:1:length(NZSig3))./N, 1];
% или второй вариант ЭФР- полную по ВХ
FxZSig_1=sort(ZSig); FyZSig_1=1/N:1/N:1;
% Рисуем на графике гистограмму данных
hf1 = figure (); hold on; title('Гистограмма входных данных','fontsize',14);
bar(IDZSig,NZSig,'c'); plot(IDZSig,NZSig,'r','linewidth',2); xlabel('A'); ylabel('K');
bar(IDZSig3,NZSig3,'g'); plot(IDZSig3,NZSig3,'b','linewidth',2); grid on;
hf2 = figure (); hold on; title('Функция плотности вероятности','fontsize',14);
bar(IDZSig,Pv_NZSig,'c'); plot(IDZSig,Pv_NZSig,'r','linewidth',2); xlabel('A'); ylabel('P');
bar(IDZSig3,Pv_NZSig3,'g'); plot(IDZSig3,Pv_NZSig3,'b','linewidth',2); grid on;
% Рисуем на графике функцию распределения
hf3 = figure (); hold on; title('Функция распределения','fontsize',14); xlabel('A'); ylabel('P');
plot(FxZSig,FyZSig,'g','linewidth',3,FxZSig_1,FyZSig_1,'b','linewidth',2); grid on;
% Убираем из данных постоянную составляющую (матожидание)
ZSigW=ZSig-Stat_ZSig_1(6);
disp('Значение A_0 = '); disp(Stat_ZSig_1(6));
% Вычисляем автокорреляционную функцию
[Rcorr_ZSigW,lagsR_ZSigW]=xcov(ZSigW,(N-1),'coeff');
% Рисуем график автокорреляции
hf4 = figure (); hold on; title('Автокорреляционная функция','fontsize',14);
plot(lagsR_ZSigW,Rcorr_ZSigW,'b','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
% Разбиваем данные на два фрагмента и оцениваем ВКФ
ZSigW_1=ZSigW(1:(N/2-1)); ZSigW_2=ZSigW(N/2:(N-2));
% Вычисляем взаимнокорреляционную функцию
[Rcorr12_ZSigW,lagsR12_ZSigW]=xcov(ZSigW_1,ZSigW_2,(N/2-1),'coeff');
% Рисуем график взаимной корреляции
hf5 = figure (); hold on; set(hf5,'color',[0 1 1]); title('ВКФ 2-х половин ВХ','fontsize',14);
plot(lagsR12_ZSigW,Rcorr12_ZSigW,'k','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
% Проводим знаковую статистику
SGN_1_ZSigW=sign(ZSigW);
% Определяем максим. длительность полож. и отриц. имп.
s_1=0; k_1=0;
for i=1:N
if SGN_1_ZSigW(i)==1;
s_1=s_1+1;
else
s_1=0;
end
if s_1>k_1
max_1=s_1; k_1=max_1;
end
end
s_m1=0; k_m1=0;
for i=1:N
if SGN_1_ZSigW(i)==-1;
s_m1=s_m1+1;
else
s_m1=0;
end
if s_m1>k_m1
max_m1=s_m1; k_m1=max_m1;
end
end
ZSigW_k_1=k_1
ZSigW_k_m1=k_m1
% Максимальный период (для определения нижней границы частоты условного сигнала)
Tmax_ZSigW=ZSigW_k_1+ZSigW_k_m1; Fmin_ZSigW=1/Tmax_ZSigW;
% Находим функцию скользящего среднего ZSigW-аналогично FIR-фильтрации без весов
wZSW=fix(Tmax_ZSigW/6); % задаем размер окна
if(mod(wZSW,2)==0)
wZSW=wZSW+1;
endif
hwZSW=(wZSW-1)/2; % интервал влево и вправо от середины окна
MZSwW=zeros(1,N); MZSwW(1)=ZSigW(1);
for jW=2:N % Задаем размер индексного окна в массиве
MZSanW=0; zwW=0;
if(jW<=hwZSW)
k1W=1; k2W=jW+hwZSW; zwW=k2W-k1W;
elseif(jW+hwZSW>N)
k1W=jW-hwZSW; k2W=N; zwW=k2W-k1W;
else
k1W=jW-hwZSW; k2W=jW+hwZSW; zwW=wZSW;
endif
for lW=k1W:k2W
MZSanW=MZSanW+ZSigW(lW);
endfor
MZSwW(jW)=MZSanW/zwW;
endfor
M_ZSigW=MZSwW;
% запись в файл
dlmwrite('M_ZSigW_dat_srednee.txt',M_ZSigW,',');
% Вычитаем из Данных без пост.сост. Скольз.Cреднее(CC)
ZSigW_Min_A0_SS=ZSigW-M_ZSigW;
% Выполним фильтрацию ZSigW-аналогично авторегресии(АР) со СС, но с весами
% Определим коэфф. IIR-фильтра
[b,a]=butter(4,0.5);
ARM_ZSigW=filtfilt(b,a,ZSigW);
% запись в файл
dlmwrite('ARM_ZSigW_dat.txt',ARM_ZSigW,',');
% Вычитаем из Данных без пост.сост. функцию АРСС - ARM_ZSigW
ZSigW_Min_A0_ARMSS=ZSigW-ARM_ZSigW;
% Рисуем график вх. данных без А0 совместно с СС и АРСС
hf6 = figure (); hold on; title('Графики "ВХ-А0", "СС", "АРСС"','fontsize',14);
plot(t,ZSigW,'b','linewidth',2,t,M_ZSigW,'r','linewidth',3);
plot(t,ARM_ZSigW,'g','linewidth',3); grid on; xlabel('t=1:N'); ylabel('A');
% Оценим на графике остатки шума ВХ-СС и ВХ-АРСС
hf7 = figure (); hold on; set(hf7,'color',[1 1 0]); xlabel('t=1:N'); ylabel('S');
plot(t,ZSigW_Min_A0_SS,'color',[0 0 0],'linewidth',2,t,ZSigW_Min_A0_ARMSS,'g','linewidth',3);
grid on; title('Графики остатков шумов ("ВХ-А0") -"СС", ("ВХ-А0") -"АРСС"','fontsize',14);
% Вычисляем статданные для полученных функций СС и АРСС
disp('Моменты функции СС');
% Stat_M_ZSigW_1=[statistics(M_ZSigW), var(M_ZSigW)];
Stat_M_ZSigW_1=[min(M_ZSigW),quantile(M_ZSigW,[0.25 0.5 0.75]),max(M_ZSigW),mean(M_ZSigW),std(M_ZSigW),skewness(M_ZSigW),kurtosis(M_ZSigW),var(M_ZSigW)];
disp('Моменты функции АРСС');
Stat_ARM_ZSigW_1=[min(ARM_ZSigW),quantile(ARM_ZSigW,[0.25 0.5 0.75]),max(ARM_ZSigW),mean(ARM_ZSigW),std(ARM_ZSigW),skewness(ARM_ZSigW),kurtosis(ARM_ZSigW),var(ARM_ZSigW)];
% Оцениваем статданные по остаткам шумов
%Stat_Err_M_ZSigW=[statistics(ZSigW_Min_A0_SS), var(ZSigW_Min_A0_SS)];
%Stat_Err_ARM_ZSigW=[statistics(ZSigW_Min_A0_ARMSS), var(ZSigW_Min_A0_ARMSS)];
Stat_Err_M_ZSigW=[min(ZSigW_Min_A0_SS),quantile(ZSigW_Min_A0_SS,[0.25 0.5 0.75]),max(ZSigW_Min_A0_SS),mean(ZSigW_Min_A0_SS),std(ZSigW_Min_A0_SS),skewness(ZSigW_Min_A0_SS),kurtosis(ZSigW_Min_A0_SS),var(ZSigW_Min_A0_SS)];
Stat_Err_ARM_ZSigW=[min(ZSigW_Min_A0_ARMSS),quantile(ZSigW_Min_A0_ARMSS,[0.25 0.5 0.75]),max(ZSigW_Min_A0_ARMSS),mean(ZSigW_Min_A0_ARMSS),std(ZSigW_Min_A0_ARMSS),skewness(ZSigW_Min_A0_ARMSS),kurtosis(ZSigW_Min_A0_ARMSS),var(ZSigW_Min_A0_ARMSS)];
% Вычисляем спектральную плотность мощности(СПМ) оценки модели СС методом Уэлча
S_dim=50; % длина массива сегмента данных
nft=64; % количество точек БПФ
[Cos_M_ZSigW,freq1_M_ZSigW]=pwelch(M_ZSigW,S_dim,[],nft,1,0,'half','onesided','plot','no-strip','sloppy');
Acos_M_ZSigW=sqrt(Cos_M_ZSigW./(2*N/S_dim-1));
% Аналогично вычисляем СПМ оценки модели АРСС мет. Уэлча
[Cos_ARM_ZSigW,freq1_ARM_ZSigW]=pwelch(ARM_ZSigW,S_dim,[],nft,1,0,'half','onesided','plot','no-strip','sloppy');
Acos_ARM_ZSigW=sqrt(Cos_ARM_ZSigW./(2*N/S_dim-1));
% Отображаем СПМ моделей СС и АРСС на графике
hf8 = figure ();hold on; title('График СПМ моделей "СС" и "АРСС"','fontsize',14);
stem(freq1_M_ZSigW,Acos_M_ZSigW,'r','linewidth',6); xlabel('f');
plot(freq1_M_ZSigW,Acos_M_ZSigW,'r','linewidth',2); ylabel('A');
stem(freq1_ARM_ZSigW,Acos_ARM_ZSigW,'g','linewidth',3);
plot(freq1_ARM_ZSigW,Acos_ARM_ZSigW,'g','linewidth',2); grid on;
% Выполняем апроксимацию-дискр. косинусн. преобразование(ДКП) для функций СС и АРСС
Acos_M_ZSigW1=dct(M_ZSigW); % ДКП СС
Apr_M_ZSigW1=idct(Acos_M_ZSigW1); % обратное ДКП СС
Err_Apr_M_ZSigW=M_ZSigW-Apr_M_ZSigW1; % Находим ошибку апр. для СС
Acos_ARM_ZSigW1=dct(ARM_ZSigW); % ДКП АРСС
Apr_ARM_ZSigW1=idct(Acos_ARM_ZSigW1); % обратное ДКП АРСС
Err_Apr_ARM_ZSigW=ARM_ZSigW-Apr_ARM_ZSigW1; % Находим ошибку апр. для АРСС
% Оценим на графике точность апроксимации СС и АРСС-(ошибки)
hf9 = figure (); hold on; set(hf9,'color',[1 1 0]);
plot(t,Err_Apr_M_ZSigW,'r','linewidth',2,t,Err_Apr_ARM_ZSigW,'g','linewidth',3);
grid on; title('График ошибок апроксимации ДКП моделей "СС" и "АРСС"','fontsize',14);
ylabel('Error'); xlabel('t=1:N');
% Используя результаты анализа и апроксимации моделируем ВХ. данные
Apr_ZSig_1_A0_SS=Stat_ZSig_1(6)+Apr_M_ZSigW1+Stat_Err_M_ZSigW(7)*randn(size(t))*0.3+SGN_1_ZSigW*Stat_Err_M_ZSigW(7)*0.7;
Apr_ZSig_1_A0_ARSS=Stat_ZSig_1(6)+Apr_ARM_ZSigW1+Stat_Err_ARM_ZSigW(7)*randn(size(t))*0.3+SGN_1_ZSigW*Stat_Err_ARM_ZSigW(7)*0.7;
% Оцениваем статданные модельных апроксимаций
disp('Моменты модели СС');
Stat_D_M_ZSigW=[min(Apr_ZSig_1_A0_SS),quantile(Apr_ZSig_1_A0_SS,[0.25 0.5 0.75]),max(Apr_ZSig_1_A0_SS),mean(Apr_ZSig_1_A0_SS),std(Apr_ZSig_1_A0_SS),skewness(Apr_ZSig_1_A0_SS),kurtosis(Apr_ZSig_1_A0_SS),var(Apr_ZSig_1_A0_SS)];
disp('Моменты модели АРСС');
Stat_D_ARM_ZSigW=[min(Apr_ZSig_1_A0_ARSS),quantile(Apr_ZSig_1_A0_ARSS,[0.25 0.5 0.75]),max(Apr_ZSig_1_A0_ARSS),mean(Apr_ZSig_1_A0_ARSS),std(Apr_ZSig_1_A0_ARSS),skewness(Apr_ZSig_1_A0_ARSS),kurtosis(Apr_ZSig_1_A0_ARSS),var(Apr_ZSig_1_A0_ARSS)];
% Рисуем результаты апроксимации на исходных данных
hf91 = figure (); hold on; set(hf91,'color',[0 1 1]);
plot(t,ZSig,'b','linewidth',2,t,Apr_ZSig_1_A0_ARSS,'g','linewidth',3);
plot(t,Apr_ZSig_1_A0_SS,'r','linewidth',2); ylabel('A'); xlabel('t=1:N');
grid on; title('Исходные и экстраполированные данные по моделям "СС" и "АРСС"','fontsize',14);
% Вычисляем взаимнокорреляционные функции моделей и ВХ данных
[Rcorr_M_ZSig_apr,lagsR12_M_ZSig]=xcov(ZSig,Apr_ZSig_1_A0_SS,(N-1),'coeff');
% Рисуем график взаимной корреляции ВХ и апроксимация СС
hf10 = figure (); hold on; title('ВКФ исходного и экстраполированного массива по модели "СС"','fontsize',14);
plot(lagsR12_M_ZSig,Rcorr_M_ZSig_apr,'b','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
[Rcorr_ARM_ZSig_apr,lagsR12_ARM_ZSig]=xcov(ZSig,Apr_ZSig_1_A0_ARSS,(N-1),'coeff');
% Рисуем график взаимной корреляции ВХ и апроксимация АРСС
hf11 = figure (); hold on; title('ВКФ исходного и экстраполированного массива по модели "АРСС"','fontsize',14);
plot(lagsR12_ARM_ZSig,Rcorr_ARM_ZSig_apr,'b','linewidth',2); grid on; xlabel('\DeltaN=-N:N'); ylabel('R');
% Выполняем расчет по критерию Колмогорова-Смирнова
disp('Оценка по критерию Колмогорова-Смирнова модели СС');
disp('Если p>0.1 - H0 - отклоняется; ks-знач.статистики; d-расст.между F(x1 и x2)');
[pZSigM,ksZSigM,dZSigM]=kstest2(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по критерию Колмогорова-Смирнова модели АРСС');
[pZSigARM,ksZSigARM,dZSigARM]=kstest2(ZSig,Apr_ZSig_1_A0_ARSS)
% Выполняем расчет по критерию Хи-квадрат
disp('Оценка по критерию Хи-квадрат модели СС');
disp('Если статистика p>kchi - H0 - отклоняется; kchi-знач.стат.Хи-квадрат; f-степ.свободы');
[HirpZSigM,HirkchiZSigM,HirdfZSigM]=chi2gof(ZSig,Apr_ZSig_1_A0_SS,3*Mhist)
disp('Оценка по критерию Хи-квадрат модели АРСС');
[HirpZSigARM,HirkchiZSigARM,HirdfZSigARM]=chi2gof(ZSig,Apr_ZSig_1_A0_ARSS,3*Mhist)
% Готовим данные для гипотетической функции распределения ГФР
Fx_M_ZSig_1=sort(Apr_ZSig_1_A0_SS); Fx_ARM_ZSig_1=sort(Apr_ZSig_1_A0_ARSS);
% Рисуем на графике функции распределения ЭФР и ГФР
hf33 = figure (); hold on; title('Функции распределения','fontsize',14); xlabel('A'); ylabel('P');
plot(FxZSig,FyZSig,'k','linewidth',2,FxZSig_1,FyZSig_1,'b','linewidth',2); grid on;
plot(Fx_M_ZSig_1,FyZSig_1,'r','linewidth',2,Fx_ARM_ZSig_1,FyZSig_1,'g','linewidth',2);
% Готовим рисуем и сравниваем плотн. вероятн. ВХ, СС и АРСС
[NZSig3_M22, IDZSig3_M22]=hist(Apr_ZSig_1_A0_SS,(3*Mhist)); Pv_NZSig3_M22=NZSig3_M22./N;
[NZSig3_ARM22, IDZSig3_ARM22]=hist(Apr_ZSig_1_A0_ARSS,(3*Mhist)); Pv_NZSig3_ARM22=NZSig3_ARM22./N;
hf22 = figure (); hold on; title('Функции плотности вероятности','fontsize',14);
stem(IDZSig3,Pv_NZSig3); plot(IDZSig3,Pv_NZSig3,'b','linewidth',2);
plot(IDZSig3_M22,Pv_NZSig3_M22,'r','linewidth',3);
plot(IDZSig3_ARM22,Pv_NZSig3_ARM22,'g','linewidth',3);
grid on; xlabel('A'); ylabel('P');
% Выполняем расчет по критерию Пирсона
disp('Оценка по критерию Пирсона модели СС');
disp('Если статистика pval=0 - H0 - принимается; stat-знач.статистики; dist-тип распред., t-Стьюдент');
[pZSigM_3]=correlation_test(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по критерию Пирсона модели АРСС');
[pZSigARM_3]=correlation_test(ZSig,Apr_ZSig_1_A0_ARSS)
% Выполняем расчет по критерию Стьюдента
[hZSigM_4,pZSigM_4,ciZSigM_4,dfZSigM_4]=ttest(ZSig,Apr_ZSig_1_A0_SS);
[hZSigARM_4,pZSigARM_4,ciZSigARM_4,dfZSigARM_4]=ttest(ZSig,Apr_ZSig_1_A0_ARSS);
disp('Оценка согласно парному критерию сравнения средних модели СС');
disp('Если статистика h=0 - H0 - принимается; p-знач.вероятности статистики t-теста Стьюдента');
disp('Если статистика h=1 - H0 - отклоняется');
tt_ZSigM_4=[hZSigM_4;pZSigM_4]
disp('Оценка согласно парному критерию сравнения средних модели АРСС');
tt_ZSigARM_4=[hZSigARM_4;pZSigARM_4]
% Выполняем расчет по критерию срединного значения - медианы
disp('Оценка по медианному критерию для модели СС');
disp('Если статистика b=h=0 - H0 - принимается; p-знач.вероятности статистики теста');
disp('Если статистика b=h=1 - H0 - отклоняется');
[pZSigM_5,bZSigM_5,nZSigM_5]=signtest(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по медианному критерию для модели АРСС');
[pZSigARM_5,bZSigARM_5,nZSigARM_5]=signtest(ZSig,Apr_ZSig_1_A0_ARSS)
% Выполняем расчет по критерию Манна-Уитни-эквив. критерию суммы рангов Вилкоксона
disp('Оценка по критерию Манна-Уитни-Вилкоксона модели СС');
disp('Если статистика p<=0.95(0.9)-гипотеза сдвига H0-принимается; p>0.95(0.9)-H0-отклоняется');
disp('z-знач.статистики; если z<=0.525-гипотеза сдвига H0-принимается; z>0.525-H0-отклоняется');
[pZSigM_6,zZSigM_6]=ranksum(ZSig,Apr_ZSig_1_A0_SS)
disp('Оценка по критерию Манна-Уитни-Вилкоксона модели АРСС');
[pZSigARM_6,zZSigARM_6]=ranksum(ZSig,Apr_ZSig_1_A0_ARSS)
% Соберем и выведем матрицу моментов для наглядности
disp('Матрица моментов');
disp('Вход, функ.СС, функ.АРСС, мод.СС, мод.АРСС');
format short;
Matr_Mom=[Stat_ZSig_1' Stat_M_ZSigW_1' Stat_ARM_ZSigW_1' Stat_D_M_ZSigW' Stat_D_ARM_ZSigW'];
Moment=Matr_Mom
% Последняя строка;
Соседние файлы в папке Оптимизация_Лабораторная_№7
