Welcome to svlab

Member Login

Lost your password?

Not a member yet? Sign Up!

Предыдущий пост Следующий пост
08 Oct 2019

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

Введение

Фурье анализ часто используется, если необходимо определить базовые гармоники сигнала протяженного по времени. Тем самым возможно более компактно охарактеризовать исходный сигнал небольшим числом параметров. Также это позволяет исключить наличие шумовой случайной составляющей сигнала. Целью данной работы является поиск способов оценки параметров модели Фурье анализа с дополнительными параметрами сдвига составляющих гармоник по времени. Задачи данного исследования представлены следующими пунктами: - представить задачу оценки параметров модели Фурье анализа как задачу оптимизации с условиями; - использовать программу SEM авторской разработки для моделирования уравнений Фурье анализа. В качестве экспериментальных данных выступали несколько тестовых функций сигналов. Для поиска оптимальных параметров улучшенной модели Фурье анализа была использована программа SEM моделирования структурных уравнений. Структурные уравнения это наиболее общий вид уравнений, позволяющих описать структуру функциональной связи различных параметров моделируемой системы в различных состояниях.

Математическая постановка задачи

Классическая модель Фурье анализа имеет следующий вид:

y_{j} =\sum _{i=1}^{m}\left[a_{i} \sin \left(\nu _{i} t_{j} \right)+b_{i} \cos \left(\nu _{i} t_{j} \right)\right]

Тут

y_{j}

--- величина исходного сигнала в момент времени

t_{j}

;

\nu _{i}

--- частота \textit{i}-ой гармоники;

a_{i}

и

b_{i}

--- амплитуды гармоник

\sin

и $\cos с частотой

\nu _{i}

;

m

--- количество гармоник в ряде Фурье; В работе предлагается улучшенная модель Фурье анализа, включающая в себя сдвиги отдельных гармоник по времени:

y_{j} =\sum _{i=1}^{m}a_{i} \sin \left(\nu _{i} t_{j} +\varphi _{i} \right)

Тут

\varphi _{i}

--- величина смещения \textit{i}-ой гармоники по времени. Предлагаемая модель Фурье анализа обладает тем преимуществом перед классической моделью, что смещение гармоник может быть произвольным, а не только смещенными на

\frac{\pi }{2}

для составляющих гармоник

\sin

и

\cos

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

\left(0;\frac{\pi }{2} \right)

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

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

Методы оптимизации

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

a_{i}

,

\nu _{i}

,

\varphi _{i}

, предлагается осуществлять методом штрафных функций [Банди, 1988]. В качестве метода безусловной оптимизации метода штрафных функций был выбран метод конфигураций [Кокуев, 2011].

Программа SEM

Для численной оптимизации параметров улучшенной модели Фурье анализа предлагается использовать авторскую сертифицированную программу SEM решения структурных уравнений (structural equation modeling) с программной реализацией метода штрафных функций и метода конфигураций [Шовин, 2017]. В программе SEM необходимо переопределить динамически компилируемый класс модели на языке Java:

public class FurieModel extends AnaliserJava {
 
    String log = "";
 
    int getEquationsCounts() {
 
        return 1;
 
    };
 
    int getConstraints1Counts() {
 
        return 0;
 
    };
 
    int getConstraints2Counts() {
 
        int r1 = keq;
 
        int r2 = seq;
 
        return r1 * r2 * 2;
 
    };
 
    boolean[] hash = null;
 
    boolean[] getHashCheck() {
 
        int i, j, k;
 
        int Am = keq * seq;
 
        int Pm = g * n;
 
        int dim = Am + Pm;
 
        if (hash == null) {
 
            hash = new boolean[dim];
 
            for (i = 0; i < Am; i++) {
 
                hash[i] = true;
 
            }
 
            for (i = 0; i < Pm; i++) {
 
                hash[Am + i] = false;
 
            }
 
        }
 
        return hash;
 
    }
 
    int countV = 1;
 
    int getIJ(int i, int j) {
 
        return i * 3 + j;
 
    }
 
    double[][] AM;
 
    int maxIter = 100;
 
    int iIter = 0;
 
    int iIter2 = 0;
 
    int tL;
 
