МОДЕЛИРОВАНИЕ ЛИНЕЙНЫХ СИСТЕМ
Методические указания к лабораторной работе №3 по дисциплине
"Моделирование информационных процессов и систем"

[Титульная страница | Оглавление | Предыдущая страница | Следующая страница ]


4. МОДЕЛИРОВАНИЕ ОПТИМАЛЬНОЙ ФИЛЬТРАЦИИ.

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

kопт(t) = a s(Tсигн - t),

где а - произвольная константа.

На рис.9 приведен пример треугольного сигнала и оптимального фильтра для него.

Рис.9

Программа 2 ( исходный файл lect3_2.cpp , выполняемый файл lect3_2.exe )

На следующем фрагменте приведена программа согласованной фильтрации для приведенного ранее сигнала треугольной формы на фоне белого шума. Шаг дискретизации выбран T = Tсигн /50 . Во входной реализации присутствуют два сигнала треугольной формы, разнесенных во времени.

#define  N 500 				// Длительность входной реализации
#define  L 50 	 			// Длительность полезного сигнала
#include <math.h>
#include <stdlib.h>
#include "model.h"
float s[L], k[L], x[N], y[N]; 		// Полезный сигнал, импульсная характеристика,
					// входная реализация, выходная реализация
void main(void)
{ int i, p, n;
     					// Формирование одного полезного сигнала 
       	for(i = 0; i < L; i++)
	    	{ s[i] = 1.0 * i / L;  x[i] = s[i]; }

     					// Формирование импульсной характеристики
       	for(i=0; i < L; i++)
		      k[i] = s[ L - i -1 ];
	
      					// Добавление второго полезного сигнала
					// к входной реализации 
        	for(i = 2*L; i < 3*L; i++)
		      x[i] = x[i] +  s[i - 2 * L];

		   			// Добавление шума во входную реализацию
	  	for(i=0; i < N; i++)
		      x[i] = x[i] + gauss (0, 0.5);
	
   					// Согласованная фильтрация
		  for (i =0; i < N; i++)
		    {   y[i] =0.0 ;
			   for(p=0; p< L; p++)
			       {   if( (i-p) >= 0)
				 y[i] = y[i] +x[i-p] *k[p]; }
	    	}
    	  Init_graph();
	graf_2("input and output signal (2) ", x, y, 0, 499);
	Close_graph();
}
	

Программа 3 ( исходный файл lect3_3.cpp , выполняемый файл lect3_3.exe )

Приведена программа согласованной фильтрации для сигнала, представляющего отрезок функции синус при 0 < t < 5. При других значениях t этот сигнал равен нулю.

	
#define N 500			// Длительность входной реализации смеси сигнала
               		        //  с шумом в шагах дискретизации
#define L 250 	   		// Длительность сигнала и импульсной хар-ки 
                   		// согласованного фильтра в шагах дискретизации
#include <math.h>
#include <stdlib.h>
#include "model.h"
float s[L], k[L], x[N], y[N];	//  Массивы для сигнала, импульсной 
                    		// характеристики, входной реализации,
				// выходной реализации
void main(void)
{ int i,p,n;
	     			// Формирование входного сигнала
	       for(i = 0; i < L ; i++)
		    { s[i] = 0.2 * sin( 2.0 * PI * i /50) ;   x[i] = s[i] ;  }
	
     				//  Формирование импульсной характеристики
      	 for(i=0; i < L ; i++)
		     k[i] = s[L - i -1];
	
   				// Добавление шума ко входной реализации
	 for(i=0; i < N; i++)
		      x[i] = x[i] +gauss(0, 0.5);
	
   				// Согласованная фильтрация
	for(i =0; i < N; i++)
		    {   y[i] =0.0;
	for(p=0; p > L; p++)
		    	   {   if( (i-p) >= 0)  y[i] = y[i] + x[i-p] *k[p] ; }
	    	}
    	    Init_graph();
	graf_2("input and output signal (2) ", x, y, 0, 499);
	Close_graph();
}

[Титульная страница | Оглавление | Предыдущая страница | Следующая страница ]