
Лаба 3 / Лабораторная работа #3 Python прототипирование
.docxЛабораторная работа № 3
«Прототипирование генератора синусоидального сигнала с амплитудной модуляцией на Python»
Краткие теоретические сведения:
Прототипирование (англ. prototyping от др.-греч. πρῶτος — первый и τύπος — отпечаток, оттиск; первообраз) — быстрая «черновая» реализация базовой функциональности для анализа работы системы в целом.
Цель прототипирования — проверить правильность выбранного подхода на раннем этапе разработки или получить новое знание об интересной нам предметной области, проведя эксперимент.
Основные требования к инструментам прототипирования микроэлектроники перечислены ниже, в порядке убывания важности:
Низкие затраты на разработку. Чем раньше будет создан прототип, тем лучше.
Низкая стоимость внесения изменений. Прототип не является чем-то статичным, в него очень часто вносятся изменения. Чем короче цикл внесения изменений, тем больше экспериментов удастся провести на этапе проектирования. В идеальном случае цикл внесения изменений не должен превышать нескольких дней.
Скорость работы модели (скорость моделирования). Чем выше скорость, тем большие по объёму тесты можно будет подать на вход модели. Разница в поведении на малом и большом тестах может быть значительной1 и существенно повлиять на выбор подхода к решению.
Масштабируемость инструмента реализации. Возможно ли задействовать большее число людей для повышения скорости реализации.
Встроенность в цикл разработки: возможность постепенного уточнения описания компонента с целью перехода к описанию уровня синтезируемой модели.
Лабораторная работа будет посвящена прототипированию генератора синусоидального сигнала с амплитудной модуляцией. В качестве генератора будет использован цифровой вычислительный синтезатор.
Цифровой вычислительный синтезатор
Основными функциональными блоками ЦВС являются: аккумулятор фазы, преобразователь фаза-амплитуда, ЦАП и фильтр нижних частот. Также, ЦВС содержит некоторое количество памяти, служащей для хранения параметров синтезируемого сигнала, таких как частота, фаза, амплитуда форма и др.
В каждом такте опорной частоты аккумулятор фазы (как правило, двоичный счетчик) увеличивает своё значение на величину, записанную в ячейку памяти, число, записанное в которой обычно называют приращение фазы. В результате, значение аккумулятора фазы ступенчато-линейно увеличивается со временем. Затем, вычисленное таким образом в каждом такте значение фазы преобразуется в значение амплитуды. В принципе, данное преобразование может быть произвольным и зависит от приложения. В наиболее распространенном на практике случае, для синтеза гармонических колебаний, вычисляется синус текущего значения фазы. Результат вычисления подается на вход ЦАП, выходной сигнал которого сглаживается от ступенек дискретизации фильтром нижних частот.
Цифровая амплитудная модуляция
Это тип модуляции называется амплитудной манипуляцией (ASK, amplitude shift keying). Самый простой случай «включение-выключение» (OOK, on-off keying), и это почти соответствует математическим связям, обсуждаемым на странице, посвященной «аналоговой амплитудной модуляции»: если мы используем цифровой сигнал в качестве низкочастотного модулирующего сигнала, то перемножение модулирующего сигнала и несущей приводит к модулированному сигналу, который идет с нормальным уровнем при высоком логическом уровне и «выключен» при низком логическом уровне. Амплитуда логической единицы соответствует индексу модуляции.
import matplotlib.pyplot as plt
import numpy as np
freq = 0.0125 # carrier signal freq
period_per_bit = 10
level_len = period_per_bit/freq
bit_seq = np.array([1, 0, 1, 1, 0])
sig_len = level_len * len(bit_seq)
x = np.arange(0, sig_len)
y = np.sin(2 * np.pi * freq * x)
wide_seq = np.repeat(bit_seq, level_len)
m = wide_seq*y
plt.plot(x,wide_seq,x,m)
plt.savefig('plot.png')
Задание на лабораторную работу 3:
Создать прототип цифрового вычислительного синтезатора с параметрами в соответствии с номером варианта. В таблице указаны разрядности параметров ЦВС.
-
Варианты
Аккумулятор фазы, бит
Выход фазы, бит
Выход амплитуды, бит
1, 6, 11, 16
32
15
10
2, 7, 12, 17
36
16
12
3, 8, 13, 18
42
18
14
4, 9, 14, 19
48
19
16
5, 10, 15, 20
64
20
16
Дополнить функционал ЦВС возможностью задавать амплитуду, офсет амплитуды, офсет фазы;
Реализовать амплитудную модуляцию;
Описать генератор и приемник амплитудной модуляции, использовав для этого следующие функции:
def encoder(sin_amp, sin_freq, sin_amp_offset, sin_phase_offset, code = '1011100001000111011110', code_level_len = 10):
...
return encoded_sin
def decoder(encoded_sin, code_level_len):
...
return code
Примерный план кода:
binary_seq = [1,0,1,1,1,1,1,1,0,0,0,]
# sin generation
my_dds = Dds(phase_acc_width, freq_word_width, phase_width, amp_width)
my_sin = my_dds.generate(count)
# encode
encoded_signal = encode(my_sin, binary_seq, periods_per_bit)
# decode decoded_seq = decode(binary_seq, periods_per_bit)
print(decoded_seq == binary_seq)
Оформить в формате Word отчет о выполненной работе. Требования к отчету:
название работы / формулировка заданий;
описание хода выполнения работы;
заключение по результатам выполненной работы.