Синтез и программная реализация БИХ-фильтра

Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 02:32, курсовая работа

Описание

Цель работы: Синтезировать полученные знания и реализовать программный код фильтра с бесконечной импульсной характеристикой для цифрового сигнального процессора компании Texas Instrument (TI) семейства TMS320C6000.

Работа состоит из  1 файл

курсовик.doc

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

Государственный университет телекоммуникаций им. Бонч-Бруевича

кафедра «Цифровой обработки  сигналов» 
 
 
 
 
 
 
 
 
 
 
 
 

Курсовая  работа

«Синтез и программная  реализация БИХ-фильтра» 
 

Вариант № _17_ 
 
 
 
 

Выполнил студент  группы № Р610м _________Шафоростов В. А. 

Проверил доцент кафедры ЦОС          _________И. И. Гук 
 
 
 
 
 
 
 
 
 
 
 
 
 

2011 год 

Цель  работы:

Синтезировать полученные знания и  реализовать программный  код фильтра с  бесконечной импульсной характеристикой  для цифрового  сигнального процессора компании Texas Instrument (TI) семейства TMS320C6000.

Дано:

1. Частота дискретизации  – 8000 Гц .

2. Полоса пропускания  – 1200Гц.

3. Полоса задерживания  – 2400Гц.

4. Отклонение  в полосе пропускания –   1 дБ.

5. Отклонение в полосе задерживания –   -30дБ

7. Метод расчёта – билинейное |Z-преобразование

8. Тип аппроксимации: Баттерворта 

        1.   Синтез БИХ в программе FD-3
 

Структурная схема 

Передаточная  функция 

Где,   K=3,    количество каскадов

          M=2,    порядок нерекурсивной части каждого каскада

          N=2,    порядок рекурсивной части каждого каскада

         a и b, коэффициенты каждого каскада

Разностное  уравнение каждого каскада имеет вид: 

    Таблица коэффициентов  каждого каскада приведена ниже 

Карта нулей и полюсов

График  АЧХ

 
 
 

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

 
 

    Таблица коэффициентов b и a для каждого каскада, а так же  масштабный множиель m.

    Табл1.

  I  каскад II –каскад III  каскад
b0 0.222231 0.222231 0.222231
b1 0.222231 0.444462 0.444462
b2 0 0.222231 0.222231
a0 1 1 1
a1 0.775979 0.577814 0.263231
a2 -0.576084 -0.173593 0
m 0.857375 0.857375 1

    Целочисленные значения коэффициентов.

    Табл2.

  I  каскад II –каскад III  каскад
b0 195 195 227
b1 195 390 455
b2 0 195 227
a1 794 591 269
a2 -590 -178 0
 
 
 
 
 
 
 
 
        1.   РАЗРАБОТКА АЛГОРИТМА:
 

    Алгоритм  будет состоять из четырёх основных функций: main.cpp, initBIX.cpp (инициализация начального состояния), runBIX.cpp (обработка коэффициентов) и cnvBIX.cpp (функция свёртки).

    Так же будут созданы: prjBIX.h – заголовочный файл и constantBIX.cpp – файл констант.

    Ниже приведены блок схемы реализуемых функций:

1. Функции main: 
 

 
 
 
 
 
 
 
 
 
 

2. Функция инициализации начального состояния initBIX: 

 

3. Функция runBIX: 
 

 
 
 
 

4. Функций cnvBIX: 

 
 
 

        1. РЕАЛИЗАЦИЯ  ПРОГРАММНОГО КОДА
 

    Программная реализация кода будет основана на файловой модели, которая подразумевает:

    • Наличие одного заголовочного файла на проект;
    • Размещение каждой функции в отдельном файле;
    • Создание всех глобальных переменных в отдельном файле;
    • Передача параметров между функциями через контекстную структуру;
    • Функция main() выполняет только считываение/запись данных и вызов интерфейсных функций проекта, и не содержит программного кода, соответствующего разрабатываемому алгоритму;
    • Размещение входных и выходных данных в соответствующих файлах;
    • Запрет на создание переменных, констант и т.п. в заголовочном файле проекта.

    Ниже  представлены листинги программного кода каждой функции: 
 

Функция main 

#include "prjBIX.h" 

int main(void)

{

   

  

    word32 count; 

   

 

    pCntx=&cntx;

   

   

    initBIX(pCntx);

   

   for(count=0;count<10;count++)

   {

    asm(" nop "); 

    runBIX(pCntx);

       

    asm(" nop ");   

       

   }    

    return(0);

} 
 
 
 

