Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

4.6 KiB

Защита модуля 3

Гордиевских Данил, А-03-23

Вариант 3 задание

  1. Создайте модуль М1, содержащий две функции:
  • функция 1: аргументы - имя текстового файла, содержащего некоторое число отсчетов сигнала, целочисленный параметр TAU и числовой параметр К; в функции считывается сигнал из файла в список SPS1 и формируется второй список SPS2, элементы которого определяются по правилу: первые (TAU-1) элементов равны 0, а последующие определяются по формуле: SPS2[i]=K*SPS1[i-TAU]; оба списка возвращаются в качестве результатов работы функции;

  • функция 2: аргументы - два числовых списка SS1 и SS2, а также целочисленный параметр ТТ; в функции рассчитывается и возвращается значение

D= (SS1[TT]-SR1)(SS2[0] - SR2)+ (SS1[TT+1]-SR1)(SS2[1] - SR2)+:+

(SS1[i]-SR1)(SS2[i-TT] - SR2)+:+ (SS1[N]-SR1)(SS2[N-TT] - SR2),

где N - длина списка SS1, SR1, SR2 - средние значения соответствующих списков.

  1. Создайте еще один модуль М2, в котором должны выполняться операции:
  • запрашивается и вводится имя текстового файла с данными; проверяется наличие файла и при отсутствии - повторение запроса;

  • запрашивается значение параметра TAU и проверяется TAU >=0;

  • вызывается функция 1 с указанными именем файла и параметром TAU, и случайным значением К из диапазона значений от 2 до 7; отображаются рассчитанные списки;

  • вызывается функция 2 в цикле со значениями TT от 0 до TAU+5; результаты записываются в список SS3;

  • список SS3 записывается в текстовый файл с именем Res11.bin.

  1. Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика список SPS3.

  2. Подготовьте файл с исходными данными - 50 отсчетов случайного нормально распределенного с некоторыми параметрами сигнала. Проведите по программе расчеты со значениями TAU, равными 0, 5 и 10.

Выполнение

Текст модуля M0

import pylab
import M2

pylab.plot(M2.SS3)
pylab.show()

Текст модуля M1

def fun(name, TAU, K):
    sps2 = []
    f = open(name, "r")
    sps1 = f.readlines()
    for i in range(len(sps1)):
        sps1[i] = float(sps1[i].replace("\n", ""))
        if i < TAU:
            sps2.append(0)
        else:
            sps2.append(K * sps1[i-TAU])
    return([sps1,sps2])


def fun2(SS1, SS2, TT):
    D = 0
    N = len(SS1)
    SR1 = sum(SS1)/len(SS1)
    SR2 = sum(SS2)/len(SS2)
    for i in range(TT, len(SS1)):
        D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
    for i in range(len(SS1)):
        D+=(SS1[i]-SR1)*(SS2[i-TT]-SR2)
    for i in range(len(SS1)):
        D+=(SS1[N-1]-SR1)*(SS2[N-1-TT]-SR2)
    return(D)

Текст модуля M2

import os
import pickle
import random
import M1
while True:
    name = input("Введите название текстового файла: ")
    if os.path.exists(name):
        print("Файл сущетсвует")
        break
    else:
        print("Файл НЕ сущетсвует, повторите PopITку")

while True:
    TAU = int(input("Введите значение TAU >= 0: "))
    if TAU >= 0:
        break
    else:
        print("Сказали же, TAU больше нуля! Мне казалось, что все это поняли")

SS3 = []
k = random.randint(2,7)

res = M1.fun(name, TAU, k)

for TT in range(TAU+5):
    SS3.append(M1.fun2(res[0], res[1], TT))

pickle.dump(SS3, open("Res11.bin", "wb"))

Вывод

График

График

График