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

качестве результата возвращалось FnFprevious mod 1000. Значение предыдущего числа Ферма Fprevious, используемое при первом вызове функции, должно передаваться как параметр в замыкание. С помощью декоратора реализуйте проверку на валидность переданного в функцию числа: если n меньше нуля, то в качестве результата выдать «Ошибка», в противном случае – результат выполнения функции.

18.Реализуйте замыкание так, чтобы при каждом вызове функции используя рекурсию вычислялось число Эйлера по формуле ( , ) = ( + 1) ( − 1, ) + ( −) ( − 1, − 1), A(0,k)=0 для всех k>0, A(n,0)=1 для всех n>0, A(n,k)=0 для всех k≥n, A(0,0)=1 и в качестве результата возвращалась сумма чисел Эйлера для фиксированного n. Значение суммы, используемое при первом вызове функции, должно передаваться как параметр в замыкание. С помощью декоратора реализуйте проверку на валидность переданных в функцию чисел: если n < 0 или k < 0, то в качестве результата выдать «Ошибка», в противном случае – результат выполнения функции.

19.Реализуйте замыкание так, чтобы при каждом вызове функции используя рекурсию по переданному в качестве значения параметра функции целому n вычислялось n-e число Фибоначчи и в качестве результата возвращалось произведение последних четырех рассчитанных чисел Фибоначчи. Значение предшествующих чисел Фибоначчи, используемых при начальных вызовах функции, должны задаваться через передачу параметров в замыкание. С помощью декоратора реализуйте проверку на валидность переданного в функцию числа: если n меньше нуля, то в качестве результата выдать «Ошибка», в противном случае – результат выполнения функции.

20.Реализуйте замыкание так, чтобы при каждом вызове функции используя

рекурсию вычислялся гиперболический косинус по формуле С ( ) = С −1( ) +

2 , С0( ) = 1, и в качестве результата возвращалось три последних рассчитанных

(2 )!

значения. Значения предыдущих вычислений, используемых при первом вызове функции, должны передаваться как параметры в замыкание. С помощью декоратора реализуйте проверку на валидность переданного в функцию числа: если x < 0 или n < 10 то в качестве результата выдать «Ошибка», в противном случае – результат выполнения функции.

21. Реализуйте замыкание так, чтобы при каждом вызове функции используя

рекурсию вычислялся n-ый член последовательности по формуле =

−1+ −2

, 0 =

2

 

 

0, 1 = 1 и в качестве результата возвращалось произведение

текущего и

предыдущего рассчитанного значения, если n является четным, и их частное, если n – нечетное. Значение предшествующего рассчитанного an, используемого при первом вызове функции, должно передаваться как параметр в замыкание. С помощью декоратора реализуйте проверку на валидность переданного в функцию числа: если n меньше нуля, то в качестве результата выдать «Ошибка», в противном случае – результат выполнения функции.

22. Реализуйте замыкание так, чтобы при каждом вызове функции используя рекурсию вычислялось число Стирлинга второго рода по формуле:

( , ) = ( − 1, ) + ( − 1, − 1), S(0,0)=1, S(n,0)=0 для всех n≥1, S(n,k)=0 для всех k>n, S(n,1)=1 для всех n≥1, S(n,n)=1 для всех n≥0 и в качестве результата возвращалось произведение текущего и предыдущего рассчитанного значения. Значение предыдущего вычисления, используемое при первом вызове функции, должно передаваться как параметр в замыкание. С помощью декоратора реализуйте проверку на валидность переданных в функцию чисел: если n < 0 или k < 0, то в качестве результата выдать «Ошибка», в противном случае – результат выполнения функции.

Задание 8

1.Генератор тактовых импульсов. Создайте генератор, который yields

последовательность тактовых импульсов (0, 1, 0, 1, ...). Формула переключения состояния: s = 1 - s . Начальное состояние: s = 0.

2.Генератор ШИМ сигнала. Реализуйте генератор ШИМ с заданной скважностью D (0 < D < 1) и периодом T. Формула: y(t) = 1 если (t mod T) < D·T, иначе y(t)

=0. Параметры: D = 0.5, T = 10.

3.Генератор синусоидального сигнала (DDS). Напишите генератор для DDS

синтезатора. Формула: y(t) = A·sin(2πft). Используйте приближение синуса: sin(x) ≈ x - x³/6 + x /120. Параметры: A = 1.0, f = 1.0, sample_rate = 100.0.

4.Генератор треугольного сигнала. Создайте генератор треугольного сигнала.

Формула: y(t) = (2A/T)·|(t mod T) - T/2| - A/2. Параметры: A = 1.0, T = 20.

5.Генератор пилообразного сигнала. Реализуйте генератор пилообразного сигнала. Формула: y(t) = A·(t mod T)/T. Параметры: A = 1.0, T = 20.

6.Генератор экспоненциального затухания. Напишите генератор затухающих колебаний. Формула: y(t) = A·kᵗ·sin(2πft), где k < 1 - коэффициент затухания. Параметры: A = 1.0, f = 1.0, k = 0.99, α = 0.1, sample_rate = 100.0.

7.Генератор ЛЧМ сигнала. Создайте генератор линейно-частотной модуляции. Формула: y(t) = sin(2π(f + kt)t). Параметры: f = 1.0, k = 0.1, duration = 100, sample_rate = 100.0.

8.Генератор псевдослучайной последовательности. Реализуйте генератор псевдослучайной бинарной последовательности длиной 3 бита. Формула: новый бит = state[2] XOR state[1], сдвиг регистра вправо. Начальное состояние: 0b101.

