Разработка и анализ характеристик режекторного КИХ фильтра

Автор работы: Пользователь скрыл имя, 02 Июля 2013 в 13:48, дипломная работа

Краткое описание

В последнее время быстро развивающиеся цифровые методы обработки сигналов были внедрены во многие разделы науки и техники и стали для них прочной теоретической базой. Поскольку теория цифровой обработки сигналов в основном опирается на теорию дискретных линейных систем с постоянными параметрами, последняя представлена как объединяющее начало для всех направлений.
Основными направлениями использования методов цифровой обработки являются цифровая фильтрация и спектральный анализ. К цифровым фильтрам относятся КИХ-фильтры и БИХ-фильтры. Спектральный анализ можно проводить путем вычисления спектров с помощью дискретного преобразования Фурье (ДПФ). [Рабинер, Гоулд ]

Содержание

Обозначения и сокращения 3
1 Обоснование темы и ее актуальности. 4
1.1 Цифровая обработка сигналов. 4
1.2 КИХ-фильтры. 5
2 Постановка задачи. 6
3 Выбор метода решения задачи. 7
4 Описание процесса решения поставленной задачи. 8
4.1 Введение в цифровые фильтры. 8
4.2 КИХ-фильтры с линейной фазовой характеристикой. 12
4.3 Метод окон. 16
4.4 Реализация алгоритма работы. 25
5 Экспериментальное исследование влияния типа окна и числа отсчетов импульсной характеристики на форму проектируемого фильтра. 34
5.1 Построение характеристик идеального фильтра. 34
5.2 Построение характеристик реального фильтра. 36
5.3 Влияния ширины окна на основные характеристики фильтра. 38
6 Анализ полученных результатов. 41
Выводы. 43
Список использованной литературы. 44

Прикрепленные файлы: 1 файл

Записка моя.docx

— 7.44 Мб (Скачать документ)

 

Это означает, что:

а) Чем более узкую переходную полосу требуется получить, тем больше должна быть длина окна, и соответственно длина фильтра

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

Видно, что необходим компромисс. Если окно выбрано, то N оценивается по второму столбцу таблицы, т.е , где k=2,4,6 ; ΔF - нормированная ширина переходной полосы.

После выбора значения N, вычисляются отчеты выбранной функции окна w(n).

  1. Расчет ИХ реального фильтра:

h(n)=W(n)h (n), где h(n) берется из таблицы 4.1. Хоть ИХ найдена, но процедура еще не закончена, т.к вследствие приблизительной оценки параметра N, от которого полностью зависит ИХ, а потому и частотные свойства фильтра, крайне редко полученный фильтр подходит под заданные требования, что вызывает необходимость проверить их выполнение

  1. Проверка выполнения заданных функций:

Для проверки необходимо рассчитать АЧХ и если не подходит, то необходимо при выбранном окне увеличить N и повторить шаги 2-5. Если же длина фильтра получилась слишком большой или при любых значениях N реализовать систему не удается, то необходимо сменить окно и повторять процедуру.

 

4.4 Реализация алгоритма  работы.

Для реализации КИХ фильтра  методом окна необходимо совершить  следующую последовательность действий:

  1. Получить импульсную характеристику заданного фильтра;
  2. Ограничить полученную импульсную характеристику окном;
  3. Произвести измерение основных параметров полученного фильтра.

Исходя из данной последовательности действий, можно составить структурную  схему разрабатываемого программного продукта:

Рисунок 4.13. Схема программы.

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

Для построения фильтра принято  решение написать программный продукт  на языке высокого уровня С++. Выбрана среда разработки Borland C++ Builder, позволяющая легко программировать и настраивать графический интерфейс.

Для исследования полученных результатов в лабораторном макете необходимо хранить все характеристики в файлах определенного формата: первые 4 байта файла – частота  опроса сигнала, затем в файл записывается амплитуда каждого отчета в 2-х  байтах. Данный макет позволяет визуально  оценить результат вычислений, а  так же точно измерить необходимые  параметры сигнала в большом  массиве данных.

Первым этапом реализации фильтра является заполнение идеальной  частотной характеристики.

Она имеет вид 

                                                                   (4.35)

 Для этого в памяти  ЭВМ создается массив и заполняется  отсчетами АЧХ (4.14). На языке С++ это будет выглядеть так:

for (i=0;i<k_ots/2;i++) {/*цикл для создания АЧХ*/

    if ((i*dF)>=Fsr) AChH[i]=1;  /*заполнение 1 необходимого отрезка*/

    else AChH[i]=1/Amp;}/*остальной диапазон заполняем числами близкими к 0*/

Рис. 4.14 Идеальная АЧХ

Передаточная функция  идеального фильтра физически нереализуема, все значения меньше 0 отбрасываются. Данная функция является симметричной, по этому производится зеркальное отражение первой половины массива. На языке С++ операция реализуется данным образом:

for (j=k_ots/2;j<k_ots;j++) {i--;AChH[j]=AChH[i];}/*симметрично первой половине заполняем вторую половину АЧХ*/

