Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 02:32, курсовая работа
Цель работы: Синтезировать полученные знания и реализовать программный код фильтра с бесконечной импульсной характеристикой для цифрового сигнального процессора компании Texas Instrument (TI) семейства TMS320C6000.
Государственный университет телекоммуникаций им. Бонч-Бруевича
кафедра
«Цифровой обработки
сигналов»
Курсовая работа
«Синтез
и программная
реализация БИХ-фильтра»
Вариант
№ _17_
Выполнил студент
группы № Р610м _________Шафоростов
В. А.
Проверил доцент
кафедры ЦОС
_________И. И. Гук
2011 год
Цель работы:
Синтезировать полученные знания и реализовать программный код фильтра с бесконечной импульсной характеристикой для цифрового сигнального процессора компании Texas Instrument (TI) семейства TMS320C6000.
Дано:
1. Частота дискретизации – 8000 Гц .
2. Полоса пропускания – 1200Гц.
3. Полоса задерживания – 2400Гц.
4. Отклонение в полосе пропускания – 1 дБ.
5. Отклонение в полосе задерживания – -30дБ
7. Метод расчёта – билинейное |Z-преобразование
8. Тип аппроксимации:
Баттерворта
Структурная
схема
Передаточная
функция
Где, 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 |
Алгоритм будет состоять из четырёх основных функций: main.cpp, initBIX.cpp (инициализация начального состояния), runBIX.cpp (обработка коэффициентов) и cnvBIX.cpp (функция свёртки).
Так же будут созданы: prjBIX.h – заголовочный файл и constantBIX.cpp – файл констант.
Ниже приведены блок схемы реализуемых функций:
1.
Функции main:
2. Функция
инициализации начального
состояния initBIX:
3.
Функция runBIX:
4.
Функций cnvBIX:
Программная реализация кода будет основана на файловой модели, которая подразумевает:
Ниже
представлены листинги программного кода
каждой функции:
Функция
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; //Указатель на буфер задержки
Информация о работе Синтез и программная реализация БИХ-фильтра