You are on page 1of 10

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
«ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут ІКНІ
Кафедра автоматизовані системи управління

ЛАБОРАТОРНА РОБОТА №2
З курсу «Основи цифрової обробки сигналів»
«Перетворення Фур’є і його застосування у ЦОС»

Виконав:
Кочут Максим
гр. КН-403

Прийняв:
Опотяк Ю.В.

Львів-2022
Лабораторна робота №2
Перетворення Фур’є і його застосування у ЦОС
Мета: ознайомитись з генерацією і обробкою сигналів у частотній
області з використанням пакету MATLAB; навчитись генерувати сигнали,
створювати їх графіки; відпрацювати принципи використання прямого і
зворотного перетворення Фур’є у пакеті MATLAB на рівні, достатньому для
практичного використання; провести моделювання і проаналізувати результати
виконання у пакеті MATLAB.

Теоретичні відомості
MATLAB – пакет прикладних програм символьної математики, статистики,
оптимізації, аналізу і синтезу та обробки сигналів, зображень тощо. Для виконання
лабораторних можна використовувати безкоштовну он-лайн версію пакету від розробника
MathWorks, яка знаходиться за посиланням https://matlab.mathworks.com/. Перед
використанням достатньо зареєструватися, використовуючи адресу власної електронної
пошти.
Спектральний аналіз – це один із методів обробки сигналів, який дозволяє оцінити
частотний склад сигналу.
Математичною основою спектрального аналізу є ряд Фур’є та перетворення Фур’є,
що пов’язують відображення сигналу в часовій та частотній області.
Будь-який дійсний, безперервний, періодичний сигнал, заданий на інтервалі можна
подати рядом Фур’є.

Інформація про процеси і сигнали може передаватися функціями часу x(t )  або
частотним спектром  X ( f ) . Зв'язок між  X ( f )  і  x(t )  визначається перетворенням Фур'є

X(f )=∫−∞ x(t) e − j2π ft
dt (1)

де  x(t ) – деякий безперервний сигнал у часовій області.

Вираз (1) дозволяє визначити частотний склад практично будь-якого сигналу  x(t ) ,
використовуваного на практиці, і відкриває широкі можливості для аналізу сигналів та ЦОС.
З появою цифрової техніки, широке поширення набуло дискретне перетворення Фур'є

(ДПФ), що дозволяє визначати дискретну послідовність  X (m)  (дискретний спектр) в


частотній області.
N −1
X (m)= ∑ x(n) e
− j 2 π nm/ N

n=0 .  (2)
Існує і зворотне перетворення Фур'є. Перехід від дискретного спектру до часових
відліків описується наступною формулою:
N−1
1
x(n)=
N
∑ X (n) e
j 2 π nm/N

  n=0 .  (3)
