Объектно-ориентированное программирование

2 000 руб. за проект
29 апреля 2022, 23:42 • 4 отклика • 215 просмотров
ВАЖНО! В первую очередь, это работа по построению объектно-ориентированной архитектуры, и только во вторую - работающий код. Начните с создания классов с пустыми методами-заглушками, посмотрите как они будут взаимодействовать, какие данные каждому для работы нужны, раскидайте внутри классов поля, сделайте конструкторы. И только после того, как у вас будет готовый скелет (еще раз, БЕЗ наполнения методов и БЕЗ фактической работы, достаточно написать в каждом print('Generator->signal'), т.е. писать что за метод и какого класса вызывается. И только после того, как вам окончательо станет понятно что за чем следует и как это выстроить, начинайте наполнять кодом.





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

  2. Класс генератора простых сигналов имеет функционал:

    • создания сигнала каждой из заданных форм: гармонический, треугольный, ШИМ с заданной скважностью, пила;

    • параметры: частота (период), частота дискретизации, длительность (как в сэмплах, так и в секундах), амплитуда;

    • возвращать как весь сигнал (всю длительность в виде массива), так и отдельную его выборку по номеру сэмпла или по отметке времени (во втором случае - ближайшую);

    • иметь функцию-генератор, возвращающий по запросу следующую выборку сигнала (yield).



  3. Класс-наследник генератора простых сигналов, содающий амлитудно-моделированный сигнал:

    • огибающая задана в виде заранее заданного набора выборок (цифровой сигнал) с указанной частотой дискретизации этих выборок;

    • частота модулирующего сигнала или задается, или автоматически подбирается (по умолчанию можно уменьшать частоту огибающей в 20 раз относительно заполнения);

    • возвращать как весь сигнал (всю длительность в виде массива), так и отдельную его выборку по номеру сэмпла или по отметке времени (во втором случае - ближайшую);

    • иметь функцию-генератор, возвращающий по запросу следующую выборку сигнала (yield).



  4. Класс анализатора сигнала должен:

    • строить график по полученному временнОму представлению сигнала;

    • строить его спектр Фурье;

    • возвращать дисперсию, среднее, медианное, минимальное и максимальное значения, размах сигнала, отображать по запросу их в виде горизонтальных линий на графике;

    • строить примерный (прогнозируемый) сигнал с помощью обратного преобразования Фурье, используя первые несколько максимальных гармоник (частот) спектра Фурье (по умолчанию - 5, но можно задать любое).



  5. Класс цепи должен уметь работать как с сигналом в виде массива, так и с последовательно приходящими выборками (из методов-генераторов yield):

    • пропускать сигнал без изменений (bypass);

    • преобразовывать его указанным в п.6 алгоритмом;

    • хранить входной и выходной сигналы в буфере (заполнять массив), по умолчанию - без ограничения размера (весь), но с возможностью этот размер задать (хранить только последние пришедшие и ушедшие);

    • возвращать как полным массивом, так и генератором yield.



  6. Задание: свертка (convolve) сигнала с гармоническим, заданной амплитуды и частоты;
Файлы