Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

курсовая_Петров_вариант8

.doc
Скачиваний:
0
Добавлен:
26.01.2026
Размер:
222.21 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра ЭУТ

Курсовая РАБОТА

по дисциплине «Методы обработки измерительной информации»

Тема: Полная обработка результатов измерений физического процесса

Вариант 8

Студент гр.

Преподаватель

Петров Г.А.

Санкт-Петербург

2025

1. Листинг исходного кода программы

clear; clc; close all;

% исходные данные, разделённые на 5 выборок по 200 значений

nabludeniya = load('kyrs1_8.txt');

viborki = mat2cell(nabludeniya, size(nabludeniya,1), ones(1,5));

%% 1. Определение промахов в результатах неблюдений

clean_viborki = cell(5,1);

ubit_promakhi = zeros(5,1);

F0 = @(x) normcdf(x) - 0.5;

q = 0.05; % уровень значимости

for j = 1:5

X = viborki{j};

n_izn = length(X);

promakhi = 0;

while true

m = mean(X);

s = std(X, 1); % СКО с нормировкой на n-1

[x_min, idx_min] = min(X);

[x_max, idx_max] = max(X);

P_min = 0.5 - F0((m - x_min)/s);

P_max = 0.5 - F0((x_max - m)/s);

if P_min < q/2 && P_max < q/2

if P_min < P_max

X(idx_min) = [];

promakhi = promakhi + 1;

else

X(idx_max) = [];

promakhi = promakhi + 1;

end

elseif P_min < q/2

X(idx_min) = [];

promakhi = promakhi + 1;

elseif P_max < q/2

X(idx_max) = [];

promakhi = promakhi + 1;

else

% промахи отсутствуют

break;

end

end

clean_viborki{j} = X;

ubit_promakhi(j) = promakhi;

end

%% 2. Определение выборочных характеристик случайного процесса

stats = zeros(5,4); % [n, mean, var, std]

for j = 1:5

X = clean_viborki{j};

n = length(X);

m = mean(X);

v = var(X, 1); % несмещенная оценка дисперсии (делитель n-1)

s = std(X, 1);

stats(j,:) = [n, m, v, s];

end

% Графики характеристик

figure('Position',[100,100,900,300], 'Name', 'Выборочные характеристики');

subplot(1,3,1);

plot(1:5, stats(:,2), 'bo-', 'LineWidth',2, 'MarkerSize',8);

xlabel('Выборка'); ylabel('x̄'); title('Средние значения'); grid;

xlim([0.5,5.5]);

subplot(1,3,2);

plot(1:5, stats(:,3), 'ro-', 'LineWidth',2, 'MarkerSize',8);

xlabel('Выборка'); ylabel('D'); title('Дисперсии'); grid;

xlim([0.5,5.5]);

subplot(1,3,3);

plot(1:5, stats(:,4), 'go-', 'LineWidth',2, 'MarkerSize',8);

xlabel('Выборка'); ylabel('s'); title('СКО'); grid;

xlim([0.5,5.5]);

%% 3. Проверка гипотезы об одномерной нормальном распределении случайного процесса

% 3.1. По критерию ассиметричночти и эксцесса (метод моментов)-------------

norm_assym = false(5,1);

for j = 1:5

X = clean_viborki{j};

n = stats(j,1);

m = stats(j,2);

s = stats(j,4);

m3 = moment(X, 3); % Третий центральный момент

m4 = moment(X, 4); % Четвертый центральный момент

% Асимметрия и эксцесс

A = m3 / (s^3);

E = m4 / (s^4) - 3; % Эксцесс для нормального распределения = 0

% Дисперсии асимметрии и эксцесса

DA = 6*(n-1) / ((n+1)*(n+3));

DE = 24*n*(n-2)*(n-3) / ((n+1)^2 * (n+3) * (n+5));

% Проверка условий

cond_A = abs(A) <= 3*sqrt(DA);

cond_E = abs(E) <= 5*sqrt(DE);

is_normal = cond_A && cond_E;

norm_assym(j) = is_normal;

end

% 3.2. Проверка по критерию Пирсона----------------------------------------

X_all = vertcat(clean_viborki{:});

n_all = length(X_all);

m_all = mean(X_all);

s_all = std(X_all, 1);

% Определение числа интервалов по Старджессу

k = round(1 + 3.322 * log10(n_all));

% Границы интервалов

x_min = min(X_all);

x_max = max(X_all);

delta = (x_max - x_min) / k;

edges = linspace(x_min, x_max, k+1);

% Частоты попадания в интервалы

[counts, ~] = histcounts(X_all, edges);

% Теоретические вероятности и χ²

p_theor = zeros(1,k);

chi2_components = zeros(1,k);

for i = 1:k

if i == 1

% Первый интервал: (-∞, edges(2)]

z_upper = (edges(2) - m_all) / s_all;

p_theor(i) = 0.5 + F0(z_upper); % Используем F0

elseif i == k

% Последний интервал: [edges(k), +∞)