    double sumErr = 0;
 
    double sumErrL = 999999;
 
    double[] getEquations() {
 
        if (AM == null) {
 
            AM = new double[keq][countV];
 
        }
 
        double[] arr = new double[getEquationsCounts()];
 
        double sum = 0;
 
        int i;
 
        int j;
 
        if (sumErrL <= sumErr) {
 
            for (i = 0; i < keq; i++) {
 
                for (j = 0; j < seq; j++) {
 
                    A[i][j] = 0.0;
 
                }
 
            }
 
            for (i = 0; i < keq; i++) {
 
                for (j = 0; j < countV - 1; j++) {
 
                    A[i][j] = AM[i][j];
 
                }
 
            }
 
        }
 
        for (i = 0; i < countV; i++) {
 
            sum += A[0][i] * Math.sin(A[1][i] * Z[0][t] + A[2][i]);
 
        } 
 
        arr[0] = Z[1][t] - sum;
 
        if (tL != t) {
 
            iIter++;
 
            sumErr += Math.abs(arr[0]);
 
        }
 
        tL = t;
 
        log = "";
 
        if ((t >= n - 1) \&\& countV < seq \&\& sumErrL > sumErr) {
 
            iIter = 0;
 
            countV++;
 
            iIter2 = 0;
 
            sumErrL = sumErr;
 
            sumErr = 0;
 
            AM = new double[keq][countV];
 
        }
 
        if (t >= n - 1) {
 
            iIter2++;
 
            sumErr = 0;
 
        }
 
        for (i = 0; i < keq; i++) {
 
            for (j = 0; j < countV; j++) {
 
                AM[i][j] = A[i][j];
 
            }
 
        }
 
        return arr;
 
    }
 
    double[] getConstraints1() { // ограничения равенства
 
        return null;
 
    }
 
    double[] getConstraints2() { // ограничения неравенства
 
        double[] arr = new double[getConstraints2Counts()];
 
        int i, j;
 
        int r1 = keq;
 
        int r2 = seq;
 
        for (i = 0; i < r1; i++) {
 
            for (j = 0; j < r2; j++) {
 
                arr[i * r2 + j] = A[i][j] - 30;
 
                arr[i * r2 + j + r1 * r2] = -A[i][j] + 0;
 
            }
 
        }
 
        return arr;
 
    }
 
    String getLog() {
 
        return log;
 
    }
 
}

Данный код модели реализует последовательное выделение гармоник и оптимизацию их параметров. Выделенным шрифтом в листинге показаны наследуемые переменные и методы. Документацию и определение наследуемых переменных и методов можно изучить на портале http://svlaboratory.org.

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

В качестве программы для решения системы структурных уравнений и определения неизвестных параметров использовалась программа авторской реализации. Программа SEM решения и моделирования структурных уравнений. В программе возможен ввод уравнений и ограничений в виде скриптов на языке Java. В программе осуществляется динамическая компиляция вводимого программного класса, что приводит к наибольшей скорости расчета. Решателем программы является реализованный на языке Java модуль оптимизации на базе метода штрафных функций условной оптимизации и покоординатного спуска безусловной оптимизации. Приложение имеет интерфейс пользователя. Приобрести программу можно по адресу http://svlaboratory.org/blog/blog-single/articleid/36 .

Численный эксперимент

Численный эксперимент данного научного исследования заключался в тестировании предлагаемой модели Фурье анализа. В качестве тестируемого сигнала были взяты 3 гармоники с произвольным смещением по времени и дополнительный шумовой сигнал. В результате оптимизации в программе SEM были найдены все параметры отдельных гармоник. Это подтверждает работоспособность новой модели.

Заключение

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

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

1. Банди Б. Методы Оптимизации. Вводный курс. М.: Радио и связь, 1988.
2. Кокуев А. Г. Оптимальное управление. Поиск экстремумов многомерных функций. АГТУ - Астрахань, 2011. 34с.
3. Шовин В.А. Комплекс программ исследования структуры данных. Навигатор в мире науки и образования. 2017. № 1 (34). С. 35-39.

SHARE:

#

Post dicussion

Контакты

Для связи svbeat@yandex.ru

  • 1