МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»

ДИСКРЕТНЕ ПЕРЕТВОРЕННЯ ФУР’Є
ТА ЙОГО ЗАСТОСУВАННЯ ДЛЯ СПЕКТРАЛЬНОГО АНАЛІЗУ СИГНАЛІВ
ІНСТРУКЦІЯ
до лабораторної роботи № 1
з курсу “Цифрова обробка сигналів і зображень”
для студентів спеціальностей 8.160102
“Захист інформації з обмеженим доступом та автоматизація її обробки”
Затверджено
на засiданнi кафедри
"Захист інформації"
Протокол № 2 вiд 6. 09. 2010 p.
Львів 2010
Дискретне перетворення Фур’є та його застосування для спектрального аналізу сигналів: Інструкція до лабораторної роботи № 1 з курсу ”Цифрова обробка сигналів і зображень” для студентів спеціальності 8.160102 “Захист інформації з обмеженим доступом та автоматизація її обробки” / Укл. В.В. Хома, Я. Р. Совин - Львiв: Національний університет "Львівська політехніка", 2010. - 12 с.
Укладачі: Хома В.В., професор, д.т.н.
Совин Я. Р., доцент, к.т.н.

Вiдповiдальний за випуск: Дудикевич В.Б., професор, д.т.н.
Рецензент: Максимович В.М., професор, д.т.н.
Горпенюк А.Я., доцент, к.т.н.
Мета роботи – ознайомлення із математичнм апаратом опису сигналів у частотній області, змістом дискретного перетворення Фур’є та його застосуванням для спектрального аналізу реальних сигналів.
ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Перетворення Фур’є та його використання для спектрального аналізу сигналів
Перетворення Фур’є є основним інструментом аналізу сигналів у частотній області – так званого спектрального аналізу. З математичної точки зору опис сигналів у часовій області за допомогою часової функції і в частотній області за допомогою спектральної густини є ідентичним, однак сенс використання тієї чи іншої форми зумовлений певними вигодами при розв’язанні тієї чи іншої задачі.
Зв’язок між та визначається парою інтегральних перетворень Фур’є:
прямим
; (1)
зворотним
. (2)
Комплексна величина містить інформацію про спектр, тобто вміст в аналізованому сигналі конкретної частоти , оскільки аналізуючий сигнал (ядро інтегрального перетворення) за формулою Ейлера

