import math def function1(signal, N): """ Функция 1: рассчитывает оценки средних и дисперсий по первым N отсчетам и по оставшейся части сигнала Аргументы: signal - ряд отсчетов сигнала N - целочисленный параметр (количество первых отсчетов) Возвращает: M1, M2, C1, C2 - средние и дисперсии по двум частям сигнала """ part1 = signal[:N] part2 = signal[N:] if len(part1) > 0: M1 = sum(part1) / len(part1) sum_sq1 = 0 for x in part1: sum_sq1 += (x - M1) ** 2 C1 = sum_sq1 / (len(part1) - 1) if len(part1) > 1 else 0 else: M1 = 0 C1 = 0 if len(part2) > 0: M2 = sum(part2) / len(part2) sum_sq2 = 0 for x in part2: sum_sq2 += (x - M2) ** 2 C2 = sum_sq2 / (len(part2) - 1) if len(part2) > 1 else 0 else: M2 = 0 C2 = 0 return M1, M2, C1, C2 def function2(filename): """ Функция 2: читает данные из файла, передает их в функцию 1, отображает результаты и рассчитывает статистики t и F Аргумент: filename - имя текстового файла с отсчетами сигнала Возвращает: signal - прочитанный сигнал t, F - рассчитанные статистики M1, M2, C1, C2 - промежуточные результаты """ file = open(filename, 'r') content = file.read() file.close() elements = content.replace(',', ' ').split() signal = [] for elem in elements: if elem.strip(): signal.append(float(elem)) NN = len(signal) N = NN // 2 print(f"Параметр N (половина длины) = {N}") M1, M2, C1, C2 = function1(signal, N) print(f"Первые {N} отсчетов: M1 = {M1:.4f}, C1 = {C1:.4f}") print(f"Оставшиеся {NN-N} отсчетов: M2 = {M2:.4f}, C2 = {C2:.4f}") if NN > 2 and (C1 * N + C2 * (NN - N)) > 0: numerator = abs(M1 - M2) denominator = math.sqrt((C1 * N + C2 * (NN - N)) / (NN - 2)) t = numerator / denominator if denominator != 0 else 0 else: t = 0 print("Недостаточно данных для расчета t") if C2 > 0 and C1 > 0: F = max(C1, C2) / min(C1, C2) else: F = 1 print(f"Статистика t = {t:.6f}") print(f"Статистика F = {F:.6f}") return signal, t, F, M1, M2, C1, C2