Вираз (3) визначає зворотне дискретне перетворення Фур'є (ЗДПФ) і відрізняється від
виразу (2) (ДПФ) лише знаком у показнику комплексної експоненти і наявністю множника 
1/N . У розміщенні множника  1/N  немає повної єдності. У більшості джерел (у тому числі і
в пакеті MatLab) множник фігурує у формулі ЗДПФ. Водночас є роботи, в яких цей множник
стоїть у формулі прямого ДПФ. Існують пакети програм, в яких використовується множник 
1/ √ N , який стоїть перед визначеннями підсумовування у формі прямого і зворотного
ДПФ.
Рівняння (2) – це основний запис ДПФ в технічній літературі. Однак для реалізації
ДПФ, особливо на початковому етапі, доцільно перейти до тригонометричної форми ДПФ
N −1
X (m)= ∑ x (n)[cos (2 π nm/N − j sin 2 π nm/ N ).
n=0  (4)
Перехід від (2) до (4) здійснено на підставі тотожності Ейлера

e− jφ =cos φ− jsin φ
.
Вираз (4) дозволяє комплексну експоненту у (2) представити у вигляді дійсної та
уявної частини, де:

  X (m) –  m -й компонент ДПФ, тобто  X (0)  ,  X (1)  ,  X (2)  і т.д.
  m – індекс ДПФ в частотній області,  m  = 0,1,2,3,4 ...., N-1.

  x(n) – послідовність вхідних відліків  x(0) ,  x(1) ,  x(2) ,  x(3)  і т.д.


  n – часовий індекс вхідних відліків, n  = 0,1,2,3, ...,   n -1.
  N – визначає і кількість відліків вхідної послідовності, і кількість частотних відліків

результату ДПФ  (n=m) .


Спектр періодичної функції має вигляд, показаний на рис. 1. Це дискретний спектр,
який називається, також, лінійчатим, або гармонічним. Це означає, що він складається з
рівновіддалених (еквідистантних) спектральних ліній; частоти гармонік знаходяться у
простих кратних співвідношеннях.

Рисунок 1 – Спектр періодичної функції

Обробка сигналів у частотній області надзвичайно широко використовується у


системах ЦОС.

Спочатку розглянемо синтез і спектральний аналіз сигналів за допомогою


пакету MatLab.
Пакет MatLab дозволяє створювати різноманітні сигнали використовуючи ряд базових
функцій.
Очевидно, одними з найпростіших є базові функції sin або cos.
Індивідувальне завдання
Завдання 1
Згенерувати тестовий сигнал відповідно до заданих у табл. 1 параметрів.
У звіті навести текст скрипту MatLab та скріншоти отриманих графіків, а саме:
вхідного сигналу та його спектру.
№ F1, A1, Ph1 F2, A2, Ph2 Функція Fs N Амплітуда шуму
9 400, 0.3, 270 2300, 0.1, 90 sin 4000 200 0.4

Завдання 2
Виконати фільтрацію сигналу з Завдання 1 у частотній області з використанням
перетворень Фур’є. Рівень шуму наведено у табл.1.

Завдання 3
Згенерувати сигнал типу меандр з параметрами варіантів у табл. 2. Виконати його
перетворення у частотну область. В отриманому спектрі відкинути усі гармоніки, вище
заданих у табл. 2. Здійснити перетворення у часову область. Пояснити отримані результати.
У звіті навести текст скрипту MatLab та скріншоти отриманих графіків, а саме: вхідного
сигналу, його спектру, спектру сигналу після відкидання гармонік, вихідного сигналу після
обробки.
Частота, Амплітуда, Кількість Кількість
Частота дискретизації,
№ Початкова фаза відліків, гармонік,
Fs
F1, A1, Ph1 N G
9 400, 0.3, 0 4000 200 4
Виконання завдання
Завдання 1-2

Рис 1. Графіки завдання 1

Рис 2. Графіки завдання 2


Код завдань 1-2
% Параметри з індивідуального завдання
F1 = 400; F2 = 2300;
A1 = 0.3; A2 = 0.1;
Ph1 = 270; Ph2 = 90;

Fs = 4000; N = 200; noise_amp = 0.4;

t = (0:N-1)/Fs;
signal = (A1*sin(F1*t+Ph1))+(A2*sin(F2*t+Ph2));
freq=(0:N/2-1)*Fs/N;

% ------ Завдання 1 -------

figure("Name", "Завдання 1 (Графіки створив студент групи Кочут Максим (гр.КН-403)");


subplot(2, 1, 1); plot(t, signal);
grid on; title("Вхідний сигнал"); xlabel('Час'); ylabel('Амплітуда');

% Spectrum
spectrum = fft(signal, N); spectrum_norm = getSpectrum(signal, N);

subplot(2, 1, 2);
bar(freq,abs(spectrum_norm(1:N/2)));
title('Спектр вхідного сигналу'); xlabel('Частота'); ylabel('Амплітуда');

% ------ Завдання 2 -------

noise = noise_amp * randn(size(t));


signal_noise = signal + noise;

figure("Name", "Завдання 2 (Графіки створив студент групи Кочут Максим (гр.КН-403)");


subplot(2, 2, 1); plot(t, signal_noise);
grid on; title("Зашумлений сигнал"); xlabel("Час"); ylabel("Амплітуда");

spectrum_noise = getSpectrum(signal_noise, N);


subplot(2, 2, 3); bar(freq,abs(spectrum_noise(1:N/2)));
grid on; title("Спектр зашумленого сигналу"); xlabel("Частота"); ylabel("Амплітуда");

% -- Фільтрація --
filter = 1000; lim = filter*N/Fs;

filtered_spectrum = spectrum;
for i=lim:N/2
filtered_spectrum(i)=0;
filtered_spectrum(N-i)=0;
end

% Спектр відфільтрованого сигналу


subplot(2, 2, 4);
bar(freq,abs(filtered_spectrum(1:N/2)));
grid on;
title("Спектр зашумленого сигналу після фільтрації");
xlabel("Частота"); ylabel("Амплітуда");

% Нормалізація
for i=1:N
spectrum_norm(i)=2*filtered_spectrum(i)/N;
end
spectrum_norm(1)=spectrum_norm(1)/2;

sf2 = ifft(spectrum_norm);
subplot(2, 2, 2); plot(t, sf2(:, 1));
grid on; title("Сигнал після фільтрації"); xlabel("Час"); ylabel("Амплітуда");
Завдання 3

Рис 3. Графіки завдання 3


Як видно з рис. 3, після фільтрації зі спектру усіх гармонік, вище четвертої –
графік сигналу набув вигляду графіку сигналу типу маендр з чотирьма
гармоніками, отже, фільтрацію було здійснено правильно і результат відповідає
очікуваному.
Код завдання 3
F1 = 400; A1 = 0.3;
Fs = 4000; N = 200;
G = 4;

t = (0:N-1)/Fs;
freq=(0:N/2-1)*Fs/N;

% Генерація сигналу типу меандр


meandr = A1*square(F1*t);
% Спектр сигналу
spectrum = getSpectrum(meandr, N);

% Створення графіків
figure("Name", "Завдання 3 (Графіки створив студент групи Кочут Максим (гр.КН-403)");
subplot(4,1,1);
plot(t, meandr);
grid on; title("Згенерований сигнал типу маендр"); xlabel("Час"); ylabel("Амплітуда");

subplot(4,1,2);
bar(freq,abs(spectrum(1:N/2)));
grid on; title("Спектр згенерованого сигналу"); xlabel("Частота"); ylabel("Амплітуда");

% Фільтрація усіх гармонік, вище четвертої


filtering_harm = (G*((F1*A1)/(Fs/N)))+1;
filtered_spectrum = spectrum;

for i=filtering_harm:N
filtered_spectrum(i)=0;
end

% Відфільтрований спектр
subplot(4,1,3);
bar(freq,abs(filtered_spectrum(1:N/2)));
grid on; title("Спектр сигналу після фільтрації гармонік"); xlabel("Частота");
ylabel("Амплітуда");

spectrum_norm = spectrum;

% Нормалізація
for i=1:N
spectrum_norm(i)=2*filtered_spectrum(i)/N;
end
spectrum_norm(1)=spectrum_norm(1)/2;

sf2 = ifft(spectrum_norm);

subplot(4, 1, 4);
plot(t, sf2(:, 1));
grid on; title("Згенерований сигнал після фільтрації гармонік"); xlabel("Час");
ylabel("Амплітуда");

Висновок: виконавши цю лабораторну роботу, я ознайомився з базовою


генерацією сигналів та їх обробкою з використанням пакету MATLAB.
Навчився генерувати сигнали та виводити їх на графіки. Вивчив принципи
використання прямого і зворотнього перетворення Фур’є. Застосував отримані
знання на практиці.

You might also like