представляє собою нескінченний набір гармонічних сигналів.
Якщо за допомогою прямого перетворення Фур’є здійснюється розклад сигналу на складові різних частот (аналіз), то природно, що зворотне перетворення забезпечує реконструкцію (синтез) сигналу зі спектру шляхом підсумовування (інтегрування) всіх гармонік , взятими із відповідними вагами .
Основні властивості перетворення Фур’є наведені в Додатку 1.
Відомо, що періодичні сигнали представляються рядом Фур’є у вигляді суми гармонічних складових, оскільки у цьому випадку в аналізованому сигналі виступає лише основна гармоніка та її багатократні компоненти . У показниковій формі ряд Фур’є має вигляд
. (3)
Коефіцієнти ряду є комплексними величинами і визначаються із співвідношення
(4)
Сукупність коефіцієнтів ряду складає спектр періодичного сигналу. Спектр амплітуд і спектр фаз однозначно визначають сигнал і показують, яку участь бере гармонічна складова кожної частоти в складі результуючого коливання. Часто обмежуються розглядом який визначає енергетичні властивості сигналу, а має відношення лише до форми сигналу.
Дискретні сигнали утворюється шляхом дискретизації (взяття вибірок) неперервного сигналу з часовим інтервалом . За теоремою Котельникова-Шеннона, частота вибірок повинна принаймні удвічі перевищувати максимальну частоту у спектрі дискретизованого сигналу. Для дискретних сигналів пара інтегральних перетворень Фур’є (1) і (2) набуває вигляду (див. Додаток 2):
; (5)
. (6)
де - нормалізована частотою дискретизаціїї кругова частота.
Враховуючи періодичний характер спектра дискретизованого сигналу із періодом (для нормованої кругової частоти ), у виразі (6) межі інтегрування звужено до одного періоду, що включає нульову частоту.
Характер спектра дискретизованого сигналу підтверджує принцип часо-частотної дуальності перетворення Фур’є:
періодичний сигнал > дискретний спектр;
дискретний сигнал > періодичний спектр.
Дискретне перетворення Фур’є та його зв'язок зі спектром дискретних сигналів
На практиці при спектральному аналізі реальних сигналів дослідник не оперує неперервним сигналом , а лише скінченною послідовністю його вибірок у заданому форматі. Разом з тим застосування виразу (5) для обчислення спектральної функції неможливе через нескінченні значення межі підсумовування. Саме тому в техніці цифрового оброблення сигналів для спектрального аналізу застосовується дискретне перетворення Фур’є.
Дискретним перетворенням Фур’є (ДПФ; англійський термін – Discrete Fourier Transform, DFT) називається пара взаємооднозначних перетворень, що повязує вибірки дискретного періодичного сигнал із комплексними коефіцієнтами його дискретного спектра:
, (7)
, (8)
де  кількість вибірок в періоді дискретного сигналу.
Перетворення (7) називається прямим, а перетворення (8) – зворотним ДПФ (ЗДПФ). ДПФ виконується над скінченою періодичною послідовністю вибірок сигналу , у якої період складається з дискретних значень, тобто . Послідовність репрезентує спектр дискретного сигналу , що також є періодичним
.
Зіставлення виразів (5) та (7) показує, що ДПФ представляє лише дискретні вибірки неперервної спектральної функції функції дискретного сигналу, що відповідає частотам :
. (9)
Отже, значення дискретних частот у спектрі залежать від періоду дискретизації , а розрізнювальна здатність по частоті (спектральна селективність), обернено пропорційна часу спостереження за сигналом
. (10)
З співвідношення (9) витікає важливий висновок: якщо до існуючої кількості вибірок додати деяку кількість нулів, наприклад , то спектральна функція дискретного сигналу не зміниться, а ДПФ дасть вдвічі більшу кількість спектральних відліків, які відповідають частотам, тісніше розташованим в інтнервалі від нуля до частоти дискретизації.
Спектральний аналіз реальних сигналів. Розтікання спектру. Накладання вікон
При ДПФ вважається, що послідовність відліків аналізованого сигналу є періодично продовженою вперед і назад в часі. При цьому, якщо значення початкових і кінцевих відліків сигналу сильно відрізняються, при періодичному повторенні на стиках сегментів виникають стрибки із-за яких спектр розширюється, тобто в спектрі з’являються додаткові складові. Це явище, яке називають розтіканням спектру (англійський термін – spectrum leakage) можна проілюструвати на прикладі обчислення спектру дискретного гармонічного сигналу (рис. 1). Дискретні сигнали містять 16 відліків гармонічного сигналу з періодами рівними 4 відлікам (періодично продовжений сигнал є періодичним) і 6 відлікам (періодично продовжений сигнал містить скачок).

Рис. 1. ДПФ для цілого (а) і нецілого (б) числа періодів гармонічного сигналу і
з застосуванням вікна Ханна (в)
Для зменшення розтікання спектру при ДПФ застосовують вагові функції (англійський термін – weighting functions), які також називають вікнами (window). В цьому випадку перед розрахунком ДПФ сигнал домножується на вагову функцію , яка повинна спадати до країв сегменту. Формула прямого ДПФ при використанні вагових функцій приймає вигляд:

Якщо ми використовуємо вагову функцію, яка має максимум в середині (при ) і плавно спадає до країв (при і ), то це приведе до ослаблення ефектів, пов’язаних з виникненням стрибків сигналу при періодичному повторенні аналізованої скінченої послідовності, і таким чином, до зменшення розтікання спектру. Платою за це є розширення піків в спектрі сигналу (рис. 1, в).
Основні типи вікон наведені в табл. 1
Таблиця 1.
Вікно
Формула
Вікно
Формула

1. Трикутне

4. Бартлета


2. Хемінга

5. Блекмана


3. Ханна