z_lower = (edges(k) - m_all) / s_all;

p_theor(i) = 0.5 - F0(z_lower);

else

% Внутренние интервалы

z_lower = (edges(i) - m_all) / s_all;

z_upper = (edges(i+1) - m_all) / s_all;

p_theor(i) = F0(z_upper) - F0(z_lower);

end

% Компонент χ²

chi2_components(i) = (counts(i) - n_all * p_theor(i))^2 / (n_all * p_theor(i));

end

chi2 = sum(chi2_components);

df = k - 3; % степени свободы

chi2_crit = chi2inv(0.95, df); % квантиль распределения χ²

normal_chi2 = chi2 <= chi2_crit;

% Гистограмма с теоретической плотностью

figure('Position',[100,100,800,400], 'Name', 'Критерий χ²');

subplot(1,2,1);

histogram(X_all, edges, 'Normalization','pdf', 'FaceColor',[0.7 0.7 0.9], 'EdgeColor','k');

hold on;

x_fit = linspace(x_min, x_max, 1000);

pdf_fit = normpdf(x_fit, m_all, s_all);

plot(x_fit, pdf_fit, 'r-', 'LineWidth',2);

xlabel('Значение'); ylabel('Плотность вероятности');

title(sprintf('Гистограмма и N(%.4f, %.4f²)', m_all, s_all));

legend('Эксперимент','Теория','Location','best'); grid;

subplot(1,2,2);

bar(1:k, chi2_components, 'FaceColor',[0.3 0.6 0.9]);

hold on;

plot([0, k+1], [chi2_crit, chi2_crit], 'r--', 'LineWidth',2);

xlabel('Интервал'); ylabel('χ²_m');

title(sprintf('Компоненты χ² (сумма = %.2f)', chi2));

legend('χ²_m', sprintf('χ²_крит = %.2f', chi2_crit)); grid;

xlim([0, k+1]);

% 3.3. Проверка по критерию Колмогорова------------------------------------

X1 = sort(clean_viborki{1});

n1 = length(X1);

m1 = mean(X1);

s1 = std(X1, 1);

% Эмпирическая функция распределения

F_emp = (1:n1)' / n1;

% Теоретическая функция распределения (используем normcdf напрямую)

F_theor = normcdf(X1, m1, s1);

% Статистика Колмогорова

D = max(abs(F_emp - F_theor));

lambda = D * sqrt(n1);

lambda_crit = 1.22; % для q=0.1

normal_kolm = lambda <= lambda_crit;

% График функций распределения

figure('Position',[100,100,800,400], 'Name', 'Критерий Колмогорова');

subplot(1,2,1);

stairs([X1(1)-0.1; X1; X1(end)+0.1], [0; F_emp; 1], 'b-', 'LineWidth',1.5);

hold on;

plot(X1, F_theor, 'r-', 'LineWidth',2);

[D_max, idx] = max(abs(F_emp - F_theor));

plot([X1(idx), X1(idx)], [F_emp(idx), F_theor(idx)], 'g--', 'LineWidth',2);

xlabel('x'); ylabel('F(x)');

title(sprintf('Функции распределения: D_{max} = %.4f', D_max));

legend('F_n(x)', 'F(x)', 'D_{max}', 'Location','best'); grid;

subplot(1,2,2);

plot(X1, F_emp - F_theor, 'k-', 'LineWidth',1.5);

hold on;

plot([X1(1), X1(end)], [0, 0], 'r--');

plot([X1(idx), X1(idx)], [0, D_max], 'g--', 'LineWidth',2);

xlabel('x'); ylabel('F_n(x) - F(x)');

title('Разность функций распределения'); grid;

%% 4. Расчёт значений корреляционной функции случайного процесса

X_full = X_all;

n_full = length(X_full);

m_full = mean(X_full);

tau_max = floor(n_full / 2);

tau = 0:tau_max;

R = zeros(size(tau));

for k_idx = 1:length(tau)

if tau(k_idx) == 0

R(k_idx) = var(X_full, 1);

else

sum_val = 0;

for i = 1:n_full - tau(k_idx)

sum_val = sum_val + (X_full(i+tau(k_idx)) - m_full) * (X_full(i) - m_full);

end

R(k_idx) = sum_val / (n_full - tau(k_idx) - 1);

end

end

% Нормированная корреляционная функция

r_norm = R / R(1);

% Графики корреляционной функции

figure('Position',[100,100,900,300], 'Name', 'Корреляционная функция');

subplot(1,2,1);

plot(tau, R, 'b-', 'LineWidth',2);

xlabel('τ'); ylabel('R(τ)');

title('Корреляционная функция'); grid;

subplot(1,2,2);

plot(tau, r_norm, 'r-', 'LineWidth',2);

xlabel('τ'); ylabel('r(τ)');

title('Нормированная корреляционная функция'); grid;

%% 5. Проверка гипотезы о стационарности случайного процесса от отношению к дисперсии

