Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: LXXXIX Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 11 мая 2020 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Карибов Я.А., Колченко В.В. РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ ДИСКРЕТНОГО ПРЕОБРАЗОВАНИЕ ФУРЬЕ // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. LXXXIX междунар. студ. науч.-практ. конф. № 5(88). URL: https://sibac.info/archive/technic/5(88).pdf (дата обращения: 29.04.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ ДИСКРЕТНОГО ПРЕОБРАЗОВАНИЕ ФУРЬЕ

Карибов Янис Андреевич

студент, институт ПИМиФ, Армавирский государственный педагогический университет,

РФ, г. Армавир

Колченко Валерий Владимирович

студент, институт ПИМиФ, Армавирский государственный педагогический университет,

РФ, г. Армавир

Лапшин Николай Александрович

научный руководитель,

ст. преподаватель, Армавирский государственный педагогический университет,

РФ, г. Армавир

АННОТАЦИЯ

Цель исследования – разработать ПО для визуализации принципа дискретного преобразования Фурье. В статье рассматривается прикладные применения использование дискретного преобразования Фурье. В результате было разработано программное обеспечение, которое демонстрирует, как сложная функция расследуется на множества простых функций.

ABSTRACT

The purpose of the study is to develop software for visualizing the principle of discrete Fourier transform. The article discusses applied applications using the discrete Fourier transform. As a result, software was developed that demonstrates how a complex function is divided on many simple functions.

 

Ключевые слова: Ряд Фурье, дискретное преобразование, разработка ПО на языке программирование Java.

Keywords: Fourier series, discrete transform, Java programming.

 

Ряд Фурье – это представление произвольной функции с периодом в виде ряда. В общем виде рядом Фурье называется разложение элемента по ортогональному базису. Разложение функции в ряд Фурье – хороший инструмент при решении разных задач, потому что обладает свойствами преобразования при дифференцировании, интегрировании, сдвиге функции по аргументу и свёртке функций. Данное преобразование имеет большое значение, поскольку с помощью него можно решать много практических задач.

ДПФ является наиболее важным дискретное преобразование, используется для выполнения анализа Фурье во многих практических применений. В цифровой обработке сигналов, функция любое количество или сигнал , который изменяется с течением времени, например , как давление в звуковой волне , в радио сигнал, или суточные температурных показания, отобранное на конечный интервал времени. В обработке изображений, образцы могут быть значения пикселов вдоль строки или столбца растрового изображения. ДПФ также используется для эффективного решения уравнения в частных производных, а также для выполнения других операций, таких как сверток или умножения больших целых чисел. Мы же будем использовать ДПФ для того, чтобы разложить поступающий сигнал (массив из точек), в массив из окружностей, и создать из них эпицикл, который будет воспроизводить начальный сигнал.

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

.

a — начало функции сигнала

b — конец функции сигнала

Таким образом мы получим количество точек которые необходимы чтоб восстановить путь функции и при этом не будем перегружать компьютер лишней работай , ускоряя тем самым работу программы.

Для решения поставленной задачи целесообразно обратиться к среде программирования Java.

Так, поскольку задание состоит в визуальном отображении дискретного преобразовании Фурье, нам понадобится так называемый «холст», на котором будем «рисовать» все необходимые компоненты. Холст будет иметь размеры 1280x720 пикселей и будет окрашен в черный цвет для контрастности.

Далее необходимо считать сигнал (точки функции). Для этого необходимо использовать классы MouseMotionListener и MouseListener для считывание точек с курсора.

Считывание точек с манипулятора мышь происходит очень просто. Так как мы используем класс MouseMotionListener,  то нам доступны такие функции как mouseDragged, при нажатии любой кнопки мыши и ее протягивании, активируется эта функция с которой мы можем извлечь местоположение мыши на экране и записать их в список переменных. Вот так выглядит эта процедура:

public void mouseDragged(final MouseEvent e) {

    final ComplexNumber temp = new ComplexNumber(e.getX() - (double)(width / 2), e.getY() - (double)(height / 2));

    X.add(temp);}

Далее, полученный результат необходимо передать в функцию с дискретным преобразованием Фурье. Ее формула выглядит следующим образом:

N - число точек функции

k - частота

  - фаза

 - (далее «a») действительная часть комплексного числа

 - (далее «b») мнимая часть комплексного числа

 Так как комплексное число можно отобразить в плоскости xOy, мы можем использовать теорему Пифагора для нахождения растояния от начало координат до точки «z», которая так же является амплитудай сигнала ,либо радиосом окружности (рис 1).

 

Рисунок 1. Комплексное число в плоскость хОy

 

По той же причине мы можем найти ее фазу (угол), для этого необходимо найти арктангенс координат a и b.

Эта функция на языке программировании Java выглядит следующим образом:

private ArrayList<double[]> dft(final ArrayList<ComplexNumber> x) {

    final ArrayList<double[]> X = new ArrayList<double[]>();

    for (int N = x.size(), k = 0; k < N; ++k) {

        ComplexNumber sum = new ComplexNumber(0.0, 0.0);

        for (int n = 0; n < N; ++n) {

            final double phi = Math.PI*2 * k * n / N;

            final ComplexNumber phiC = new ComplexNumber(Math.cos(phi), -Math.sin(phi));

            sum = new ComplexNumber(sum.re + x.get(n).re * phiC.re - x.get(n).im * phiC.im, sum.im + x.get(n).re * phiC.im + x.get(n).im * phiC.re);}

        sum.re /= N;

        sum.im /= N;

        X.add(new double[] { Math.sqrt(sum.re * sum.re + sum.im * sum.im), k, Math.atan2(sum.im, sum.re), sum.re, sum.im });}

return X;}

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

И последнее. Необходимо отоброзить все эти данные на экранне. Так как ряд Фурье имеет переодический характер нужно вместить все кадры в один полный круг, тоесть 2π. Это можно реализовать разделив 2π на количество точек. Таким оброзом мы получим количество кадров которые необходимо отрисовать за один полный цикл эпицикла. При отрисовании последнего кадра, узор будет отриссовыватся занова (Рис.2).

 

Рисунок 2. Диаграмма алгоритма

 

Таким образом была создана программа предоставляющий возможность визуально отоброзить принцип дискретного преоброзования Фурье, а так же контролирование процесса отрисовки исходящего сигнала  для анализа результата. В программу интегрированы графические объекты. Программа является логичной, интуитивно понятной и  максимально информативной. Результаты программы можно увидеть на рисунках ниже (рис.3)

 

Рисунок 3. АГПУ

 

Список литературы:

  1. Герберт Java 2 v5.0 (Tiger). Новые возможности / Герберт, Шилдт. - М.: СПб: БХВ-Петербург, 2005. - 208 c.
  2. Пауэлл Полный справочник по JavaScript / Пауэлл, Шнайдер Томас; , Фриц. - М.: Вильямс; Издание 2-е, 2007. - 960 c.
  3. Программирование на языке Java. - М.: Мультимедиа Технологии и Дистанционное Обучение, 2004. - 416 c.
  4. Горбатов, В.А. Фундаментальные основы дискретной математики. Информационная математика / В.А. Горбатов. - М.: [не указано], 2000. - 171 c.
  5. Ерусалимский, Я.М. Дискретная математики: теория, задачи, приложения / Я.М. Ерусалимский. - М.: [не указано], 2000. - 686 c.
  6. Кук, Д. Компьютерная математика / Д. Кук, Г. Бейз. - М.: [не указано], 2015. - 335 c.
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.