Алгоритми швидкого перетворення Фур’є
Для обчислення одного коефіцієнта ДПФ за формулою (5) необхідно виконати комплексних множень і додавань, тому розрахунок всього ДПФ, що містить коефіцієнтів потребує пар операцій “множення-додавання”. Отже, число операцій зростає пропорційно квадрату розмірності ДПФ. Проте, якщо не є простим числом і може бути розкладене на множники, процес обчислень можна прискорити, розділивши аналізований набір відліків на частини, обчисливши їх ДПФ і об’єднавши результати. Такий спосіб обчислення ДПФ називається швидким перетворенням Фур’є (ШПФ; англійський термін – Fast Fourier Transform, FFT) і широко використовується в техніці цифрового оброблення сигналів.
Розглянемо найпоширеніші алгоритми ШПФ з основою 2 (англійський термін – Radix-2), які застосовуються до послідовностей довжиною , де – ціле. Основна ідея цих алгоритмів, полягає у зведенні обчислення -точкового ДПФ до обчислення декількох N1-точкових ДПФ, причому і . Алгоритми, при реалізації яких потрібна перестановка відліків вхідної послідовності, називаються алгоритми з проріджуванням в часі (англійський термін – decimation in time, DIT). Алгоритми, при реалізації яких потрібна перестановка відліків вихідної послідовності називаються алгоритмами з проріджуванням за частотою (англійський термін – decimation in frequency, DIF). За ефективністю ці дві різновидності алгоритмів еквівалентні.
ШПФ з проріджуванням в часі
Якщо послідовність довжиною розділити на дві -точкові послідовності з парними і непарними номерами відліків то формула (1.7) запишеться:
,
де і
Введемо позначення і , а також винесемо з другої суми спільний множник
(11)
Дві суми в (11) представляють собою ДПФ послідовностей (відліки з парними номерами) і (відліки з непарними номерами). Кожне з цих перетворень має розмірність . Тоді
, , (12)
де і – ДПФ відповідно послідовностей відліків з парними і непарними номерами.
Так як ДПФ розмірності дає лише спектральних коефіцієнти, безпосередньо використовувати формулу (12) можна лише при . Для решти () слід скористатися періодичністю спектра дискретного сигналу (і, відповідно, періодичністю результатів ДПФ):
, .
З врахуванням цього при формула (4) представиться у вигляді

Враховуючи, що одержують:
, (13)
Формули (12) та (13) представляють базову операцію ШПФ, яка отримала назву “метелик” (англійський термін – butterfly). Схематичне зображення метелика подано на рис. 2. Тут кружок в центрі позначає операцію додавання/віднімання. Стрілка позначає операцію множення на . Жирні крапки позначають регістри, які містять вхідні і вихідні значення для окремих етапів ШПФ.

Рис. 2. Умовне позначення операції “метелик” ШПФ з проріджуванням в часі
Кожну з послідовностей розміром можна аналогічним чином представити через послідовності розміром і т. д. поки не залишаться тільки 2-точкові послідовності.
Особливістю алгоритмів ШПФ є необхідність перестановки вхідних або вихідних значень. Елементи вхідної послідовності для алгоритму з проріджуванням в часі повинні бути розташовані в пам’яті в біт-реверсивному порядку. Біт-реверсивний порядок задається шляхом дзеркального відображення двійкових розрядів номерів відліків вхідної послідовності (табл. 2).
Таблиця 2.
Біт-реверсивний порядок для ШПФ з N=8
Номер відліку
Двійковий номер
Біт-реверсування
Біт-реверсний номер

0
000
000
0

1
001
100
4

2
010
010
2

3
011
110
6

4
100
001
1

5
101
101
5

6
110
011
3

7
111
111
7

На всіх етапах виконання ШПФ використовуються коефіцієнти , , які переважно обчислюються до виконання ШПФ і зберігаються в пам’яті.

Рис .3. Блок-схема алгоритму ШПФ з проріджуванням в часі для
ШПФ з проріджуванням за частотою
Розділимо довжиною вибірок на дві -точкові послідовності, які йдуть одна за одною:
.
З другої суми можна виділити множник
.
Цей множник рівний 1 або -1 в залежності від парності номера обчислюваного спектрального відліку k, тому надалі розглядаються парні і непарні k окремо. Після виділення множника ±1 комплексні коефіцієнти в обох сумах стають однаковими, тому виносимо їх за душки, об’єднуючи дві суми


