Міністерство освіти і науки України
Національний університет “Львівська політехніка”
/
Звіт
До Лабораторної роботи №1
З дисципліни: «Методи та засоби опрацювання сигналів»
Варіант - 12
Мета: виконати операції над матрицями та векторами в системи SCILAB. Здобути навики роботи в даному середовищі.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Цифрова обробка сигналів – це область науки і техніки, в якій вивчаються загальні для різних технічних застосувань принципи, методи і алгоритми обробки сигналів засобами обчислювальної техніки.
Суть ЦОС як області науки пролягає у розв'язку на обчислювальній машині чотирьох основних задач:
- представлення сигналів в зручній для сприйняття формі;
- виділення із сигналів корисної інформації;
- внесення в сигнали корисної інформації;
- формування сигналів із заданими параметрами.
Система SCILAB – поєднує розвинену мову програмування та широку бібліотеку чисельних алгоритмів, що охоплює багато областей науки і техніки.
Мова програмування SCILAB є високорівневим інтерпретатором. Це означає, що кожна команда виконується незалежно від інших і не потребує загальної компіляції. Так забезпечується простота написання та відлагодження програм, а також швидкість їх виконання. SCILAB дозволяє визначати користувачеві власні типи даних. При цьому стандартним операціям, наприклад, арифметичним операторам або операторам порівняння, можна надати особливого змісту для роботи з власними типами даних. Користувач може створювати власні модулі для вирішення конкретних задач або викликати функції, реалізовані на інших мовах програмування зокрема на С.
Найпростішим способом використання SCILAB є безпосереднє введення команд в консолі. Результат виконання при цьому відображається відразу ж після її введення і виконання (натисканням клавіші Enter). Таке покрокове виконання є ефективним для того, щоб зрозуміти поведінку готових програм і дозволяє навчитися писати власні програми.
Послідовність команд, призначена для кількаразового використання повинна бути записана і збережена у файлі.
У пакеті SCILAB файли бувають двох типів: файл-програми - скрипти (мають розширення .sce) та файл-функції (мають розширення .sci), в яких описані функцій, визначені самим користувачем.
Скрипт є послідовністю команд SCILAB, він не має вхідних і вихідних аргументів. Скрипт не вимагає жодних ключових слів для початку і кінця. Виконання команд, що містяться в скрипті може здійснюватися: з редактора файлів; з командного рядка, використавши команду «exec»; з іншого файлу. Фактично, створений файл стає командою, яку розуміє SCILAB. Всі змінні, оголошені в скрипті стаються доступними в робочому середовищі після його виконання. Їх можна використовувати в інших програмах і командах (якщо примусово не очищати пам’ять).
Файл-функція – це файл з розширенням .sci, в якому описана деяка функція. Ім’я файлу повинно співпадати з іменем описаної в ньому функції.
Обов’язковим першим рядком такого файлу є заголовок функції, який містить: ключове слово «function», список вихідних параметрів , знак «=», ім’я функції та список вхідних параметрів. Декілька вихідних аргументів зручно використовувати для функцій, що повертають не одне, а декілька значень (так звані, вектор-функції). Після заголовку йде тіло функції, в якому відбувається знаходження вихідних параметрів. Закінчуватися функція повинна ключовим словом «endfunction».
Виклик функції відбувається після її виконання, шляхом запуску з командного рядка за допомогою команди «exec».
Виконання роботи
Варіант –12
/
Код програми:
*.sce
exec("D:\fun.sci",0);
size_m=input('Enter size_m=');
doLab1(size_m);
*sci
function _matrix=doLab1(size_m)
clc
clear
//n=input('n=')
n=size_m;
ch=input("input matrix randowize? Y/N ","s");
select ch
case 'y' then
a=grand(1,3,"uin",1,10)
disp(a)
mat=grand(n,n,"uin",1,10)
disp(mat);
case 'n' then
a=input("input vector a=")
mat=input("input matrix=")
disp(mat);
else
error("Wrong input data")
end
temp=mean(a);
if(modulo(n,2)~=0)
pos=find(mat(2:2:$)==a(1) | mat(2:2:$)==a(2) | mat(2:2:$)==a(3));
disp(pos,"start pos: ");
pos=pos.*2;
disp(pos,"position: ");
mat(pos)=temp;
else
mat=[mat;zeros(1:n)];
//disp(mat_d);
pos=find(mat(2:2:$)==a(1) | mat(2:2:$)==a(2) | mat(2:2:$)==a(3));
pos=pos.*2;
mat(pos)=temp;
disp(pos,"position: ");
//disp(mat_d);
pos_null=find(mat==0);
mat(pos_null,:)=[];
//disp(mat_d);
//mat=mat_d;
end
disp(mat,"result matrix: ");
_matrix=mat;
endfunction
Результат виконання
/
Рис.1. Результати роботи програми при випадковому заповненні матриці і вектора
/
Рис.2. Результати роботи програми при ручному заповненні матриці і вектора
Висновок: на даній лабораторній роботі я навчився виконати операції над матрицями та векторами в системи SCILAB. Здобув навики роботи в даному середовищі.