Порядок виконання роботи

1. Відтворити програму яка демонструє роботу прямого та зворотного ШПФ.

2. Вивчити функції необхідні для виведення на екран графіків сигналів.

2.1. Короткі теоретичні відомості та методичні вказівки

Аналізом Фур'є називають сімейство математичних методів заснованих на розкладанні сигналів по синусоїдам. Дискретне Перетворення Фур'є (ДПФ) є членом сімейства, які використовуються з цифровими сигналами. ДПФ бувають речовими і комплексними.

Загальний термін Перетворення Фур'є може бути розбитий на 4 категорії, які утворюються від 4 типів сигналів. Сигнал може бути або безперервним або дискретним і він може бути або періодичним або аперіодичним.

Аперіодично-безперервна категорія включає, наприклад, загасаючу експоненту та криву Гаусса. Ці сигнали простягаються в позитивну та негативну нескінченність без повторення періодичного образу. Перетворення Фур'є цього типу сигналу називається просто перетворенням Фур'є.

Періодично-безперервна категорія включає: синусоїдальні хвилі, квадратні хвилі та будь-які коливання, які повторюються регулярно від негативної до позитивної нескінченності. Ця версія перетворення Фур'є називається рядом Фур'є.

Аперіодично-дискретна категорія визначена тільки для дискретних точок від негативної до позитивної нескінченності і не повторює себе періодично. Ця категорія названа перетворенням Фур'є дискретного часу.

Періодично-дискретна категорія визначена для дискретних сигналів повторюваних регулярно від негативної до позитивної нескінченності. Цей клас перетворення Фур'є називають Дискретне перетворення Фур'є (ДПФ).

Синусні та косинусні хвилі простягаються від негативної до позитивної нескінченності. Використовувати групу нескінченно довгих сигналів для синтезу чого-небудь кінцевого не можна.Щоб обійти цю дилему, потрібно зробити кінцеві дані схожими на нескінченний сигнал. Це робиться шляхом подання того, що сигнал має нескінченне число відліків ліворуч і праворуч від фактичного сигналу. Якщо всі ці "уявні" відліки дорівнюють нулю, то сигнал виглядає як дискретний і аперіодичний, і використовується перетворення Фур'є дискретного часу. В якості альтернативи можна уявити, що уявні відліки можуть бути повторенням фактичних точок. У цьому випадку, сигнал виглядає дискретним і періодичним. Цедозволяє використовувати ДПФ.

Розглянемо наведену нижче програму:

function MyDFFT

Fs = 1000; % Sampling frequency

T = 1/Fs; % Sample time

L = 1000; % Length of signal

t = (0:L-1)*T; % Time vector

% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid

x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);

y = x + 2*randn(size(t)); % Sinusoids plus noise

plot(Fs*t(1:50),y(1:50));

title('Signal Corrupted with Zero-Mean Random Noise')

xlabel('time (milliseconds)')

grid on

pause;

NFFT = 2^nextpow2(L); % Next power of 2 from length of y

tic;

Y = fft(y,NFFT)/L;

toc

f = Fs/2*linspace(0,1,NFFT/2);

% Plot single-sided amplitude spectrum.

plot(f,2*abs(Y(1:NFFT/2)))

title('Single-Sided Amplitude Spectrum of y(t)')

xlabel('Frequency (Hz)')

ylabel('|Y(f)|')

grid on

pause;

newy = ifft(Y,NFFT)*L;

plot(Fs*t(1:50),y(1:50))

hold on

plot(Fs*t(1:50),newy(1:50),'r--')

title('Signal Corrupted with Zero-Mean Random Noise')

xlabel('time (milliseconds)')

grid on

hold off

1. function MyDFFT – функція ШПФ.

2. Fs = 1000; -- частота дискретизации равна 1000 Гц.

3. T = 1/Fs; -- час дискретизації 1 мілісекунда (с*10-3).

4. L = 1000; -- к-сть точок сигналу рівне 1000.

5. t = (0:L-1)*T; -- Time vector для кожної точки сигналу.

Розглянемо роботу цієї команди докладніше:

>> A=1:2:10

A =

1 3 5 7 9

З прикладу видно, що ця форма запису використовується для завдання даних в діапазоні з потрібним кроком. Тут діапазон (1,10), а крок = 2. Якщо крок = 1 то масив задається простіше:

>> B=1:10

B =

1 2 3 4 5 6 7 8 9 10

6. x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); -- тут виходить сигнал рівний сумі двох синусоїд з частотами 50 і 120 Гц.

Зверніть увагу – в дану команду підставляється відразу весь масив, який містить час для кожної точки сигналу. Крім того тут представлена одна з констант мови pi:

>> pi

ans =

3.1416 pi

Інші важливі константи мови i =, або j=.

7. y = x + 2*randn(size(t)); -- додавання шуму до основного сигналу.

8. plot(Fs*t(1:50),y(1:50)); - роздруківка перших 50-ти точок сигналу.

9. title('Signal Corrupted with Zero-Mean Random Noise') – заголовок.

10. xlabel('time (milliseconds)') – підпис до осі x.

11. grid on – завдання сітки.

12. pause; – пауза до натискання на будь-яку клавішу.

13. NFFT = 2^nextpow2(L);- розмірність ШПФ-перетворення.

14. tic;- функція включає таймер.

15. Y = fft(y,NFFT)/L;- ШПФ-перетворення.

16. toc – функція вимикає таймер.

17. f = Fs/2*linspace(0,1,NFFT/2); - створення масиву частот.

18. plot(f,2*abs(Y(1:NFFT/2))) – математика не дозволяє будувати графіки уявних чисел тому ви побачите тільки амплітудно-частотну характеристику сигналу.

19. title('Single-Sided Amplitude Spectrum of y(t)') - заголовок.

20. xlabel('Frequency (Hz)') – підпис до осі x.

21. ylabel('|Y(f)|') -- підпис до осі y.

22. grid on – завдання сітки.

23. pause; – пауза до натискання на будь-яку клавішу.

24. newy = ifft(Y,NFFT)*L; - зворотне ШПФ-перетворення.

25. plot(Fs*t(1:50),y(1:50)) - роздруківка перших 50-ти точок сигналу.

26. hold on – дозвіл додавати до поточного графіку нові.

27. plot(Fs*t(1:50),newy(1:50),'r--') - роздруківка перших 50-ти точок сигналу, 'r--' означає, що лінія буде червона та штрихова.

28. title('Signal Corrupted with Zero-Mean Random Noise') - заголовок

29. xlabel('time (milliseconds)') - підпис до осі x.

30. grid on – завдання сітки.

31. hold off – скасування команди hold on.

Червоним штрихом виділений сигнал отриманий після ШПФ, синім суцільним – вихідний сигнал.

Питання для самоперевірки

1. Що таке Перетворення Фур'є та які його категорії?

2. Що таке константи мови MATLAB pi, i, j?

3. Які функції потрібні для показу на екрані графіків сигналів?