Главная страница

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СПЕКТРАЛЬНОГО ОЦЕНИВАНИЯ ПО МЕТОДУ МИНИМУМА ДИСПЕРСИИ. ДипМинДисп2. Программная реализация спектрального оценивания по методу минимума дисперсии


Скачать 281 Kb.
НазваниеПрограммная реализация спектрального оценивания по методу минимума дисперсии
АнкорПРОГРАММНАЯ РЕАЛИЗАЦИЯ СПЕКТРАЛЬНОГО ОЦЕНИВАНИЯ ПО МЕТОДУ МИНИМУМА ДИСПЕРСИИ
Дата29.04.2021
Размер281 Kb.
Формат файлаdoc
Имя файлаДипМинДисп2.doc
ТипПрограмма
#200184


ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СПЕКТРАЛЬНОГО ОЦЕНИВАНИЯ ПО МЕТОДУ МИНИМУМА ДИСПЕРСИИ
Цель: разработка программы позволяющей проводить сравнительный анализ нелинейного метода спектрального оценивания с известными линейными алгоритмами . Программа должна иметь удобный интерфейс для ее использования в учебном процессе.


1.ВВЕДЕНИЕ.



Большое количество задач сводится к оцениванию спектра на основе ограниченного набора данных. Раздел науки в котором рассматриваются подобные вопросы называется спектральным анализом. Преобразование Фурье является математической основой для решения задач спектрального анализа, и оно связывает временной сигнал ( или последовательность отсчетов сигнала – если рассматриваются дискретные выборки значений сигнала ) и его представление в частотной области. Однако основная проблема заключается в том, что сигналы ( спектр которых измеряется) являются случайными. При этом доступен для вычисления спектра ( или спектрального анализа ) только небольшой временной отрезок данного сигнала. И основная задача спектрального анализа – по отрезку реализации случайного процесса необходимо максимально точно оценить истинный спектр. В настоящее время известно множество методов решения подобной задачи. Их можно разделить на 2 категории – линейные и нелинейные. В данной работе рассматривается разработка программного продукта в котором производится сравнительный анализ ряда линейных алгоритмов и нескольких нелинейных ( современных но недостаточно исследованного ).
2.ДИСКРЕТНОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ
Как говорилось выше математической основой вычисления спектра является преобразование Фурье

+

S ( j w ) =  x(t) e – j w t dt ( 1 )

-
Наибольший практический интерес представляет модуль этой функции

|S ( j w ) | , который является амплитудным спектром сигнала. И этот амплитудный спектр несет информацию о частотах гармонических колебаний составляющих ( в совокупности ) данный сигнал.

Как правило, сигнал имеет ограниченную длительность, поэтому вместо формулы ( 1 ) можно записать

Тсигн

S ( j ) = x(t) exp( - j t ) d t ( 2 )

0

Здесь считается, что сигнал ограничен во времени от 0 до Тсигн .

Часто принято использовать обыкновенную частоту ( в герцах ) и циклическую . Они связаны соотношением
= 2 f . (3)
Поэтому формулу ( 2 ) можно переписать в виде

Тсигн

S ( j f ) =  x(t) exp( - j 2 f t ) d t . ( 4 )

0
При использовании цифровой вычислительной техники вместо вычисления интеграла можно использовать суммирование если дискретизировать сигнал x(t) с достаточно малым шагом T. Как выбрать шаг дискретизации, чтобы сохранить всю информацию о непрерывной функции x(t). Ответ на этот вопрос следует из теоремы Котельникова
Tдискр < 1 / ( 2 f max ) ( 5 )
Здесь f max - максимальная частота спектра сигнала.
Таким образом, можно вместо непрерывного сигнала использовать массив чисел – выбранных значений данного сигнала. И дискретное преобразование Фурье записывается следующим образом

N -1

S( j f )x[ n ] exp ( - j2 fTдискр n ) ( 6 )

n = 0
Здесь f изменяется от 0 до 1/ Tдискр .

Опять же формулу ( 6 ) часто записывают в несколько ином виде (более компактном и удобном виде )

N -1