Функция инициализации начального состояния initBIX 

//функция инициализации  начального состояния разрабатываемого проекта

#include "prjBIX.h" 

void initBIX(CONTEXMPY *pCntx)

{

    //Локальные  переменные

    word32 count; //переменная цикла

   

    pCntx -> pInpBuff = inpBuff; //Указатель на входной  буфер

    pCntx -> pOutBuff = outBuff; //Указатель на выходной буфер

    pCntx -> lenBuff  = SAZEBUFF; //Размер входного  и выходного буферов

    pCntx -> constA   = MASHTAB; //Маштабирующий коэффициент

   

    pCntx -> pCoeffA1   = coeffBuffA1;//Указатель на  буфер A коэффициентов фильтра

    pCntx -> pCoeffB1   = coeffBuffB1;//Указатель на  буфер B коэффициентов фильтра

   

    pCntx -> pCoeffA2   = coeffBuffA2;//Указатель на  буфер A коэффициентов фильтра

    pCntx -> pCoeffB2   = coeffBuffB2;//Указатель на  буфер B коэффициентов фильтра

   

    pCntx -> pCoeffA3   = coeffBuffA3;//Указатель на  буфер A коэффициентов фильтра

    pCntx -> pCoeffB3   = coeffBuffB3;//Указатель на  буфер B коэффициентов фильтра

     

    pCntx -> pShiftA1   = shiftBuffA1;//Указатель на  буфер задержки

    pCntx -> pShiftB1   = shiftBuffB1;//Указатель на буфер задержки

   

    pCntx -> pShiftA2   = shiftBuffA2;//Указатель на  буфер задержки

    pCntx -> pShiftB2   = shiftBuffB2;//Указатель на  буфер задержки

   

    pCntx -> pShiftA3   = shiftBuffA3;//Указатель на буфер задержки

    pCntx -> pShiftB3   = shiftBuffB3;//Указатель на  буфер задержки

     

    pCntx -> namberCoeff = NAMBERCOEFF;//Порядок фильтра

  

   //Обнуление  массива входных коффициентов

   for(count = 0; count < SAZEBUFF; count++) pCntx -> pInpBuff[count] = 0;

  

   //Обнуление линии задержки

   for(count = 0; count < NAMBERCOEFF; count++) pCntx -> pShiftA1[count] = 0;

   for(count = 0; count < NAMBERCOEFF; count++) pCntx -> pShiftB1[count] = 0;

  

   for(count = 0; count < NAMBERCOEFF; count++) pCntx -> pShiftA2[count] = 0;

   for(count = 0; count < NAMBERCOEFF; count++) pCntx -> pShiftB2[count] = 0;

  

   for(count = 0; count < NAMBERCOEFF; count++) pCntx -> pShiftA3[count] = 0;

   for(count = 0; count < NAMBERCOEFF; count++) pCntx -> pShiftB3[count] = 0;

  

  

}

Функция runBIX 

//Функция обработки  входного буфера и записи результата  в выходной буфер 

#include "prjBIX.h"

  

void runBIX(CONTEXMPY* pCntx)

{

    //Объявление  локальных переменных

    word16 *pInpBuff; //Указатель на входной буфер

    word16 *pOutBuff; //Указатель на выходной буфер

    word16 lenBuff;   //Размер входного и выходного  буферов

    word32 constA;    //Маштабирующий коэффициент

    word32 count;     //Переменная цикла

    word16 coeff;     //Переменная для хранения промежуточных  результатов

   

    word16 *pCoeffA1;   //Указатель на буфер коэффициентов  фильтра

    word16 *pCoeffB1;   //Указатель на буфер коэффициентов  фильтра

   

    word16 *pCoeffA2;   //Указатель на буфер коэффициентов  фильтра

    word16 *pCoeffB2;   //Указатель на буфер коэффициентов фильтра

   

      word16 *pCoeffA3;   //Указатель на буфер  коэффициентов фильтра

    word16 *pCoeffB3;   //Указатель на буфер коэффициентов  фильтра

   

   

    word16 *pShiftA1;   //Указатель на буфер задержки

    word16 *pShiftB1;   //Указатель на буфер задержки

   

    word16 *pShiftA2;   //Указатель на буфер задержки

Информация о работе Синтез и программная реализация БИХ-фильтра