Получив идеальную АЧХ  фильтра необходимо рассчитать его  импульсную характеристику. Импульсная характеристика вычисляется по формуле преобразования Фурье:

                                  .                                    (4.35)

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

                                                                      (4.36)

На ЯВУ дискретное преобразование Фурье реализуется данным образом:

for (i=0;i<k_ots;i++) {/*цикл для получения всех отсчетов импульсной характеристики*/

      ImpH[i]=0; /*обнуление текущего отсчета*/

      for (j=0;j<k_ots;j++) /*цикл для реализации операции суммирования*/

ImpH[i]=ImpH[i]+AChH[j]*cos(2*M_PI/k_ots*i*j);/*реализация ДПФ*/

      ImpH[i]=ImpH[i]/k_ots;}

Рисунок 4.15. Импульсная характеристика

В результате мы получим  бесконечную характеристику, соответствующую  БИХ-фильтру. Для получения импульсной характеристики КИХ фильтра необходимо ограничить данную характеристику наложением окна. Для этого заполним массив отсчетами окна. Пример создания окна на ЯВУ:

for (i=0;i<k_ots;i++) {

      if ((i<(k_ots/2-(N)/2)) || (i>(k_ots/2+(N)/2))) Okno[i]=0;/*заполнение нулями диапазона вне ширины окна*/

      else {

            Okno[i]=0.54-0.46*cos(2*M_PI*n/N); /*получение отсчетов окна*/

            n++;

            }

}

Импульсная характеристика симметрична и периодически повторяется, что позволяет нам зеркально  отразить уже полученную импульсную характеристику для наложения окна. На языке С++ это выглядит данным образом:

for (i=0;i<k_ots/2;i++) {/*меняем местами первую половину массива импульсной характеристики со второй половиной*/

      Temp=ImpH[i];

      ImpH[i]=ImpH[i+k_ots/2];

      ImpH[i+k_ots/2]=Temp;

}

Рисунок 4.16. Сдвинутая импульсная характеристика

Совершаем наложение окна на полученную импульсную характеристику, пример на ЯВУ:

for (i=0;i<k_ots;i++) {

      ImpH[i]=ImpH[i]*Okno[i];/*операция ограничения окном импульсной характеристики*/

}

Рисунок 4.17. Сдвинутая импульсная характеристика взвешенная окном

В результате мы получили импульсную характеристику проектируемого КИХ  фильтра. Для проверки полученного  результата восстановим частотную  характеристику из полученной импульсной характеристики, применив преобразование Фурье.

Реализация преобразования на ЯВУ выглядит так:

for (i=0;i<k_ots;i++) {/*цикл прохода по всем отсчетам восстановленного сигнала*/

      OutputShort=0;

      for (j=0;j<k_ots;j++)/*реализация операции суммирования*/

             OutputShort=OutputShort+Amp*ImpH[j]*cos(2*M_PI/k_ots*i*j); }/*реализация ОДПФ*/

Рисунок 4.17. Восстановленная АЧХ

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

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

Ширина переходной зоны:

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

Реализация на языке С++:

for (i=0;i<k_ots/2;i++){ /*проход по первой половине отсчетов*/

      if (PDPF[i]>=(Amp*(1-(Form1->CSpinEdit2->Value)*0.01))) {/*поиск отсчетов соответствующих заданной точности*/

             Max1=PDPF[i]; /*Max1 – отсчет с максимальной амплитудой*/

             iMax1=i; /*положения отсчета с максимальной амплитудой*/

             break;  /*выход из цикла если найден максимальный отсчет*/

      }

}

for (i=iMax1-1;i>0;i--){

      if (PDPF[i]<=(Amp*(Form1->CSpinEdit2->Value)*0.01)) {/*поиск отсчета соответствующей точности*/

             Min1=PDPF[i]; /*отсчет с минимальной амплитудой в заданном интервале*/

             iMin1=i; /*положение минимального отсчета*/

             break;  /*выход из цикла*/

      }

}

SPZ=iMax1-iMin1;    //Ширина переходной зоны

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

Реализация на языке С++:

for (i=k_ots/2;i<k_ots;i++){ /*поиск отсчета с минимальной амплитудой во второй половине массива*/

      if (PDPF[i]<=(Amp*(Form1->CSpinEdit2->Value)*0.01)) {

             Min2=PDPF[i]; /*значение элемента*/

             iMin2=i;  /*положение элемента*/

             break;

      }

}

for (i=iMin2-1;i>k_ots/2;i--){ /*поиск максимального элемента в заданных приделах во второй половине массива*/

      if (PDPF[i]>=(Amp*(1-(Form1->CSpinEdit2->Value)*0.01))) {

             Max2=PDPF[i]; /*значение элемента*/

             iMax2=i;   /*положение элемента*/

             break;

      }

}

 

//Нахождение среднего значения

Sum0=0;

for (i=0;i<iMin1;i++) Sum0=Sum0+PDPF[i]; /*суммирование элементов в нулевой зоне сигнала*/

