The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Оконная функция

Оконная функция

Предыдущая  Содержание  Следующая  V*D*V

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

 

Использование оконной функции заключается в предварительном умножении отсчётов сигнала на неё и только затем производится расчёт спектра.

 

Некоторые типы оконных функций имеют нулевые коэффициенты на краях, что приводит к потере крайних значений выборки.

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

Реализация

 public static final byte RECTANGULAR = 0;// Rectangular window function

 public static final byte BARTLETT = 1;// Bartlett (triangular) window

 public static final byte HANNING = 2;// Hanning window

 public static final byte HAMMING = 3;// Hamming window

 public static final byte BLACKMAN = 4;// Blackman window

 public static final byte BLACKMAN_HARRIS = 5;// Blackman-Harris window, боковые лепестки на уровне -92дБ

 public static final byte BLACKMAN_NUTTAL = 6;// Blackman-Nuttal window

 public static final byte NUTTAL = 7;// Nuttal window

 //

/**

* получить коэффициент заданного типа окна

* @param i - индекс

* @param n - размер окна

* @param type - тип окна

* @return коэффициент

*/

 static double getWindow(int i, int n, byte window) {

         if( window == BARTLETT ) {// устраняем нулевые значения

                 double a = i - (n - 1) / 2.0;

                 if( a < 0 ) a = -a;

                 return 2.0 / n * (n / 2.0 - a);

         }

         else if( window == HANNING )// устраняем нулевые значения

                 return 0.5 - 0.5 * Math.cos(Math.PI / n * (1.0 + 2.0 * i));

         if( window == BLACKMAN ) {// устраняем нулевые значения

                 double a = Math.PI / n * (1.0 + 2.0 * i);

                 return 0.5 * (1.0 - 0.16 - Math.cos(a) + 0.16 * Math.cos(2.0 * a));

         }

         else

         {

                 double a = 2.0 * Math.PI * i / (n - 1);

                 if( window == HAMMING )

                         return 0.54 - 0.46 * Math.cos( a );

                 else if( window == BLACKMAN_HARRIS )

                         return 0.35875 - 0.48829 * Math.cos(a) + 0.14128 * Math.cos(2.0 * a) - 0.01168 * Math.cos(3.0 * a);

                 else if( window == BLACKMAN_NUTTAL )

                         return 0.35819 - 0.4891775 * Math.cos(a) + 0.1365995 * Math.cos(2.0 * a) - 0.0106411 * Math.cos(3.0 * a);

                 else if( window == NUTTAL )

                         return 0.355768 - 0.487396 * Math.cos(a) + 0.144232 * Math.cos(2.0 * a) - 0.012604 * Math.cos(3.0 * a);

         }

         //if( type == RECTANGULAR )

         return 1.0;

 }

 

Предыдущая  Содержание  Следующая