Скачать 42,6 Kb.
|
ЛАБОРАТОРНАЯ РАБОТА №6 «РАБОТА С БИБЛИОТЕКОЙ IQMATH» Цель:
1. Ознакомимся с представлением чисел в формате с плавающей точкой, реализованный в библиотеке IQmath: Такое представление иногда называют «виртуальной плавающей точкой», поскольку работа с ним похожа на работу с плавающей точкой, но использует целые числа. ![]() –2I + 2I–1 + … + 21 + 20 . 2–1 + 2–2 + … + 2–Q Преимущество – точность одинакова для всех чисел выбранного формата, недостаток – ограниченный диапазон по сравнению с плавающей точкой. Положение десятичной запятой определяется глобальным параметром GLOBAL_Q, который может меняться от 1 до 30 (Q1 до Q30). Все функции в программе будут использовать именно это значение Q. Фрагмент примера в СИ #define GLOBAL_Q 18 // установить в файле “IQmathLib.h” _iq Y, M, X, B; // для всех значений Q = 18 Y = _IQmpy(M,X) + B; // для вычислений используется Q = 18 2. Содержание библиотеки IQMath:
![]()
например, _IQint(A), _IQtoF(B) и др. 3. Реализуем синусоидальную функцию и выведем ее на экран в виде графической зависимости. Откроем готовый проект, в котором уже находятся все модули, необходимые для этого. Запишем исходный текст программы: /*подключаем заголовочные файлы*/ // подключение модуля IQMath #include "IQMathLib.h" //описание переменных и функций главного модуля #include "main.h" //описание переменных и функций главного модуля #include "filter_1.h" _iq sin_value; _iq sin_noise_value; _iq sin_filter; FILTER_1 filtr = FILTER_1_DEFAULTS; void main(void) { //НАЧАЛО ВЫПОЛНЕНИЯ ПРОГРАММЫ while(1) { l_counter+=_IQ(0.1); sin_value=_IQsin(l_counter); } } Добавим к исходной синусоиде «шум»: _iq sin_value; _iq sin_noise_value; void main(void) { //НАЧАЛО ВЫПОЛНЕНИЯ ПРОГРАММЫ while(1) { l_counter+=_IQ(0.1); sin_noise_value=_IQmpy(_IQ(0.5),_IQsin(l_counter*8)); sin_value=_IQsin(l_counter)+sin_noise_value; } } Полученная зависимость имеет примерно такой вид: ![]() 4. Теперь с помощью простейшего фильтра первого порядка (инерционного звена) реализуем фильтрацию зашумленного сигнала. Передаточная функция такого фильтра ![]() Преобразуем ее к разностному уравнению ![]() Подключим к проекту файл «filter_1.с»: #include "IQmathLib.h" // подключение библиотеки IQmath #include "filter_1.h" // подключение заголовочного файла void filter_1_calc(FILTER_1 *v) { v->output=_IQmpy(v->Kf0,v->input)+_IQmpy(v->Kf1,v->output); } Изменим исходную программу на нижеследующую /*подключаем заголовочные файлы*/ //описание регистров и перифирийных устройств микроконтроллера #include "DSP28_Device.h" // подключение модуля IQMath #include "IQMathLib.h" //описание переменных и функций главного модуля #include "main.h" #include "filter_1.h" //подключаем модуль фильтра _iq sin_value; _iq sin_noise_value; _iq sin_filter; //создаем объект filtr и присваиваем ему значения по умолчанию FILTER_1 filtr = FILTER_1_DEFAULTS; void main(void) { //НАЧАЛО ВЫПОЛНЕНИЯ ПРОГРАММЫ filtr.Kf0=_IQ(0.01); // инициализация первого коэффициента filtr.Kf1=_IQ(0.99); // инициализация второго коэффициента while(1) { l_counter+=_IQ(0.1); sin_noise_value=_IQmpy(_IQ(0.1),_IQsin(l_counter*80)); sin_value=_IQsin(l_counter)+sin_noise_value; filtr.input=sin_value; /*передаем значения для фильтрации*/ filtr.calc(&filtr);/* считаем фильтр */ sin_filter=filtr.output; } } Работа фильтра представлена на рисунке ниже: ![]() 5. С использованием предложенного алгоритма создания модулей, напишите модуль фильтра скользящего среднего по произвольному числу выборок. Запишем исходный текст программы: /*подключаем заголовочные файлы*/ //описание регистров и перифирийных устройств микроконтроллера #include "DSP28_Device.h" // подключение модуля IQMath #include "IQMathLib.h" //описание переменных и функций главного модуля #include "main.h" #include "filter_1.h" //подключаем модуль фильтра _iq sin_value; _iq sin_noise_value; _iq sin_filter; //создаем объект filtr и присваиваем ему значения по умолчанию FILTER_1 filtr = FILTER_1_DEFAULTS; _iq x[20]; int n=20; int i; _iq result_1; _iq Sr(_iq array[],int n) { _iq sum; sum=x[0]; for (i=1; i sum=_IQdiv(sum,_IQ(n)); return sum; } void main(void) { //НАЧАЛО ВЫПОЛНЕНИЯ ПРОГРАММЫ filtr.Kf0=_IQ(0.01); // инициализация первого коэффициента filtr.Kf1=_IQ(0.99); // инициализация второго коэффициента while(1) { l_counter+=_IQ(0.1); sin_noise_value=_IQmpy(_IQ(0.1),_IQsin(l_counter*80)); sin_value=_IQsin(l_counter)+sin_noise_value; filtr.input=sin_value; /*передаем значения для фильтрации*/ filtr.calc(&filtr);/* считаем фильтр */ sin_filter=filtr.output; result_1=Sr(x,n); for (i=n; i>0; i--) {x[i]=x[i-1];} x[0]=sin_value; } } В результате получили фильтр, который на основании n-выборок «сглаживает» зашумленную синусоиду. При этом несколько уменьшается амплитуда полезного сигнала. |
![]() | Лабораторная работа Лабораторная работа: Наблюдение сплошного и линейчатого спектров излучения Физика 11 класс моу сош с. Карасу | ![]() | Лабораторная работа № Цель: Систематизировать знания по видам тканей Тема. Волокнистые швейные материалы. Пряжа. Свойства ткани. Лабораторная работа №2 |
![]() | «Алюминий. Строение атома. Физические и химические свойства простого вещества» Основные формы: беседа, самостоятельная работа, лабораторная работа, химический эксперимент | ![]() | Конспект урока по окружающему миру литературному чтению во 2 классе... Методы и методические приемы: рассказ в сочетании с беседой, работа по учебникам, словарная работа, чтение стихотворений учащимися,... |
![]() | Лабораторная работа №1 по теме «Определение цены деления измерительного прибора» Измерение физических величин. Точность и погрешность измерений. Лабораторная работа №1 по теме «Определение цены деления измерительного... | ![]() | Лабораторная работа №2 Работа с меню. Многоформенное приложение С помощью компонентов Form, Edit, Button, Panel, MainMenu создайте приложение для шифровки текста. На главной форме можно расположить... |
![]() | Лабораторная работа № Тема: Создание отчетов Access. Мастер отчетов.... Запустите Access и откройте базу данных Student, созданную в Лабораторных работах 1, 2 и 3 | ![]() | Лабораторная работа №1 По теме ««Изучение Internet в целях использовании... Лабораторная работа предназначена для: обоснования потребности, необходимости и удобства использования среды Internet для поиска... |
![]() | Лабораторная работа №1 По теме ««Изучение Internet в целях использовании... Лабораторная работа предназначена для: обоснования потребности, необходимости и удобства использования среды Internet для поиска... | ![]() | Лабораторная работа № Работа с величинами Использование констант делает программы легче читаемыми и позволяет проще вносить изменения: отпадает необходимость многократно исправлять... |