Наведені суми представляють собою ДПФ суми і різниці половин вихідної послідовності, при цьому різниця перед обчисленням ДПФ множиться на комплексний коефіцієнт . Кожне з двох ДПФ має розмірність .
Отже, при проріджуванні за частотою обчислення реалізуються наступним чином:
1. З вихідної послідовності довжиною отримуються дві послідовності та довжиною N/2 згідно наступних формул:
,

2. ДПФ послідовності дає спектральні відліки з парними номерами, ДПФ послідовності - з непарними
,
.
Оскільки комплексний множник в даному алгоритмі застосовується до результату віднімання двох сигналів, метелик ШПФ з проріджуванням по частоті має таку структуру (рис. 4).

Рис. 4. Умовне позначення операції “метелик” ШПФ з проріджуванням за частотою
В розглянутому алгоритмі у біт-реверсивному порядку розташовується не вхідна, а вихідна послідовність, тобто спектральні коефіцієнти.
ОДПФ також можна проводити за алгоритмом ШПФ. При цьому необхідно застосовувати тільки комплексно-спряжені коефіцієнти , а одержаний результат згідно формули (2) потрібно помножити на .

Рис .5. Блок-схема алгоритму ШПФ з проріджуванням за частотою для
Оцінимо кількість операцій, необхідну для обчислення ШПФ. Кількість етапів ШПФ рівне , кількість операцій “метелик” на кожному етапі – . Оскільки при виконанні операції метелик відбувається множення комплексних чисел, що вимагає 4 множень, то загальна кількість операцій . Відповідно обчислювальні затрати ШПФ у порівнянні з безпосереднім використанням формули (11) зменшуються у . При великих це відношення стає досить великим (наприклад, при досягається більше ніж 100-кратне прискорення).
ОСНОВИ РОБОТИ З MATLAB
Система MatLab – це середовище для виконання різноманітних наукових та інженерних розрахунків.
Після запуску MatLab на екрані появиться вікно, показане на рис. 6.
MatLab це інтерактивна діалогова система, тому більша частина її головного вікна призначена для вводу команд і виводу результатів. Ця область називається командним вікном (Command Window). Зліва розташоване вікно робочої області, яка демонструє вміст робочої області пам’яті. Тут представлені імена змінних (Name), їх розмір в елементах (Size), число байт пам’яті (Bytes) і тип даних (Class).

Рис. 6. Вигляд головного вікна системи MatLab
В MatLab є можливість створювати свої програми (сценарії) і функції. Ці програми і функції представляють собою текстові (ASCII) файли з розширенням .m, в яких записані команди і оператори. Для цього в MatLab існує свій редактор з вбудованим відладчиком. Для створення .m файлу потрібно в меню File/New головного вікна MatLab вибрати пункт M-file.
З метою збереження одержаних результатів для подальшого використання необхідно перед виходом з середовища пакета їх запам’ятати. Для цього використовується команда:
» save ім’я файла, в якому будуть зберігатися дані. Такий файл матиме розширення .mat. У разі необхідності збереження значення тільки окремих змінних після імені файла необхідно подати перелік цих змінних. Для завантаження збережених змінних у робочу область необхідно виконати наступну команду:
» load ім'я файла, в якому збережені дані.
Для виводу довідки про якусь функцію слід набрати » help ім’я функції.
Для коментарів в MatLab використовується знак % - коментарем вважається частина рядку справа від нього.
Типи та формати даних
MatLab допускає вживання як дійсних, так і комплексних чисел, при цьому не вимагає декларації типу даних чи їх розміру. Для запису комплексних чисел використовують символи i та j. Наприклад, 1.5+2.3*i. Також у середовищі пакета визначена змінна типу string. Змінна такого типу є довільним текстовим фрагментом, записаним в апострофах, причому розрізняють верхні та нижні символи. В середовищі пакета визначене значення змінної .
Ім’я змінної може складатися з довільної комбінації літер і цифр, але не більше 19 знаків, розпочинатися з літери, причому в імені розрізняється велика і мала букви.
Основним типом даних MatLab є масиви. Навіть звичайне число (скаляр) з точки зору MatLab є масивом розміром 1х1 представленим у 8-байтному форматі double. В MatLab масиви непотрібно спеціально описувати. Розмір масиву може мінятися в ході роботи. Індекси масиву вказуються в круглих душках, для двовимірних – через кому спочатку індекс рядка, потім стовпця. Перший елемент масиву має індекс рівний 1. Видалити елементи масиву можна з допомогою операції присвоювання пустого значення []. Наприклад:
>> x = 5
x = 5
>> x(2, 3) = 2
х = 5 0 0
0 0 2
>> х(1:2, 2) = []
x = 5 0
0 2