for (i=iMin2;i<k_ots;i++) Sum0=Sum0+PDPF[i]; /*суммирование элементов в нулевой зоне сигнала*/

Sred0=Sum0/(iMin1+(k_ots-iMin2));/*поиск среднеарифметического в нулевой зоне сигнала*/

Sum1=0;

for (i=iMax1;i<iMax2;i++) Sum1=Sum1+PDPF[i];/*суммирование элементов в единичной зоне сигнала*/

Sred1=Sum1/(iMax2-iMax1);/*среднеарифметическое в единичной зоне сигнала*/

//Для высокого уровня

Max1=Amp/2; iMax1=0;

for (i=0;i<k_ots/2;i++){ /*поиск первого локального максимума в единичной зоне сигнала*/

      if (PDPF[i]>=Max1) {

             Max1=PDPF[i]; /*значение элемента*/

             iMax1=i; /*положение элемента*/

      }

      else if (iMax1!=0) break;

}

Min1=Max1;

for (i=iMax1;i<k_ots/2;i++){ /*поиск максимального и минимального значения амплитуды в единичной зоне сигнала (поиск от первого локального максимума)*/

      if (PDPF[i]<Min1) Min1=PDPF[i]; /*значение минимума*/

      if (PDPF[i]>Max1) Max1=PDPF[i]; /*значение максимума*/

}

//Для низкого уровня

Min2=Amp/2; iMin2=iMax1;

for (i=iMax1;i>0;i--){ /*поиск первого минимума после переходной зоны*/

      if (PDPF[i]<=Min2) {

             Min2=PDPF[i]; /*значение минимума*/

             iMin2=i;  /*положение минимума*/

      }

      else if (iMin2!=iMax1) break;

}

Max2=Min2; iMax2=iMin2;

for (i=iMin2;i>0;i--){ /*поиск минимального и максимального значения амплитуды сигнала в нулевой зоне сигнала*/

      if (PDPF[i]>Max2) Max2=PDPF[i]; /*значение максимума*/

      if (PDPF[i]<Min2) Min2=PDPF[i]; /*значение минимума*/

}

//----------------------------------------------

/*вывод значений выбросов в  единичной зоне и в нулевой  зоне сигнала на экран*/

if (abs(Sred0-Min2)>abs(Sred0-Max2)) VV0=abs(Sred0-Min2);

      else VV0=abs(Sred0-Max2);

if (abs(Sred1-Min1)>abs(Sred1-Max1)) VV1=abs(Sred1-Min1);

      else VV1=abs(Sred1-Max1);

Таким образом, мы получили алгоритмы для построения заданного фильтра и измерения его основных параметров (рис. 4.19). По данному алгоритму была разработана программа, внешний вид окна которой представлен на рис. 4.18, а ее текст в приложении Х.

Рисунок 4.18. Окно программы.

 

Рисунок 4.19. Блок-схема алгоритма. 

5 Экспериментальное исследование влияния типа окна и числа отсчетов импульсной характеристики на форму проектируемого фильтра.

5.1 Построение характеристик идеального фильтра.

Исходные данные были введены  в разработанную программу (рис. 5.1). По ним была сформирована АЧХ идеального фильтра (рис. 5.2). В соответствии с исходным заданием, нижние частоты подавляются, а верхние передаются на выход без изменений.

Рисунок 5.1. Окно программы с исходными данными.

Рисунок 5.2. Идеальная АЧХ.

Из частотной характеристики по формуле ОДПФ (5.1) была получена идеальная импульсная характеристика (рис. 5.3).

        (5.1)

Рисунок 5.3. Идеальная импульсная характеристика.

Для более удобного восприятия идеальная импульсная характеристика была сдвинута на половину периода (рис. 5.4).

Рисунок 5.4. Сдвинутая идеальная импульсная характеристика.

Дальнейшие измерения  различаются в зависимости от типа и ширины окна, поэтому рассмотрим их по отдельности.

 

5.2 Построение характеристик реального фильтра.

При использовании прямоугольного окна для синтеза КИХ-фильтра  были выполнены следующие операции.

5.1.1 Формирование окна.

В первую очередь, необходимо сформировать окно по заданной формуле (5.2).

         (5.2)

Временная функция окна представлена на рис. 5.5.

Рисунок 5.5. Временная функция прямоугольного окна.

По полученной временной  функции окна построим его спектр. Спектр получается в результате ПДПФ временной функции. Спектр амплитуд в логарифмическом масштабе представлен на рис. 5.6.

Рисунок 5.6. Спектр амплитуд прямоугольного окна.

5.1.2 Ограничение импульсной характеристики окном.

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

Рисунок 5.7. Импульсная характеристика, ограниченная окном.

5.1.3 Получение частотной характеристики реального фильтра.

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

       (5.3)

Частотная характеристика реального  фильтра представлена на рис. 5.8.

Рисунок 5.8. Частотная характеристика реального фильтра.

Информация о работе Разработка и анализ характеристик режекторного КИХ фильтра