DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт з лабораторної роботи № 1 з дисципліни «Проектування комп’ютерних засобів обробки сигналів та зображень» на тему «Аналіз обчислювальної похибки при виконанні базових операцій алгоритмів цифрової обробки сигналів. Обчислення математичних виразів»

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Комп’ютерних та інформаційних технологій
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Проектування комп’ютерних засобів обробки сигналів та зображень
Група:
КН-31
Коротко про документ

Про що ця робота

У документі наведено звіт з лабораторної роботи, присвяченої дослідженню обчислювальних похибок в алгоритмах цифрової обробки сигналів. Здійснено програмну реалізацію на мові C та проведено аналіз точності обчислень для фіксованого формату.

У роботі розглядаються

  • Цифрова обробка сигналів
  • Обчислювальна похибка
  • Фіксована точка
  • Програмування на C
  • Математичні вирази
  • Похибка округлення
  • Аналіз точності

Зміст і розділи

  1. Мета роботи
  2. Варіант завдання
  3. Лістинг
  4. Результати роботи
  5. Висновок
Для кого:Студенти технічних спеціальностей, викладачі та дослідники у галузі комп'ютерної інженерії та цифрової обробки сигналів.
Викладачі:Викладач кафедри ЕОМ

Ключові поняття

обчислювальна похибкацифрова обробка сигналівфіксований форматабсолютна похибкавідносна похибкарозрядністьлістингалгоритмматематичний виразточність обчислень

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт лабораторної роботи № 1 з дисципліни: «Проектування комп’ютерних засобів обробки сигналів та зображень» на тему: «Аналіз обчислювальної похибки при виконанні базових операцій алгоритмів цифрової обробки сигналів. Обчислення математичних виразів» Мета роботи Дослідити шляхи виникнення обчислювальної похибки та її вплив на точність обчислень. Проаналізувати величину похибки при обчисленні деяких математичних виразів. Варіант завдання до лабораторної роботи Вар. Функція Формула розкладу Додаткові дані  39   x ( ]0., 10.[ (x = 0.37   Згідно поставленого завдання, аналітичний вид математичної функцій, що буде обчислюватися, буде мати вигляд( для наочності обчислень беремо 5 членів ряду):  Обчисливши коефіцієнти при степенях, отримаємо: =  Лістинг #include <math.h> #include <conio.h> #include <stdio.h> double fixed(double fin, int intRank, int rank, bool test);//ПРОТОТИП. //FIN-ВХІДНЕ ЧИСЛО RANK-РОЗРЯДНІСТЬ ПІСЛЯ КОМИ INTrANK-РОЗРЯДНІСТЬ ЦІЛОЇ ЧАСТИНИ TEST-ВИВІД [FIN_2] double fixed(double fin, int intRank, int rank, bool test = 0)//ФУНКЦІЯ ПЕРЕТВОРЕННЯ У ФІКСОВАНИЙ ФОРМАТ { //--IN BINARY------------------------------------------------------------------------------- double fix = 0;//НАША МАЙБУТНЯ ЗМІННА З ФІКСОВАНОЮ КОМОЮ int i;//ЛІЧИЛЬНИК-РІЗНОРОБОЧИЙ //--ЦІЛА ЧАСТИНА---------------------------------------------------------------------------- int r = 1;//ВАГА РОЗРЯДУ [1.0_2 = 1.0_10] int xp16[16];//ДЛЯ БІНАРНОГО КОДУ ЦІЛОЇ ЧАСТИНИ int fint = abs((int)fin);//БЕРЕМО ЛИШЕ ЦІЛУ ЧАСТИНУ for (i = 0; i<16; i++)//ОНУЛЕННЯ БІНАРНИХ РОЗРЯДІВ xp16[i] = 0; for (i = 0; fint>0, i<16; i++)//ПОКИ ЧИСЛО ДІЛИТЬСЯ НА 2 { xp16[i] = (int)(fint - ((int)(fint / 2)) * 2);//ОСТАЧА ВІД ДІЛЕННЯ НА 2 fint /= 2;//ЦІЛОЧИСЛОВЕ ДІЛЕННЯ НА 2 } for (i = 0; i<intRank; i++)//ЗАЗНАЧЕНА РОЗРЯДНІСТЬ { fix = fix + xp16[i] * r;//ЗБИРАННЯ ЦІЛОЇ ЧАСТИНИ r *= 2;//ЗБІЛЬШЕННЯ ВАГИ РОЗРЯДУ } //--ДРОБОВА ЧАСТИНА------------------------------------------------------------------------ double d = 0.5;//СТЕПІНЬ ДЛЯ СКЛАДАННЯ ЧИСЛА [0.1_2=0.5_10] int px16[16];//БУДЕ ЗБЕРІГАТИ КОЖЕН РОЗРЯД БІНАРНОГО КОДУ ДРОБОВОЇ ЧАСТИНИ double fdot = fin;//КОПІЯ ВХІДНОГО ЧИСЛА for (i = 0; i<16; i++)//ОНУЛЕННЯ БІНАРНИХ РОЗРЯДІВ px16[i] = 0; if (fin<0)//ЧИСЛО ПО МОДУЛЮ fdot = -fin; for (i = 0; i<rank; i++)//ЗАЗНАЧЕНА РОЗРЯДНІСТЬ { fdot = fdot - (int)fdot;//ВІДОКРЕМЛЕННЯ ЦІЛОЇ ЧАСТИНИ fdot *= 2;//МНОЖЕННЯ НА 2 px16[i] = (int)fdot;//ЗАПИС У БІНАРНИЙ КОД ЦІЛОЇ ЧАСТИНИ } for (i = 0; i<rank; i++)//ЗАЗНАЧЕНА РОЗРЯДНІСТЬ { if (px16[i] != 0) fix = fix + px16[i] * d; //ЗБИРАННЯ ЧИСЛА d *= 0.5;//СТЕПІНЬ ДВІЙКИ ПІСЛЯ КОМИ ЗБІЛЬШУЄТЬСЯ } if (test) { printf("\n%f = ", fix); if (fin<0) printf("[1."); else printf("[0."); for (i = intRank - 1; i >= 0; i--) printf("%d", xp16[i]); printf("."); for (i = 0; i<rank; i++) printf("%d", px16[i]); printf("]"); } if (fin<0)//ВСТАНОВЛЮЄМО ЗНАК fix = -fix; return fix;//ВЕРТАЄМО ФІКСОВАНИЙ ФОРМАТ } int main() { //------відкриття файлу-------------------- FILE* filePointer; char file_name[32] = "Resalts.txt"; filePointer = fopen(file_name, "wt"); // double s_abs8=0,s_abs16=0; // double max_abs8=0,max_abs16=0; printf("-------------------------------------------------------------------------------\n"); printf(" x | fe | f16 | f8 | %c 16 | %c 8 | %c 16 | %c 8\n" , (char)127, (char)127, (char)243, (char)243); printf("------+---------+------------------+---------+---------+--------+------+-------\n"); //------РОЗРАХУНОК Ф-Ї ЧЕРЕЗ DOUBLE--------- double x; bool zero = false; bool ones = false; for (x = 0; x<=10; x = x + 0.37) //прописуємо крок і межі { double f = 0; double _1 = 0.3333333333333333 * 0.33333333333333*pow(x, 3); double _2 = 0.2 * 0.333333333333333*pow(x, 5); double _3 = 0.1428571428571429 * 0.3333333333333333*pow(x, 7); double _4 = 0.1111111111111111 * 0.3333333333333333*pow(x, 9); double f8 = 0, f16 = 0; f = 1 + _1 + _2 + _3 + _4; int r1 = 4, r2 = 3; double const_n = fixed(1, r1, r2); double const_x = fixed(x, r1, r2); double const_2 = fixed(2, r1, r2); double const_1 = fixed(1, r1, r2); double const_2n = fixed(const_2 * const_n, r1, r2); double const_2n_p1 = fixed(const_2n + const_1, r1, r2); double x_pow = fixed(pow(const_x, const_2n_p1), r1, r2); f8 = f8 + fixed(x_pow / const_2n_p1, r1, r2); r1 = 4, r2 = 11; const_n = fixed(1, r1, r2); const_x = fixed(x, r1, r2); const_2 = fixed(2, r1, r2); const_1 = fixed(1, r1, r2); const_2n = fixed(const_2 * const_n, r1, r2); const_2n_p1 = fixed(const_2n + const_1, r1, r2); x_pow = fixed(pow(const_x, const_2n_p1), r1, r2); f16 = f16 + fixed(x_pow / const_2n_p1, r1, r2); if (!(((int)(x * 1000)) != 0)) zero = true; //------ABSOLUTNA POXUBKA-------------------- double abs16 = f - f16; if (abs16 < 0) abs16 = -abs16; double abs8 = f - f8; if (abs8 < 0) abs8 = -abs8; //------VIDNOSNA POXUBKA---------------------- double vid16; if (abs16 != 0) vid16 =abs( (abs16 / f) * 100); else vid16 = 0; double vid8; if (abs8 != 0) vid8 = abs((abs8 / f) * 100); else vid8 = 0; //------OUTPUT------------------------------- if (x >= 0) printf(" "); printf("%.3f|%f|%.15f|%f|%.7f|%f|%2.3f|%2.3f\n" , x, f, f16, f8, abs16, abs8, vid16, vid8); /* s_abs8+=abs8; s_abs16+=abs16; if(max_abs8<abs8) max_abs8+=abs8; if(max_abs16<abs16) max_abs16+=abs16; */ fprintf(filePointer, "%.2f %f %.15f %f %.7f %f %2.3f %2.3f\n" , x, f, f16, f8, abs16, abs8, vid16, vid8); if (zero && ones) { getch(); ones = false; } } fclose(filePointer); // printf("\n, %f %f",s_abs16/100,max_abs16); getch(); return 0; } Результати роботи Таблиця 1 – Результати роботи Значення F (Dх) Значення D Значення e   Dx F Fp16 Fp8 ∆16 ∆8 ɛ16 ɛ8           Рис.1. Графік абсолютної похибки 16біт  Рис.2. Графік абсолютної похибки 8біт  Рис.3. Графік відносної похибки 16біт  Рис.4. Графік відносної похибки 8біт  Рис.5. Графік Функції  Рис.6. Результат виконання програми Висновок Виконав[ім’я автора приховано]виразів.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!