Елементарні математичні функції пакета
В математичних виразах арифметичні операції записуються традиційно, для піднесення до степеня використовується знак ^, порядком обчислень можна управляти з допомогою круглих душок. Аргументи функцій також записуються в круглих душках. Наприклад:
>> sqrt(sin(2*pi/8)^2+2) еквівалентно .
Стандартно прийнято, що всі функції пакета MatLab визначені за допомогою малих літер. Елементарні математичні функції доступні в середовищі пакета наведені в Табл. 3.
Таблиця 3.
Тригонометричні

sin, cos, tan, cot
тригонометричні функції

asin, acos, atan, acot
обернені тригонометричні функції

sinh, cosh, tanh, coth
гіперболічні функції

Логарифмічні та експонента

exp
Експонента

log, log10, log2
натуральний, десятковий та логарифм за основою два

Піднесення до степеня

pow2
піднесення до квадратy

sqrt
корінь квадратний

Функції комплексного аргументу

abs, angle
модуль та фаза комплексного числа

conj
комплексно-спряжене число

real, imag
дійсна та уявна частини комплексного числа


Матричні операцій. Матричні функції
Найпростішим способом введення матриці є набір всіх її елементів. Елементи матриці вводяться за рядками, які відділяють один від одного символом ";" або переходом на новий рядок. Окремі елементи в рядках відділяються прогалинами. Наприклад,
А = [1 2 3; 4 5 6]
вводить у робочу область матрицю
А= 1 2 3
4 5 6
У середовищі пакета також передбачені функції для генерації певних типів матриць (Табл. 4):
Таблиця 4
Назва функції
Визначення генерованої матриці

zeros
Матриця, всі елементи якої дорівнюють 0

ones
Матриця, всі елементи якої дорівнюють 1

eye
Одинична матриця

rand
Матриця випадкових чисел

Спосіб виклику цих матриць є однаковим. Аргументом під час їх введення може бути: кількість рядків і стовпців матриці під час генерування прямокутної матриці. Наприклад,
A = zeros(2,4), B = ones(2,3), C = eye(2), D = rand(2,5)
A = 0 0 0 0
0 0 0 0
B = 1 1 1
1 1 1
C = 1 0
0 1

D = 0.7021 0.5039 0.1974 0.7228 0.9318
0.2087 0.2632 0.0149 0.4361 0.4660

Окремим випадком матриці є вектор (матриця, що складається з одного рядка чи стовпця). Спосіб введення векторів є ідентичним введенню матриці. Окрім цього, для формування векторів у середовищі пакета передбачена ще одна можливість – генерування вектора за допомогою команди:
х = х_початкове : крок : х_кінцеве
де х_початкове – перший елемент вектора; крок – різниця між двома сусідніми елементами вектора; х_кінцеве – останній елемент вектора. Значення кроку може бути як додатним так і від'ємним. У випадку, якщо значення кроку дорівнює 1, то команда для генерування вектора набуде вигляду:
х = х_початкове : х_кінцеве
Наприклад,
>> х = 1:5
x = 1 2 3 4 5
>> x = 5:-2:1
x = 5 3 1

Оператор ":" забезпечує легкий доступ до заданих рядків, стовпців чи елементів матриці і означає всі елементи вздовж даної розмірності. Це дозволяє працювати з фрагментами масиву. Перелік різних операцій з матрицями з використанням оператора ":" наведено в Табл. 4.
Таблиця 5
Розглянемо роботу цих операторів на таких прикладах. Нехай задана матриця А :
A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
тоді:
A(:, 2)
ans = 2
6
10
A(:, 2:3)
аns = 2 3
6 7
10 11
A(2:3, :)
ans = 5 6 7 8
9 10 11 12
B = A(1:2, 1:2)
B = 1 2
5 6
y = B(:)
y = 1
5
2
6
x = A(4:10)
x = 2 6 10 3 7 11 4