% Выравнивание выборок по минимальному размеру

n_min = min(stats(:,1));

D_vals = zeros(5,1);

for j = 1:5

X_short = clean_viborki{j}(1:n_min);

D_vals(j) = var(X_short, 1);

end

% Статистика Кохрана

G = max(D_vals) / sum(D_vals);

G_crit = 0.2; % для k=5, f=n_min-1, q=0.05 (из таблицы)

stat_var = G <= G_crit;

%% 6. Проверка гипотезы об эргодичности стационарного процесса

% Критическое значение нормированной корреляционной функции

r_crit = 0.1; % для уровня значимости q=0.05

% Поиск τ1

tau1_idx = find(abs(r_norm(2:end)) <= r_crit, 1);

if isempty(tau1_idx)

ergodic = false;

tau1 = Inf;

else

ergodic = true;

tau1 = tau(tau1_idx + 1);

end

% График для проверки эргодичности

figure('Position',[100,100,800,400], 'Name', 'Проверка эргодичности');

subplot(1,2,1);

plot(tau, abs(r_norm), 'b-', 'LineWidth',1.5);

hold on;

yline(r_crit, 'r--', 'LineWidth',2, 'DisplayName', sprintf('r_кр=%.2f', r_crit));

if ergodic

xline(tau1, 'g--', 'LineWidth',2, 'DisplayName', sprintf('τ₁=%d', tau1));

end

xlabel('τ'); ylabel('|r(τ)|');

title('Затухание корреляционной функции');

legend('Location','best'); grid;

ylim([0, max(1.1*r_crit, max(abs(r_norm)))]);

subplot(1,2,2);

semilogy(tau, abs(r_norm), 'b-', 'LineWidth',1.5);

hold on;

yline(r_crit, 'r--', 'LineWidth',2);

if ergodic

xline(tau1, 'g--', 'LineWidth',2);

end

xlabel('τ'); ylabel('|r(τ)| (лог. шкала)');

title('Затухание'); grid;

%% Результаты обработки полученных данных

fprintf('Итого:\n\n');

for j = 1:5

fprintf(' Из выборки %d удалено %d промахов.\n', j, ubit_promakhi(j));

end

fprintf('\n Согласно критерию асимметрии и эксцесса, ');

if all(norm_assym)

fprintf('все выборки имеют нормальное распределение.\n');

else

fprintf('не все выборки имеют нормальное распределение.\n');

end

fprintf('\n Согласно критерию Пирсона: %s (χ²=%.2f, крит=%.2f)\n', string(normal_chi2), chi2, chi2_crit);

fprintf(' Согласно критерию Колмогорова: %s (λ=%.3f, крит=%.2f)\n', string(normal_kolm), lambda, lambda_crit);

fprintf('\n Стационарность случайного процесса по дисперсии составляет: %s (G=%.4f, крит=%.3f)\n', string(stat_var), G, G_crit);

fprintf('\n Эргодичность случайного процесса составляет %s', string(ergodic));

if ergodic

fprintf(' (τ₁=%d)', tau1);

end

fprintf('\n r_кр=%.3f\n', r_crit);

fprintf('\n Корреляционная функция случайного процесса принимает значение\n');

fprintf(' R(0)=%.4f, R(%d)=%.4f\n', R(1), tau(end), R(end));

2. Результаты работы программы

Итоги работы программы:

Итого:

Из выборки 1 удалено 3 промахов.

Из выборки 2 удалено 5 промахов.

Из выборки 3 удалено 6 промахов.

Из выборки 4 удалено 4 промахов.

Из выборки 5 удалено 4 промахов.

Согласно критерию асимметрии и эксцесса, все выборки имеют нормальное распределение.

Согласно критерию Пирсона: false (χ²=82.43, крит=15.51)

Согласно критерию Колмогорова: true (λ=0.929, крит=1.22)

Стационарность случайного процесса по дисперсии составляет: false (G=0.2217, крит=0.200)

Эргодичность случайного процесса составляет true (τ₁=1)

r_кр=0.100

Корреляционная функция случайного процесса принимает значение

R(0)=0.0821, R(489)=-0.0002

Рисунок 1 - Проверка по критерию Пирсона

Рисунок 2 - Проверка по критерию Колмогорова

Рисунок 3 - Корреляционная функция случайного процесса

Рисунок 4 - Эргодичность стационарного процесса

вывод

Согласно результатам работы разработанного программного кода, в исходных выборках очень мало промахов, до 6 промахов из общего числа 200 записей, и каждая выборка метода моментов и Колмогорова, однако исследуемый случайный процесс не проходит по критерию Пирсона.

Проверка рассматриваемого случайного процесса на стационарность по его дисперсии показала, что процесс не является стационарным, а значение его нормированной корреляционной функции, в самом начале процесса равное 1, практически сразу падает до значений ниже 0,1. Полученные результаты свидетельствуют о не стационарности и значительной некоррелированности рассматриваемого случайного процесса.

Также случайный процесс эргодичен.

10