S( j x[ n ] exp ( - j  n ) ( 7 )

n=0
Здесь 2 f fдискр - дискретная частота и основной интервал дискретной частоты от - доДело в том, что если присмотреться к (7), то мы увидим, что S( j периодическая функция с периодом 2 .

Для лучшего понимания дальнейших алгоритмов рассмотрим следующую задачу . Задан сигнал




x(t) = cos ( 2  fс t ) , при 0 < t < L Tс, ( 8 )

при других значениях t сигнал равен 0.
В ( 8 ) fс = 1 / Tс, fс = 100 Гц, Tс - период косинусоиды, fс - частота косинусоиды, L – количество периодов косинусоиды из которых состоит наш сигнал.

Необходимо вычислить спектр данного сигнала. Как видно сигнал – это отрезок ( L периодов ) фукции соs. Вычисляем спектр данного сигнала .

Если аналитически вычислить преобразование Фурье, а затем построить спектр, то получим следующую приближенную зависимость ( чем больше L, тем она точнее )
| S( j f) | = L sin (  L Tc [ f - fс ] ) / (  [f - fс ] )




Рис. 1

| S( j f) |













0 f
Спектр данного сигнала формально не имеет граничной частоты, т.е. продолжается до бесконечности. Однако он достаточно быстро стремится к 0. При этом если L велико ( в пределе бесконечность ) , то спектр сигнала представляет одну ( дискретную ) гармонику на частоте fс . Однако при приеме мы часто располагаем не всей его длительностью, а частью ( не всеми L периодами , а лишь несколькими ). Далее в следующем примере эта задача реализуется в конкретной программе.
2.1 Пример
Как видно из рис.1 модуль спектральной плотности мощности достаточно быстро уменьшается после fс . Поэтому приближенно будем считать, что практически вся энергия сигнала будет сосредоточена на частотах от 0 до 10 fс . Это вполне справедливо даже при небольших значениях L. В этом случае в соответствие с теоремой Котельникова можно выбрать шаг Tдискр = 1 / [2 *10 * fс ] = 0.0005 c . Заменим непрерывный сигнал дискретным и схема вычисления дискретного преобразования Фурье выглядит следующим образом
Цикл по частоте f от 0 до ( fдискр/2 - как сказано выше это максимальная частота в спектре сигнала) сшагом ( fдискр/2 ) / 500 ,

где 500-количество точек выводимых на график зависимости спектра от частоты

N -1

S( j f x[ n ] exp ( - j2fTдискр n ) ( 9 )

n = 0

Завершение цикла
Далее приводится текст программы из файла p_posl1.cpp.

Выполняемые файлы :

p_posl1.exe ( при L=3 )

p_posl2.exe ( при L=90 ).
#include "model.h"

#include
void disk_spectr( void );

void form( void );
// массив в котором будет формироваться реализация сигнала

float x[5000];
// массив в котором будет формироваться спектр реализации сигнала

float spectr[560];
// f_s – частота сигнала в герцах, T_diskr - шаг (период) дискретизации в секундах // T_s – период функции косинус

// L - число периодов косинусоиды в сигнале
float T_s = 0.01 , T_diskr , f_diskr, f_s;

int N ; // N – число дискретных отсчетов рассматриваемого сигнала

int L = 5 ;
void main ( void )

{

T_diskr = 1 / (2* 10* f_s );

f_diskr = 1 / T_diskr ;

N = T_s / T_diskr * L;
form(); // функция формирующая реализацию сигнала

disk_spectr(); // функция вычисляюшая спектр сигнала
Init_graph();

graf_1("spektr", spectr, 0,499 );

Close_graph();

}

void form ( void )

{

int i;

for ( i = 0 ; i < N ; i++ )

x[i] = x[i] + cos(2*PI* f_s * i* T_diskr );

}

void disk_spectr( void )

{

int i, n;

float ww , max ,df , shag ;

complex mnoz , sym ;

shag = (f_diskr/2) / 500; // Шаг по частоте при вычислении спектра
for ( i = 0 ; i < 500 ; i++ ) // Весь интервал частот ( положительных )

// разбивается на 500 точек

{ tetta= 2*PI* i * shag / f_diskr ;

sym= complex( 0,0);

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

{ mnoz = complex( cos( -tetta*n),sin( -tetta*n));

sym = sym + x[n]*mnoz ;

}

spectr[i] = abs( sym );

}
max = spectr[0] ;

for ( i =1 ; i< 500 ; i++ )

{ if ( spectr[i] > max ) max = spectr[i] ; }
for(i=0 ; i < 500 ; i++ )

spectr [i] = 20*log10(spectr [i] / max );

}
Из сопоставления результатов работы программы при L=90 и L=3 можно сделать следующий вывод. Если нам доступен для наблюдения не весь сигнал, а только его часть, то спектр при этом отличается ( часто достаточно существенно ) от истинного. Дальнейшие исследования решают проблему повышения точности измерения спектра когда нам доступен только короткий фрагмент сигнала.
3. ЛИНЕЙНЫЕ МЕТОДЫ СПЕКТРАЛЬНОГО АНАЛИЗА
До настоящего момента мы принимали, что сигнал – это детерминированный процесс. Однако реальные сигналы и помехи представляют случайные процессы и в этом случае вычисление спектра несколько иное. Далее приводятся методы вычисления спектра ( для случайных процессов спектр имеет другое название – спектральная плотность мощности ) в предположении, что сигналы это случайные процессы. Существуют два метода определения спектральной плотности мощности. Один метод основан на соотношении ( формула 4.33 по книге Марпл “Цифровой спектральный анализ”)



P( R[m] exp ( - jm ) ( 10 )

m= 
Здесь дискретная частота  2  f / f дикр, R[m] – корреляционная функция случайного процесса. P( спектральная плотность мощности .

Как видно из (10) Фурье-преобразование вычисляется не от сигнала ( который является случайным ), а от корреляционной функции этого сигнала
R[m] = М { X(n) X(n+m) } ( 10а )
где М – обозначение математическое ожидание , X(n) – значение случайного процесса ( представляющего сигнал ) в момент времени n, а X(n+m) - значение случайного процесса в момент времени n+m .

Допущение об эргодичности исследуемого процесса позволяет ввести другое определение спектральной плотности мощности (формула 4.58 по книге Марпл “Цифровой спектральный анализ”)
N

P() = lim M { 1 / [2N+1] | x[n] exp (- jn ) | 2 } ( 11 )

N-> n=-N
где n – номер отсчета исследуемого процесса, M{ …} – обозначение математического ожидания.

В соответствие с этими определениями существуют два метода основных – коррелограммный метод и метод периодограмм .

3.1. КОРРЕЛОГРАММНЫЙ МЕТОД ОЦЕНКИ СПМ
Использование данного метода заключается ( стр.190 в книге Марпла “Цифровой спектральный анализ”) в подстановке в (10) конечной последовательности оценок корреляционной функции

L

P( W m )R[ m ] exp ( - jm ) ( 12 )

m = - L
В ( 12 ) введена оконная функция служащая для уменьшения смещения оценки. Одно из наиболее популярных окон – это окно Бартлетта ( или треугольное окно )

W(n) = 1 – | m | / L . ( 12a )
Дело в том, что мы практически никогда не располагаем всей корреляцинной функцией, а только фрагментом из 2L+1 отсчета.

Далее приводится программа реализующая коррелограммный метод оценки спектральной плотности случайного процесса ( программа p_posl3.cpp и выполняемый файл p_posl3.exe). В ней можно выбрать вид окна ( для взешивания отсчетов корреляционной функции ) .
#include "model.h"

#define N 1000

#define L 40

// L - длительность оценки корреляционной функции

// N – количество отсчетов реализции случайного процесса

#include
void form( void ); // Функция, которая формирует массив отсчетов

// случайного процесса, по которым в дальнейшем ,будет оцениваться

// корреляционная функция
void correlation( void ); // Функция, которая будет формировать массив

// отсчетов оценки корреляционной функции

void window( int nomer ); // Функция, которая будет формировать массив отсчетов функции окна ( 0 – без окна, 1 – треугольное окно, 2 – окно Ханна ).

void cor_gramma( void ); // Функция, которая будет формировать массив отсчетов

// спектральной плотности мощности в массиве spektr

complex x[N]; // массив отсчетов случайного процесса, 1000 – длина массива
complex R[L]; // массив отсчетов оценки корреляционной функции
float w[ L ]; // массив отсчетов функции окна
float spectr[500]; // массив отсчетов спектра

float chislo_PI = 3.1415 ;
void main ( void )

{

form();

correlation();

window(2);

cor_gramma();

}
void window ( int nomer )

{

int m;

if ( nomer == 0 )

{ for( m=0 ; m <=L ; m++ ) w[m] = 1.0 ; }

if ( nomer == 1 )

{ for( m=0 ; m <=L ; m++ ) w[m] = 1.0 - (float)m / L ; }
if ( nomer == 2 ) { for( m=0 ; m < =L ; m++ )

w[m] = 0.5 + 0.5*cos( 3.14 * m / L ) ; }

}
// В следующей функции формируются две синусоиды в шуме
void form ( void )

{

int i;

for ( i = 0 ; i < N ; i++ )

x[i] = complex( gauss ( 0, 0.1 ), gauss(0 ,0.1) ) ;
for ( i = 0 ; i < N ; i++ )

x[i] = x[i] + 0.2*complex( cos ( PI/5 * i ), sin (PI/5*i) );
for ( i = 0 ; i < N ; i++ )

x[i] = x[i] + 0.2*complex( cos ( PI/3 * i ), sin ( PI/3*i) );

}


void correlation( void )

{

int m, j ;

complex sym ;
for ( m = 0 ; m < L ; m++ )

{

sym = complex( 0 , 0 );

for ( j = 0 ; j < N ; j++ )

{ if( (j+m) < N )

sym = sym + x[j+m ] *conj( x[j] ) ;

}

R[m] = sym/ (N-m);

}

}
void cor_gramma( void )

{

int i, m;

float ww ;

complex mnoz , sym ;

float chis_PI2 = 3.14/2 ;
for ( i = 0 ; i < 500 ; i++ )

{ ww = 3.14*i/ 500 ;

sym= complex( 0,0);

for ( m = -L ; m < L ; m++)

{ mnoz = complex( cos( -ww*m),sin( -ww*m));
if( m < 0 )

sym = sym + conj(R[-m])*w[-m]*mnoz ;

else

sym = sym + R[m]*w[m]*mnoz ;

}

spectr[i] = abs( sym );

}

Init_graph();

graf_1("graphik", spectr, 0,499 );

Close_graph();

}

4.ПЕРИОДОГРАММНЫЕ ОЦЕНКИ СПМ
Этот метод поясняется в известной литературе ( кн. Марпл “ Цифровой спектральный анализ” стр.191 – 192. ). В этом случае по конечной последовательности данных можно вычислить выборочный спектр ( формула 5.31 в кн. Марпл “ Цифровой спектральный анализ” ).
N-1

P() = 1 / N | x[n] e (- jn ) | 2 ( 13 )

n=0
где P() – выборочный спектр.

Недостатком формулы (13) является появление ложных пиков в спектре в связи со случайностью реализации фрагмента сигнала. Для сглаживания быстрых флуктуаций в оценке спектра Даньелл предложил ( кн. Марпл “ Цифровой спектральный анализ” стр.192.) использовать усреднение по соседним частотам

n+K

P д( i ) = 1 / [2K +1] P( n)

n=i-K
Здесь предусматривается, что весь интервал частот ( ) разбивается на отрезки ( точки ).

Далее приводится программа реализующая данный алгоритм ( программа p_posl4. cpp и выполняемый файл p_posl4.exe).
#include "model.h"

#define N 1000

#include
void form( void );

void vish( void );
complex x[1000];
float spectr[600]; // Массив для оценки спектра по реализации

float spectr_sr[600]; // Массив для усредненной оценки спектра

float chislo_PI = 3.1415 ;
void main ( void )

{
form();

vish();

Init_graph();

graf_1("graphik", spectr_sr, 0,499 );

Close_graph();

}

void form ( void )

{

int i;

for ( i = 0 ; i < N ; i++ )

x[i] = complex( gauss ( 0, 0.01 ), gauss(0 ,0.01) ) ;
for ( i = 0 ; i < N ; i++ )

x[i] = x[i] + 2*complex( cos ( PI/7 * i ), sin ( PI/7*i) );
for ( i = 0 ; i < N ; i++ )

x[i] = x[i] + 2*complex( cos ( PI/3 * i ), sin ( PI/3*i) );

}

void vish( void )

{

int i, m, n , j;

float ww ;

complex mnoz , sym ;

static complex y[100], sp[500] ;
float chis_PI2 = 3.14/2 ;

for ( i = 0 ; i < 500 ; i++ )

{ ww = 3.14*i/ 500 ;

sym= complex( 0,0);

for ( m = 0 ; m < 1000 ; m++)

{ mnoz = complex( cos( -ww*m),sin( -ww*m));

sym = sym + x[m]*mnoz ;

}

spectr[i] = abs(sym)*abs(sym) ;

}
for(i=0; i < 500 ; i++ )

{ spectr_sr[i]=0;

for( j =-5 ; j <= 5 ; j++ )

{

if( ( (i+j)>=0) && ( (i+j)<500) )

spectr_sr[i] = spectr_sr[i] + spectr[i+j]/11. ;

}

}

}

5. ПАРАМЕТРИЧЕСКИЕ МОДЕЛИ СЛУЧАЙНЫХ ПРОЦЕССОВ.
Ранее спектр ( точнее спектральная плотность мощности ) была определена как дискретно-временное преобразование Фурье от бесконечной автокорреляционной последовательности ( или самой реализации сигнала ). Другим альтернативным методом спектрального оценивания является принятие гипотезы, о том какая система породила данную реализацию случайного процесса. На первый взгляд кажется что такая информация является недоступной или достаточно условной. Однако на самом деле всегда имеется некоторая априорная информация для предположения о том, что является источником исследуемого процесса. При этом спектр процесса уже будет определяться как функция параметров модели (описывающей ту систему которая породила этот процесс ).

Наиболее общей моделью ( которая описывает практически все встречающиеся на практике детерминированные и случайные процессы ) является ( рис.1 на листе ) модель АРСС ( авторегрессии – скользящего среднего )
p q

x[n] = -  ak x [ n – k ] +  bk u [ n – k ] ( 14 )

k=1 k=0
где x[n] – отсчет реализации наблюдаемого случайного процесса в n-й дискретный момент времени, u[n] – входная последовательность представляющая дискретный белый шум с дисперсией , ak – коэффициенты авторегрессии ( АР – коэффициенты ), bk – коэффициенты скользящего среднего. Напомним, что дискретный белый шум – это случайный процесс с нулевым математическим ожиданием соседние отсчеты которого статистически независимы. Если более упрощенно посмотреть на формулу (14), то формирование очередного выходного (наблюдаемого нами ) случайного отсчета x[n] из предыдущих отсчетов этого процесса x[n-1], x[n-2],…, x[n-p] и набора входных отсчетов дискретного белого шума u[n], u[n-1],u[n-2],… .

Из этой общей модели АРСС (14) получаются более простые модели – АР ( авторегрессии ) и СС ( скользящего среднего ). Если СС-параметры положить равными нулю ( за исключением b0 = 1 ), то мы получим модель АР-процесса ( рис.3 на листе )

p

x[n] = -  ak x [ n – k ] + u [ n ] . ( 15 )

k=1
Если АР-параметры положить равными нулю , то мы получим модель СС-процесса ( рис.2 на листе )

q

x[n] =  bk u [ n – k ] + b0 u [ n ] . ( 16 )

k=1
Важным для практики является возможность выразить параметры одной из моделей ( АР, СС, АРСС ) через параметры любой из двух других моделей ( при этом порядок модели-замены существенно увеличивается по сравнению с p или q ). Так например если случайный процесс был порожден системой описываемой моделью АРСС ( порядка p=4 и q = 4 ), то его можно описать (с большой точностью) моделью АР порядка p от 25 до 50 ( стр.223 в рассматриваемой книге ). Наибольшее практическое применение имеет АР-модель т.к. известно много эффективных алгоритмов оценивания параметров разработано для АР-моделей. Кроме того, вычислительные трудности при АР-модели значительно меньше трудностей вычисления параметров моделей АРСС и СС. Таким образом, будем считать, что исследуемый процесс ( независимо от системы породившей его) является АР-процессом ( при этом порядок модели может быть достаточно большой p >>1 ) . В связи с этим наша задача заключается в оценке параметров АР-модели
и ak при k от 1 до p. ( 17 )
Теперь важный момент . Ранее спектр определялся Фурье-преобразованием - (10) или (11) . Спектр АР-процесса определяется уже параметрами АР-модели (кн. Марпл “ Цифровой спектральный анализ” )
p 2

P(ak exp( -j k ) | ( 18 )

k=1
Дальнейшие рассматриваемые алгоритмы будут по принятой реализации x[n] оценивать параметры АР-процесса ( 17 ), а затем по формуле (18 ) оценивать спектр.

Базовым соотношением для определения АР-параметров является уравнение Юла-Уокера ( стр.226 в рассматриваемой книге )




R[0] R[-1] R[-p] 1

R[1] R[0] R[-p+1] a1 = 

… …

 R[p] R[p-1] R[0] ap

В уравнении ( 19 ) R[m] – значение корреляционной функции ( 10а) .

Решая уравнение (19) относительно параметров АР-процесса можно далее по ( 18 ) вычислить исследуемый спектр. Учитывая, что матрица в (19) является теплицевой и эрмитовой, то алгоритм Левинсона является наиболее эффективным в вычислительном отношении для решения данной задачи ( стр. 134 по кн. Марпла “Цифровой спекральный анализ” ). Такая методика вычисления спектра предполагает, что известны значения корреляционной функции, а это не так. На практике часто стоит задача по короткой последовательности данных x[n] попытаться получить максимально точную оценку спектра. Решение подобной задачи во многом сходно с задачей линейного предсказания данных рассматриваемой далее.

6. ЛИНЕЙНОЕ ПРЕДСКАЗАНИЕ ДАННЫХ
Задачу линейного предсказания данных можно сформулировать следующим образом – по набору принятых отсчетов x[n-1],x[n-2],x[n-3]… случайного процесса необходимо максимально точно предсказать значение отсчета будет после этого ( отсчет который поступит потом – будущем ),т.е. x[n]. В виде соотношения это можно записать следующим образом

p

xf [n] = -  a fk,p x[ n-k] ( 20 )

k=1
где a fk,p – коэффициент линейного предсказания вперед, соответствующий индексу k . В ( 20 ) означает оценку, а индекс f используется для обозначения оценки, осуществляемой вперед. Второй нижний индекс в обозначении коэффициента a fk,p говорит о том, что количество весовых коэффициентов равно p. Предсказание вперед понимается здесь в том смысле, что оценка, соответствующая временному индексу n , вычисляется по p предыдущим отсчетам случайного процесса. Ошибка предсказания вперед
e p f [n] = x[n] - xf [n] ( 21 )
имеет дисперсию
f = M{ | e f [n] | 2 }
Нахождение коэффициентов линейного предсказания сводится ( кн. Марпл) к решению уравнений идентичных уравнению Юла-Уокера.



R[0] R[-1] R[-p] 1  f

R[1] R[0] R[-p+1] a1,p f = 
 … …

 R[p] R[p-1] R[0] ap,p f

Аналогично предсказанию вперед можно записать оценку линейного предсказания назад ( как по будущим отсчетам предсказать предыдущий)

p

xb [n] = -  a bk,p x[ n+k] ( 23 )

k=1
где a bk,p – коэффициент линейного предсказания назад, соответствующий индексу k. Здесь означает оценку, а индекс b используется для обозначения оценки, осуществляемой назад.

Ошибка линейного предсказания назад

ep b [n] = x[n-p] - xb [n-p] ( 24 )
имеет дисперсию

b = M{ | e b [n] | 2 }
На рис. 4 показана трансверсальная реализация фильтра линейного предсказания ошибки.

Нахождение коэффициентов линейного предсказания назад сводится ( кн. Марпл ) к решению уравнения идентичного уравнению ( 22 )



R[0] R[-1] R[-p] abp,p 0

R[1] R[0] R[-p+1] … = 
 ab1,p

 R[p] R[p-1] R[0] 1 b

Решения уравнений ( 22 ) и ( 24 ) обладают свойствами

b =  f =  (24а)
ab1,p = ( af 1,p )*

7. СПЕКТРАЛЬНАЯ ОЦЕНКА ПО МЕТОДУ МИНИМУМА ДИСПЕРСИИ.

Рассмотрим трансверсальный фильтр с p+1 коэффициентами a0 a1 … ap . Выход y[n] этого фильтра ( рис. далее ) определяется сверткой



p

y[n] = -  ak x [ n – k ] = x T [n] a . ( 25 )

k=1
где (p+1) - векторы x T [n] и a определяются выражениями

x T [n] = x [ n ] x [ n – 1] … x [ n – k ]




a T = a0 a1 … ap


x[n]



a 1

a p




y [n]

a0


Дисперсия на выходе рассматриваемого фильтра определяется простым выражением

p = M{ a T* x * [n] x T [n] a } = a T* Rp a , ( 26 )

г де

R[0] R*[1] R *[p]

Rp = R[1] R[0] R*[-p+1] 



 R[p] R[p-1] R[0]
тёплицева автокорреляционная матрица размерности (p+1) на (p+1). Коэффиценты фильтра необходимо выбирать таким образом, чтобы на некоторой частоте f0 частотная характеристика рассматриваемого фильтра имела единичный коэффициент усиления. Это ограничение можно записать следующим образом
p

 ak exp ( - j 2  f0 k T ) = 1 ( 27 )

k=0
Отсюда следует, что синусоида с частотой f0, поданная на вход такого фильтра, пройдет на его выход без искажений. Для подавления компонент спектра, удаленных от частоты f0, необходимо просто минимизировать дисперсию ( 26 ) при ограничении ( 27 ) на частотную характеристику фильтра. В ( Марпл Цифровой спектральный анализ стр. 421) показано, что при таком ограничении решение по минимуму дисперсии для коэффициентов фильтра будет удовлетворять уравнению

a мд = Rp -1 e( f0) / [ eH( f0) Rp -1 e( f0) ] ( 28 )
Подставляя ( 28 ) в ( 26), получаем следующее выражение для минимальной дисперсии
p = 1 / [ eH( f0) Rp -1 e( f0) ] ( 29 )
Дисперсия выхода фильтра служит хорошим индикатором мощности выходного спектра в окрестности частоты f0. Для каждой выбранной частоты f0 получается отличное от других частот оптимальное значение дисперсии.

Одно из приемлимых выражений для спектральной оценки минимальной дисперсии ( МД ) , которое можно получить из ( 29 ), имеет вид
Pмд(f) = 1 / [ eH( f) Rp -1 e( f) ]
где -1/2T < f < 1/2T .

8.СВЯЗЬ МЕЖДУ СПЕКТРАЛЬНЫМИ МД- И АР-ОЦЕНКАМИ.
В случае когда автокорреляционная последовательность известна спектральные оценки МД и АР связаны явным соотношением. В ( Марпл стр. 423 ) показано, что


p k 2

1/ Pмд (f pa k,p exp(- j2f kT ) (30)

k=0 m=0

Таким образом, величина , обратная спектральной МД-оценке, равна среднему значению по всем величинам, обратным авторегрессионным спектральным оценкам со значениями порядка от 0 до p. Поэтому наблюдаемое на практике более низкое по сравнению с АР-оценкой разрешение спектральной МД-оценки обусловлено эффектом совместного усреднения АР-спектров низших порядков, обладающих наименьшим разрешением, и АР-спектров высоких порядков, обладающих наибольшим разрешением. Тем не менее МД-оценки при достаточно больших отношениях сигнал/шум обеспечивает более высокое разрешение, чем классические линейные методы спектрального анализа.

Вычисления приведенные в ( Марпл стр. 425 ) позволяют получить удобное выражение для МД-оценки

p

Pмд (f мд [k] exp(- j2f kT ) ( 31 )

k= -p

Коэффициенты  мд [k] вычисляются как линейно взвешенные корреляционные коэффициенты АР-параметров
9. РЕАЛИЗАЦИЯ МЕТОДА СПЕКТРАЛЬНОЙ ОЦЕНКИ ПО МИНИМУМУ ДИСПЕРСИИ

Существуют две методики позволяющие реализовать оценку спектра по минимуму дисперсии. Далее приведены действия соответствующие первой методике

p-k

мд [k] =  pp+1-k-2i) a k+i,p a* i,p при 0 <= k <= p

i=0
мд [k] = мд *[-k] при -1 <= k >= -p


9.РАЗРАБОТКА ПРОГРАММЫ В СРЕДЕ VISUAL BASIC

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




Эта стартовая форма будет иметь имя Form1 ( свойство Name ).
9.1 Добавьте в Ваш проект файл dannie.bas ( это будет просто файл с данными ).
Global mass(600) As Single ‘ Массив для вывода на график

Global mass2(600) As Single ‘ Дополнительный массив

Type complex ‘ Новый тип данных – комплексное число

re As Single

im As Single

End Type
Global x(700) As complex ‘ Массив для заполнения его входной реализацией

Global y(700) As complex ‘ Дополнительный массив для данных

Global R(500) As complex ‘ Массив для отсчетов корреляционной функции

Global N As Integer ' Длина входной реализации

Global Ngarm As Integer ‘ Число гармоник в исследуемом спектре

Global amp(5) As Single ‘ Массив для амплитуд гармоник


Global freq(5) As Single ‘ Массив для частот гармоник

Global a(20) As complex ‘ Массив для AP-коэффициентов

Global Dshum As Single ‘ Дисперсия собственного шума

Global indic As Integer ‘ Индикатор конкретного алгоритма ( 1 – коррелограммный,

‘ 2 – периодограммный, 3 – метод НСК , 4 – РНК , 5 – метод Берга

Global mu As Single ‘ Коэффициент обратной связи для НСК алгоритма

Global IP As Integer ‘ Порядок АР- модели


Global Nreal As Integer ' Длина реализации для параметрических алгоритмов

Global L As Integer ‘ Максимальный сдвиг при исследовании корреляционной

‘ функции

Global Nysr As Integer ‘ Число усредняемых отсчетов для периодограммного

‘ алгоритма
9.2 Процедура при загрузке стартовой формы Form1
Sub Form_Load ()

Scale (-10, 110)-(610, -10) ‘ Задание границ формы

N = 500 ‘ По умолчанию длина реализации 500 отсчетов

' Параметры по умолчанию

Dshum = 0.1

L=40

Ngarm = 3

For j = 1 To Ngarm

amp(j) =1

freq(j) =0.1+0.2*(j-1)

Next

End Sub
9.3 Вспомогательная процедура рисования сетки для Form1.
Sub setka ()

Line (-10, -10)-(610, 110), RGB(190, 190, 190), BF

' Формирование серого фона графика
Line (0, 0)-(600, 0), RGB(0, 255, 0)

Line (0, 50)-(600, 50), RGB(0, 255, 0)

Line (0, 100)-(600, 100), RGB(0, 255, 0)
Line (0, 0)-(0, 100), RGB(0, 255, 0)

Line (300, 0)-(300, 100), RGB(0, 255, 0)

Line (600, 0)-(600, 100), RGB(0, 255, 0)

End Sub
9.4 Вспомогательная процедура рисования графика для Form1.
Sub graf1 (Dlina As Integer)

Dim max As Single

Dim min As Single

Dim i As Integer

max = mass(0)

For i = 1 To Dlina

If mass(i) > max Then

max = mass(i)

End If

Next
min = mass(0)

For i = 1 To Dlina

If mass(i) < min Then

min = mass(i)

End If

Next
del = 1# / (max - min)

For i = 0 To Dlina - 1

Y1 = (mass(i) - min) * del * 100

Y2 = (mass(i + 1) - min) * del * 100

Line (i, Y1)-(i + 1, Y2), RGB(255, 0, 0)

Next

End Sub

9.5 Вспомогательная функции генерации случайного числа для Form1.

Function gauss (mo As Single, sko As Single) As Single

Dim X As Single

Dim i As Integer

X = 0

For i = 0 To 9

X = X + Rnd

Next i


X = X - .5 * 10

X = X / Sqr(10 / 12#)

gauss = X

gauss = mo + sko * X

End Function


9.6 Вспомогательная функции формирования реализации для Form1.
Sub formir ()
PI = 3.14159

For i = 0 To N

X(i).re = gauss(0, Sqr(Dshum))

X(i).im = gauss(0, Sqr(Dshum))

Next
For j = 1 To Ngarm

For i = 0 To N

X(i).re = X(i).re + amp(j) * Cos(PI * freq(j) * i)

X(i).im = X(i).im + amp(j) * Sin(PI * freq(j) * i)

Next

Next

End Sub
9.7 Вспомогательная процедура вычисления корреляционной функции для Form1.
Sub correlation ()

Dim sym As complex
For m = 0 To L

sym.re = 0

sym.im = 0

For j = 0 To N

If (j + m) < (N+1) Then

sym.re = sym.re + X(j + m).re * X(j).re + X(j + m).im * X(j).im

sym.im = sym.im - X(j + m).re * X(j).im + X(j + m).im * X(j).re

End If

Next

R(m).re = sym.re / (N +1- m)

R(m).im = sym.im / (N +1- m)

Next

9.8 Вспомогательная процедура вычисления спектральной плотности мощности по корреляционной функции ( для Form1 ).
Sub corgramma ()

Static sym As complex

Static mnoz As complex
For i = 0 To 600

ww = 3.14 * i / 600

sym.re = 0

sym.im = 0
For m = -L To L

mnoz.re = Cos(-ww * m)

mnoz.im = Sin(-ww * m)

If m < 0 Then

rre = R(-m).re

rim = -R(-m).im

Else

rre = R(m).re

rim = R(m).im

End If

sym.re = sym.re + rre * mnoz.re - rim * mnoz.im

sym.im = sym.im + rre * mnoz.im + rim * mnoz.re

Next

aa = sym.re

bb = sym.im

mass(i) = sym.re * sym.re + sym.im * sym.im

Next
maxsim = mass(0)

For i = 1 To 600

If mass(i) > maxsim Then

maxsim = mass(i)

End If

Next
For i = 0 To 600

mass(i) = 20 * Log(mass(i) / maxsim) / Log(10)

Next
End Sub

9.9 Вспомогательная процедура вычисления спектральной плотности мощности по реализации процесса ( для Form1 ).


Sub vish ()
Static sym As complex

Static mnoz As complex
For i = 0 To 600

ww = 3.14 * i / 600

sym.re = 0

sym.im = 0
For m = 0 To N

mnoz.re = Cos(-ww * m)

mnoz.im = Sin(-ww * m)

a1 = mnoz.re

a2 = mnoz.im

sym.re = sym.re + X(m).re * a1 - X(m).im * a2

sym.im = sym.im + X(m).im * a1 + X(m).re * a2

Next

mass2(i) = sym.re * sym.re + sym.im * sym.im

Next

For i = 0 To 600

mass(i) = 0

For j = -Nysr To Nysr

If ((i + j) > -1) And ((i + j) < 601) Then

mass(i) = mass(i) + mass2(i + j) / (1 + 2 * Nysr)

End If

Next

Next
maxsim = mass(0)

For i = 1 To 600

If mass(i) > maxsim Then

maxsim = mass(i)

End If

Next
For i = 0 To 600

mass(i) = 20 * Log(mass(i) / maxsim) / Log(10)

Next
End Sub

9.10 Вспомогательная процедура для сдвига на 1 всех отсчетов входной послеловательности ( для Form1 ).

‘ nomer – номер очередного отсчета

Sub shiftx (Nomer As Integer)

For k = Nomer + 1 To 2 Step -1

y(k) = y(k - 1)

Next


y(1) = valx

End Sub

9.11 Вспомогательная процедура для реализации алгоритма НСК ( для Form1 ).

Sub lms ()

Dim ef As complex
ef.re = y(1).re

ef.im = y(1).im

For k = 1 To IP

ef.re = ef.re + a(k).re * y(k + 1).re - a(k).im * y(k + 1).im

ef.im = ef.im + a(k).re * y(k + 1).im + a(k).im * y(k + 1).re

Next
For k = 1 To IP

a(k).re = a(k).re - 2 * mu * (ef.re * y(k + 1).re + ef.im * y(k + 1).im)

a(k).im = a(k).im - 2 * mu * (-ef.re * y(k + 1).im + ef.im * y(k + 1).re)

Next

End Sub


9.12 Вспомогательная процедура для вычисления спектра АР-процесса

( для Form1 ).

Sub plot_ap ()
Dim dd As complex

For i = 0 To 600

dd.re = 1

dd.im = 0

arg = i * 3.14 / 600
For j = 1 To IP

arg1 = -arg * j

dd.re = dd.re + Cos(arg1) * a(j).re - Sin(arg1) * a(j).im

dd.im = dd.im + Cos(arg1) * a(j).im + Sin(arg1) * a(j).re

Next

ff = Sqr(dd.re * dd.re + dd.im * dd.im)

mass(i) = 1# / (ff * ff)

Next

maxsim = mass(0)

For i = 1 To 600

If mass(i) > maxsim Then

maxsim = mass(i)

End If

Next

For i = 0 To 600

mass(i) = 20 * Log(mass(i) / maxsim) / Log(10)

Next

graf1 600

End Sub


13. Раздел меню Очистка формы Form1.
Sub osistka_Click ()

setka

End Sub



14. Раздел меню Параметры помех формы Form1.

Sub ParPomeh_Click ()

form3.Show

End Sub

На следующем фрагменте показана форма Form3





Sub Form_Load ()

text3.Text = str$(Ngarm)

For i = 1 To Ngarrn

text1(i - 1).Text = str$(amp(i))

text2(i - 1).Text = Str$(freq(i))

Next

text4.Text = str$(Dshum)

End Sub

14. Процедура по щелчку по кнопке Установить Form3.
Sub Command1_Click ()

Ngarm = Val(text3.Text)

For i = 1 To Ngarm

amp(i) = Val(text1(i - 1).Text)

freq(i) = Val(text2(i - 1).Text)

aa = text2(i - 1).Text

Next

Dshum = Val(text4.Text)

form3.Hide

End Sub

15. Раздел меню Коррелограммный формы Form1.

Sub CorMet_Click ()

form4.Show

E
nd Sub

Далее на следующем фрагменте показана форма Form4
Процедура при загрузке формы Form4

Sub Form_Load ()

text1.Text = Str$(N)

text2.Text = Str$(L)

End Sub
Процедура по щелчку по кнопке на форме Form4

Sub Command1_Click ()

N = Val(text1.Text)

L = Val(text2.Text)

Indic = 1

form4.Hide

End Sub

15. Раздел меню Периодограммный формы Form1.
Sub PeriodMet_Click ()

form5.Show

End Sub




Sub Command1_Click ()

Nysr = Val(text1.Text)

N = Val(text2.Text)

indic = 2

form5.Hide

End Sub

16. Раздел меню Наименьщих квадратов формы Form1.

Sub Nsk_Click ()

form2.Show

End Sub




Sub Command1_Click ()

Nreal = Val(text1.Text)

IP = Val(text2.Text)

mu = Val(text3.Text)

indic = 3

form2.Hide

End Sub


17. Раздел general declaration формы Form1
Dim valx As complex

19. Процедура выполняемая при перерисовке формы Form1
Sub Form_Paint ()

Dim save2 As Single

setka

formir
If indic = 1 Then

correlation

corgramma

graf1 599
ElseIf indic = 2 Then

vish

graf1 599

ElseIf indic = 3 Then

For i = 1 To Nreal

valx = X(i)

shiftx (i)

lms

Next

plot_ap

For i = 0 To N

y(i).re = 0

y(i).im = 0

Next
End If
indic = 0

End Sub

11. РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ
11.1 Периодограммный метод. Рассматривается входной процесс из 1 –го гармонического колебания с шумом.

Частоты гармоник
f1 / f дискр = 0.25
Отношение с.к.о. шума к амплитуде гармоники 0.25

Длина реализации равна 15 отсчетов , а число усредняемых частот равно 0. Истинный в спектр достаточно просматривается , однако точное значения частоты ( и одной ли ) определить затруднительно ( максимум пологий ).



11.1 Метод Наименьших квадратов. Рассматривается тот же входной процесс из 1 –го гармонического колебания с шумом.

Частоты гармоник
f1 / f дискр = 0.25
Отношение с.к.о. шума к амплитуде гармоники 0.25

По итогам 15 отсчетов вычисляется ДН. Истинный в спектр достаточно просматривается . ДН. Порядок АР-модели равен 9, а коэффициент усиления равен 0.03.




11.3 Метод Наименьших квадратов. Рассматривается тот же входной процесс из 1 –го гармонического колебания с шумом.

Частоты гармоник
f1 / f дискр = 0.25

f1 / f дискр = 0.35

f1 / f дискр = 0.5

Отношение с.к.о. шума к амплитуде гармоники 0.035

По итогам 50 отсчетов вычисляется ДН. Порядок АР-модели равен 11, а коэффициент усиления равен 0.01. Истинный в спектр достаточно просматривается .


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

Частоты гармоник
f1 / f дискр = 0.25

f1 / f дискр = 0.35
Отношение с.к.о. шума к амплитуде гармоники 0.035

По итогам 17 отсчетов вычисляется ДН. Порядок АР-модели равен 11 Истинный в спектр достаточно просматривается .


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

Частоты гармоник
f1 / f дискр = 0.5
f1 / f дискр = 0.25

f1 / f дискр = 0.35
Отношение с.к.о. шума к амплитуде гармоники 0.035

По итогам 17 отсчетов вычисляется ДН. Порядок АР-модели равен 11
Метод наименьших квадратов.


написать администратору сайта