Перелік базових матричних операцій наведено в таблиці 4.
Таблиця 6
Операція
Визначення операції

А'
транспонування матриці

А?В
додавання (віднімання) матриць

А*В
множення матриць

А/В А\В
праве та ліве ділення матриць

Дії додавання та віднімання матриць виконуються над матрицями однакового розміру. Також є визначеною операція додавання чи віднімання, якщо один з операндів є скаляр. Наприклад,
х = [1 2 3]; y = x-2
y = -1 0 1
Операція множення матриць також визначена у випадку множення матриці на скаляр.
Окремим типом матричних операцій є табличні операції – скалярні операції, визначені на елементах матриці. Табличні операції мають ідентичний запис з матричними операціями, тільки перед знаком операції ставиться символ ".". У випадку додавання (віднімання) матриць матричні та табличні операції є ідентичними. У випадку виконання табличного множення або ділення необхідно, щоб розміри обох матриць були однаковими. Наприклад,
X = [7 8 9]; Y = [2 4 3];
X./Y
ans = 3.5000 2.0000 3.0000
У випадку табличних операцій можливим є порівняння (поелементне) двох матриць. Результат порівняння подається у вигляді матриці, елементами якої є нулі та одиниці, причому одиниця відповідає логічному значенню true, а нуль – false.
Графічне подання інформації
Значною перевагою пакета MatLab є можливість легкого виводу результатів розрахунків у вигляді графіків на екран.
Найпростішою формою подання інформації в графічному вигляді є створення двовимірного графіка. Для побудови таких графіків у середовищі пакета передбачені функції, що наведені в таблиці 7.
Таблиця 7
Команди
Призначення

plot
побудова графіка в декартовій системі координат

loglog
побудова графіка в логарифмічних осях

semilogx
побудова графіка з логарифмічною віссю абсцис

semilogy
побудова графіка з логарифмічною віссю ординат