9.Генератор АЦП значений. Напишите генератор, эмулирующий АЦП.

Формула: digital = floor((analog - Vmin)/(Vmax - Vmin)·(2ᴺ - 1)). Параметры: Vmin = 0.0, Vmax = 3.3, bits = 8. Входной сигнал: analog = 1.65 + 1.65·sin(2πt/100).

10.Генератор цифрового фильтра. Создайте генератор фильтра скользящего среднего. Формула: y = (x + x + ... + x )/k. Параметры: window_size = 5. Входной сигнал: x(t) = (t mod 50)/50 + 0.1·шум.

11.Генератор П-регулятора. Реализуйте генератор пропорционального регулятора. Формула: u(t) = K ·e(t), где e(t) = setpoint - process_value. Параметры: K = 1.0, setpoint = 0.5. Процесс: process_value = 0.3 + 0.4·(t mod 40)/40.

12.Генератор компаратора. Напишите генератор компаратора. Формула: y(t) =

1если x(t) > threshold, иначе 0. Параметры: threshold = 0.5. Входной сигнал: x(t) = (t mod 30)/30.

13.Генератор делителя частоты. Создайте генератор делителя частоты. Формула: выходной импульс каждый N-й входной импульс. Параметры: division = 4. Вход: меандр с периодом 10.

14.Генератор счетчика импульсов. Реализуйте генератор счетчика импульсов. Формула: count = (count + 1) mod max_count при наличии импульса. Параметры: max_count = 16. Вход: импульсы каждый 10 тактов.

15.Генератор мультиплексора. Напишите генератор мультиплексора 4-в-1. Формула: output = input[select], где select - номер выбранного входа. Параметры: смена канала каждые 25 тактов. Входы: сигналы с разными частотами.

16.Генератор демультиплексора. Создайте генератор демультиплексора 1-в-

4.Формула: output[select] = input, остальные выходы = 0. Параметры: смена выхода каждые 20 тактов. Вход: x(t) = (t mod 30)/30.

17.Генератор сдвигового регистра. Реализуйте генератор сдвигового регистра. Формула: register = [bit, register [0], register [1], ..., register [k-2]].

Параметры: length = 8. Вход: данные каждый 15 тактов.

18.Генератор сумматора. Напишите генератор 4-битного сумматора. Формула: sum = (a + b) mod 2 , carry = 1 если a + b ≥ 2 . Параметры: bits = 4. Входы: a(t) = t mod 16, b(t) = (t + 3) mod 16.

19.Генератор детектора фронта. Создайте генератор детектора фронта сигнала. Формула: rising_edge = 1 если x > x , falling_edge = 1 если x < x . Входной сигнал: меандр с периодом 24.

20.Генератор таймера. Реализуйте генератор таймера. Формула: output = 1 при

0≤ counter < timeout, иначе 0. Параметры: timeout = 10. Запуск по условию: каждые 5 тактов.

21.Генератор ШИМ с регулируемой скважностью. Напишите генератор ШИМ с плавно изменяющейся скважностью. Формула: D(t) = Dmin + (Dmax - Dmin)·(t mod 100)/100. Параметры: Dmin = 0.1, Dmax = 0.9, T = 20.

22.Генератор реле. Создайте генератор реле с гистерезисом. Формула: y = 1

если x > on_threshold, y = 0 если x < off_threshold. Параметры: on_threshold = 0.7, off_threshold = 0.3. Вход: x(t) = (t mod 40)/40.

23.Генератор инкрементального энкодера. Реализуйте генератор инкрементального энкодера. Формула: position = position + 1 если (A rising и B=0)

или (A falling и B=1), position = position - 1 если (A rising и B=1) или (A falling и B=0). Параметры: steps_per_rev = 20.

24.Генератор детектора переполнения. Напишите генератор детектора переполнения. Формула: overflow = 1 если current < previous и previous = max_value. Параметры: bit_width = 4, max_value = 15. Вход: счётчик от 0 до 20.

25.Генератор тактового генератора с дрожанием. Создайте генератор тактовых импульсов с дрожанием. Формула: period = base_period + (t mod (2·jitter + 1) - jitter). Параметры: base_period = 10, jitter = 2.

26.Генератор цифрового потенциометра. Реализуйте генератор цифрового потенциометра. Формула: value(t) изменяется каждые 50 тактов ±10 от середины. Параметры: max_value = 255, начальное значение = 127.

27.Генератор детектора паузы. Напишите генератор детектора паузы в сигнале. Формула: output = 1 если pause_counter ≥ min_pause. Параметры: min_pause

=5. Вход: сигнал с паузами (1 при t mod 30 < 20, иначе 0).

28.Генератор управляемого генератора (VCO). Создайте генератор управляемого генератора. Формула: f(t) = fmin + (fmax - fmin)·control(t), где control(t) = (t mod 100)/100. Параметры: fmin = 1.0, fmax = 10.0.

29.Генератор оконного компаратора. Реализуйте генератор оконного компаратора. Формула: y = -1 если x < low, 1 если x > high, 0 если low ≤ x ≤ high. Параметры: low = 0.3, high = 0.7. Вход: x(t) = (t mod 50)/50.

30.Генератор делителя напряжения. Напишите генератор цифрового делителя напряжения. Формула: Vout(t) = Vin(t)·R2/(R1 + R2). Параметры: R1 = 1000, R2

=1000. Вход: Vin(t) = 3.3·(t mod 40)/40.