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

Хусточка А.В. Отчёт по лабораторной работе №1 ПИН-41

Результаты работы программы 1_1:

Частота дискретизации вычисляется по критерию Найквиста (частота дискретизации должна быть хотя бы в 2 раза больше, чем собственная частота максимального из колебаний). В противном случае сигнал будет восстановить невозможно.

Результат работы программы 1_2:

Квадрат фурье-образа:

На графике ниже представлено прямое и обратное преобразование Фурье:

А)блабла..

Б) Программная реализация:

import numpy as np import matplotlib.pyplot as plt import scipy.fftpack import common.common as common print('*** Программа для вычисления фурьеобразов исходных сигналов с помощью ДПФ и с помощью БПФ ***'); A = 1 f0 = 2000 fdn = 2 * f0 # Частота дискретизации # в соответствии с критерием Найквиста mvis = 5 fdv = mvis * fdn # Частота дискретизации длЯ визуализации dt = 1 / fdv # Интервал дискретизации по времени T = 1 / f0 # Период сигнала NT = 10 t = common.array(0, dt, NT * T) # np.linspace(0.0, dt, NT * T) y = A * np.sin(2 * np.pi * f0 * t) # Вектор сигнала N = len(y) k = common.array(0, 1, N) ff = k * fdv / N # Вектор частоты, Гц # dft Ex = np.exp(-1j * 2 * (np.pi / N) * np.matrix(k).transpose() * np.matrix(k)) Y_DFT = np.array(y * Ex).flatten() Y_DFT2 = [x * y for x, y in zip(Y_DFT, np.conj(Y_DFT))] # Квадрат модуля Фурье - образа # fft Y_FFT = scipy.fftpack.fft(y) Y_FFT2 = [x * y for x, y in zip(Y_FFT, np.conj(Y_FFT))] # Квадрат модуля Фурье - образа fig, ax = plt.subplots() ax.plot(ff, Y_DFT.real) ax.plot(ff, Y_FFT.real) fig, ax = plt.subplots() ax.plot(ff, Y_DFT.imag) ax.plot(ff, Y_FFT.imag) fig, ax = plt.subplots() ax.plot(ff, Y_DFT2) ax.plot(ff, Y_FFT2) plt.show()

В) Результат работы программы:

Образ исходного сигнала представлен на графике Figure 1:

Мнимая часть образа исходного сигнала представлен на графике Figure 2:

Квадрат фурье-образа представлен на графике Figure 3:

Программная реализация для построения графика зависимости времени обработки исходных данных от размерности массива

ort time import numpy as np import matplotlib.pyplot as plt import scipy.fftpack import common.common as common # Нейронные сети # Лабораторная работа 1 # Программа вычислениЯ времени выполнения ДПФ и БПФ print('*** Программа вычислениЯ времени выполнения ДПФ и БПФ ***') A = 1 f0 = 2000 number_of_points = [] dft_times = [] fft_times = [] T = 1 / f0 # Период сигнала NT = 10 for n in range(7, 13): N = np.power(2, n) number_of_points.append(N) k = common.array(0, 1, N) t = np.array([i * ((NT * T) / N) for i in range(0, N)]) y = A * np.sin(2 * np.pi * f0 * t) # Вектор сигнала # dft dft_start = time.time() Ex = np.exp(-1j * 2 * (np.pi / N) * np.matrix(k).transpose() * np.matrix(k)) Y_DFT = np.array(y * Ex).flatten() dft_stop = time.time() dft_times.append(dft_stop - dft_start) # fft fft_start = time.time() Y_FFT = scipy.fftpack.fft(y) fft_stop = time.time() fft_times.append(fft_stop - fft_start) print(Y_DFT) print(Y_FFT) fig, ax = plt.subplots() ax.plot(number_of_points, dft_times) ax.plot(number_of_points, fft_times) plt.show() print('********** Конец работы **********')

Результат работы программы:

Программная реализация функции активации:

import numpy as np def jump(x, v0): result = np.zeros(len(x)) for i in range(0, len(x)): if x[i] > v0: result[i] = 1 else: result[i] = 0 return result def piecewise_linear(x, v0, v1): result = np.zeros(len(x)) for i in range(0, len(x)): if x[i] < v0: result[i] = 0 if (x[i] > v0) and (x[i] < v1): result[i] = (x[i] - v0) / (v1 - v0) if x[i] > v1: result[i] = 1 return result def logistic(x, a): return 1 / (1 + np.exp(-a * x)) def hyperbolic_tangent(x, a): return np.tanh(x / a)

Программная реализация прорисовки функции активации:

import task2.activation_functions as af import matplotlib.pyplot as plt import common.common as common # Нейронные сети # Лабораторная работа 1 # Программа построения ф-ий активации print('*** Программа построения ф-ий активации ***'); x = common.array(0, 0.01, 4) fig, ax = plt.subplots() ax.plot(x, af.jump(x, 2)) fig, ax = plt.subplots() ax.plot(x, af.piecewise_linear(x, 2, 3)) fig, ax = plt.subplots() ax.plot(x, af.logistic(x, 1)) fig, ax = plt.subplots() ax.plot(x, af.hyperbolic_tangent(x, 1)) plt.show() print('********** Конец работы **********');

Результат работы программы:

График функции jump:

График кусочно-линейной функции:

График логистической функции:

График функции гиперболического тангенса:

Программная реализация:

import task2.activation_functions as af import matplotlib.pyplot as plt import common.common as common # Нейронные сети # Лабораторная работа 1 # Программа для представления данных в виде матриц размерности Nx2 обучающего набора print('*** Программа для представления данных в виде матриц размерности Nx2 обучающего набора ***') h = 0.5 # дельта t = common.array(0, h, 5) jump_training_set = [t, af.jump(t, 2)] print('jump_training_set = ' + str(jump_training_set)) linear_training_set = [t, af.piecewise_linear(t, 2, 3)] print('lineral_training_set = ' + str(linear_training_set)) logistic_training_set = [t, af.logistic(t, 1)] print('logistic_training_set = ' + str(logistic_training_set)) print('********** Конец работы **********')

Результат работы программы:

Программная реализация:

import numpy as np import task2.activation_functions as af import matplotlib.pyplot as plt import common.common as common # Нейронные сети # Лабораторная работа 1 # Программа для вычисления производной сигмоидной ф-ии print('*** Программа для вычисления производной сигмоидной ф-ии ***') a = 1 h = 0.001 # дельта x = common.array(0, h, 5) y1 = a * np.exp(-a * x) * (1 / np.power(1 + np.exp(-a * x), 2)) y2 = np.append(0, np.diff(af.logistic(x, a)) / h) fig, ax = plt.subplots() ax.plot(x, y1) ax.plot(x, y2) plt.show() print('********** Конец работы **********')

Результат работы программы:

Тот же график, что выше, но в другом масштабе:

Жёлтый график отображает численное решение дифференциального уравнения, а синий график – точное решение. Графики расходятся из-за погрешности при численном решении.