Активація описаних в табл. 2.7 функцій є подібною до виклику функції plot, яку розглянемо детальніше.
Функція plot має різні форми запису залежно від вхідних аргументів. Якщо y є вектором, plot(y) виконує побудову графіка залежності значення елемента вектора від його порядкового номера. Якщо визначені два вектори як аргументи функції, тоді plot(x,y) будує графік залежності y=f(x). У випадку декількох пар векторів x-y за допомогою команди plot можна на одному графіку вивести декілька залежностей, причому MatLab автоматично виведе залежності різними кольорами, згідно з визначеним за замовчуванням списком кольорів. Структура команди буде такою:
plot(х1, y1, х2, y2, х3, y3).
Для виводу графіків користувач може задавати колір залежності, тип лінії та маркери за допомогою структури команди
plot(x,y,'color_style_marker')
color_style_marker є 1-, 2-, або 3-значна змінна символьного типу, створена зі знаків, що ідентифікують колір, тип лінії та маркер:
допустимим є використання кольорів 'c'-cyan (блакитний), 'm'-magenta (бузковий), 'y'-yellow (жовтий), 'r'-red (червоний), 'g'-green (зелений), 'b'-blue (синій), 'w'-white (білий), 'k'-black (чорний).
знаки стилів лінії є такими: '-' неперервна, '- -' штрихова, ':' пунктирна, '-.' штрих пунктирна, 'none'- не проводити лінії.
знаки найбільш вживаних маркерів '+', 'o', '*' та 'x'.
Функція plot автоматично відкриває нове вікно виводу графіків, якщо до цього воно ще не було відкрите. Якщо вікно виводу графіків вже було відкрите, то функція plot використовує його як задане. Для відкриття нового вікна для виводу необхідно виконати команду
figure
Для задання поточного вікна виводу необхідно набрати команду
figure(n), де n – номер вікна.
Пакет дозволяє здійснювати поділ вікна виводу графіків. Такий поділ з одночасним вибором активного вікна здійснюється за допомогою команди
subplot(vha),
в якій v та h задають відповідно поділ екрана по вертикалі та по горизонталі, а параметр а визначає номер активного вікна.
Використання команди grid дозволяє нанести сітку на графік.
Для опису графіків служать додаткові команди, які дають можливість задати:
назви x-, y-осей, відповідно, - xlabel('Назва осі), ylabel('Назва осі);
назву графіка - title('Назва графіка).
Циклічні оператори та організація розгалужень
Для реалізації циклів в MatLab є два оператора – for та while. Цикл for повторює виконання групи операторів фіксовану кількість разів. Кінець циклу визначає командне слово end. В операторі for змінна-лічильник циклу почергово приймає значення елементів деякого вектору х. Структура циклічного оператора є такою:
for k = x
…оператори;
end
Оператори в тілі циклу будуть виконуватися при значенні змінної к, рівної х(1), потім х(2) і т. д. до х(еnd). При цьому в циклі можна використати послідовний перебір цілочисельних значень лічильника циклу: for k = 1 : N, проте можна використовувати дробове значення кроку for k = -1 : 0.01 : 1.
Другий тип циклів реалізується з допомогою оператора while. Цикл while повторює виконання групи операторів невизначену наперед кількість разів. Кількість повторів визначає значення логічного виразу: тіло циклу виконується, поки умова залишається істиною. Кінець циклу визначає командне слово end. Структура циклічного оператора є такою:
while умова
…оператори;
end
Для дострокового завершення циклу використовується оператор break.
В якості логічних умов в умовних операторах і циклах можуть використовуватись числові скалярні значення. При цьому нульове значення трактується як false, а будь-яке ненульове – як true. Крім того, для формування умов часто використовуються оператори порівняння: (рівне), (не рівне), < (менше), > (більше), <= (менше або рівне), >= (більше або рівне). Для масивів вони проводять поелементне порівняння, вертаючи масив такого ж розміру, як порівнювані аргументи. Результуючий масив містить одиниці там, де умови порівняння виконані, і нулі в решті елементів. Наприклад
>> x = [1 3 5 2 4]
x = 1 3 5 2 4
>> a = x > 3
a = 0 0 1 0 1

Умовний оператор в MatLab реалізується з допомогою ключових слів if, else, elseif, end. Структура умовного оператора в середовищі пакета є такою:
if умова1
оператори1
elseif умова2
оператори2
else
оператори3
end
Оператор if умова1 визначає значення логічного виразу і виконує групу операторів, у випадку, коли результат цього логічного виразу дорівнює true. Команди elseif та else дають змогу реалізувати розгалуження в роботі програми, тобто виконують альтернативні групи операторів. Для завершення розгалуження в алгоритмі використовується команда end.
Структура m-файлів
Файли, що містять написані користувачем програми мовою програмування MatLab, які виконують певні операції, називаються m-файлами. Для створення такого файла використовується текстовий редактор, за допомогою якого формується послідовність функцій та команд MatLab, що будуть виконуватися програмою. Розрізняють два види m-файлів:
Script. У випадку script MatLab просто виконує знайдені у файлі команди. Script оперує над даними робочої області або даними, створеними ним під час роботи. Створені під час роботи змінні залишаються в робочій області і є доступними для подальшої роботи.
Function. Функціональний m-файл має вхідні та вихідні параметри. Запис у такому файлі починається з рядка з такою структурою:
function [вихідні аргументи]= назва функції(вхідні аргументи).
Назва функції повинна відповідати імені файла, в якому ця функція зберігається. Вхідні та вихідні змінні в списках відокремлюються комами. Вхідні та вихідні аргументи та всі змінні, що вживаються в середині функції, мають локальний характер. Вони не мають ніяких зв'язків зі змінними робочої області, навіть за умови їх однакової назви.
Виклик функцій у MatLab є аналогічний до виклику функцій у мовах програмування високого рівня, наприклад result = my_function(a1, a2). Запуск на виконання сценаріїв може здійснюватися з командного рядка головного вікна MatLab. Для цього потрібно набрати назву файлу і натиснути Enter. Інший спосіб запуску – вибравши пункт Debug/Run меню редактора або натиснувши клавішу F5.
ФОРМУВАННЯ DTMF-СИГНАЛІВ
Багато пристроїв телефонного зв’язку, типу програми автонабору номеру, телефонних допоміжних клавіатур і систем захисту потребують формування сигналів DTMF для набору і передачі даних. Телефонна допоміжна клавіатура в стандарті DTMF представляється матрицею, яка складається з 4 рядків і 3 стовпців з загальною кількістю 12 клавіш. Кожний рядок і стовпець представляються своєю частотою, отже, кожна клавіша представляється сумою частот рядка і стовпця наступними чином:
Частота, Гц
1209
1336
1477

697
1
2
3

770
4
5
6

852
7
8
9

941
*
0
#

Наприклад: клавіша ‘1’ представляється одночасно тоном 697 і 1209 Гц.
ЗАВДАННЯ
1. Ознайомитись з теоретичним матеріалом.
2. Написати програму в середовищі MatLab, яка б реалізувала вказаний алгоритм ШПФ, побудувати графіки спектру заданого сигналу без і з накладанням заданого часового вікна. Сигнал представляє собою N вибірок дискретизованого з частотою 8 кГц коду клавіші в стандарті DTFM і зберігається у файлі Lab_1_варіант у змінній Signal. На підставі аналізу спектру визначити код натиснутої клавіші.
Табл. 8.
Варіант
Алгоритм ШПФ
Вікно
Сигнал
Назва файлу

1
Проріджування в часі
Трикутне
N = 256
Lab_1_1.mat

2
Проріджування за частотою
Бартлета
N = 512
Lab_1_2.mat

3
Проріджування в часі
Ханна
N = 1024
Lab_1_3.mat

4
Проріджування за частотою
Хемінга
N = 2048
Lab_1_4.mat

5
Проріджування в часі
Блекмана
N = 256
Lab_1_5.mat

6
Проріджування за частотою
Трикутне
N = 512
Lab_1_6.mat

7
Проріджування в часі
Бартлета
N = 1024
Lab_1_7.mat

8
Проріджування за частотою
Ханна
N = 2048
Lab_1_8.mat

9
Проріджування в часі
Хемінга
N = 256
Lab_1_9.mat

10
Проріджування за частотою
Блекмана
N = 512
Lab_1_10.mat

11
Проріджування в часі
Трикутне
N = 1024
Lab_1_11.mat

12
Проріджування за частотою
Бартлета
N = 2048
Lab_1_12.mat

13
Проріджування в часі
Ханна
N = 256
Lab_1_13.mat

14
Проріджування за частотою
Хемінга
N = 512
Lab_1_14.mat

15
Проріджування в часі
Блекмана
N = 1024
Lab_1_15.mat

16
Проріджування за частотою
Трикутне
N = 2048
Lab_1_16.mat

17
Проріджування в часі
Бартлета
N = 256
Lab_1_17.mat

18
Проріджування за частотою
Ханна
N = 512
Lab_1_18.mat

19
Проріджування в часі
Хемінга
N = 1024
Lab_1_19.mat

20
Проріджування за частотою
Блекмана
N = 2048
Lab_1_20.mat

ЗМІСТ ЗВІТУ
Мета роботи.
Повний текст завдання.
Лістинг програми, код натисненої клавіші, спектри сигналу до і після накладання вікна.
Аналіз результатів досліджень.
Висновки.
КОНТРОЛЬНІ ЗАПИТАННЯ
Яка головна ідея швидких алгоритмів ШПФ і який виграш при цьому досягається ?
Наведіть блок схему алгоритму ШПФ з проріджуванням в часі ?
Наведіть блок схему алгоритму ШПФ з проріджуванням по частоті ?
З чим пов’язане явище розтікання спектру ?
Які ви знаєте вагові функції і для чого вони використовуються ?
СПИСОК ЛІТЕРАТУРИ
1. Шрюфер Э. Обработка сигналов: цифровая обработка дискретизированных сигналов. – К.: Либідь, 1995. – 320 с.
2. Сергиенко А. Б. Цифровая обработка сигналов. – СПб.: Питер, 2002. – 608 с.
3. Лозинський А. О., Мороз В. І., Паранчук Я. С. Розв’язування задач електромеханіки в середовищах пакетів MathCAD і MATLAB: Навчальний посібник. – Львів: Видавництво Національного університету "Львівська політехніка", 2000–166 с.