1. Зв'язок ДПФ і спектру дискретного аналізу.
2. Взаємозв'язок ДПФ і фільтрації.
3. Дискретна фільтрація за допомогою ДПФ.
11.1. Короткі теоретичні відомості та методичні вказівки
При дискретизації аналогового сигналу його спектр стає періодичним з періодом повторення, рівним частоті дискретизації. Проте одного тільки цього співвідношення виявляється недостатньо для вирішення всіх практичних задач спектрального аналізу. По-перше, в якості вихідних даних виступає саме послідовність дискретних відліків, а не аналоговий сигнал. По-друге, в більшості випадків аналізовані сигнали є випадковими процесами, що вимагає виконання будь-якого усереднення при розрахунку їх спектрів. Крім того, в ряді випадків нам відома деяка додаткова інформація про аналізованому сигналі, і цю інформацію бажано врахувати в спектральному аналізі.
Перш за все розглянемо дискретне перетворення Фур'є (ДПФ) - різновид перетворення Фур'є, спеціально призначену для роботи з дискретними сигналами. Далі обговоримо ідеї, що лежать в основі алгоритмів швидкого перетворення Фур'є, що дозволяють значно прискорити обчислення.
Дискретне перетворення Фур'є, по можливості обчислюване швидкими методами, лежить в основі різних технологій спектрального аналізу, призначених для дослідження випадкових процесів. Справа в тому, що якщо аналізований сигнал являє собою випадковий процес, то просте обчислення його ДПФ зазвичай не представляє великого інтересу, тому що в результаті виходить лише спектр єдиною реалізації процесу. Тому для спектрального аналізу випадкових сигналів необхідно використовувати усереднення спектру. Такі методи, в яких використовується лише інформація, що витягує з самого вхідного сигналу, називаються непараметрическими (nonparametric).
Інший клас методів припускає наявність деякої статистичної моделі випадкового сигналу. Процес спектрального аналізу в даному випадку включає в себе визначення параметрів цієї моделі, і тому такі методи називаються параметричними (parametric). Використовується також термін «модельний спектральний аналіз » (Model-Based Spectrum Analysis, MBSA).
11.2. Зв'язок ДПФ і спектру дискретного аналізу
Маючи один і той же кінцевий набір чисел, можна розрахувати або спектральну функцію цього дискретного сигналу
,(11.1)
або його ДПФ
(11.2)
Виникає питання як пов'язані один з одним ці два спектральних уявлення, отримані на основі одних і тих же відліків сигналу.
Порівняння формул (11.1) і (11.2) показує, що ДПФ є просто дискретні відліки спектральної функції дискретного сигналу, відповідні частотам wn = wдn/N:
(11.3)
Тому значення ДПФ іноді називають спектральними відліками. Зі співвідношення (11.3) випливає ще один важливий висновок: якщо додати до кінцевого набору відліків деяку кількість нулів, спектральна функція дискретного сигналу не зміниться, але ДПФ дасть більше число спектральних відліків, відповідних частотам, більш тісно розташованим в інтервалі від нуля до частоти дискретизації. Пояснимо сказане на простому прикладі, обчисливши ДПФ для відліків прямокутного імпульсу при різній кількості кінцевих нулів:
function Example11_1
x1=[ones(8,1); zeros(8,1)]; % 16 відліків
y1=fft(x1); % ДПФ сигналу х1
x2=[x1; zeros(16,1)]; % додаємо 16 нулів
y2=fft(x2); % ДПФ сигналу х2
subplot(2, 2, 1)
stem(0:15, x1) % графік сигналу х1
xlim([0 31])
subplot(2, 2, 2)
stem((0:15)/16, abs(y1)) % модуль ДПФ сигналу х1
subplot(2, 2, 3)
stem(0:31, x2) % графік сигналу х2
xlim([0 31])
subplot(2, 2, 4)
stem((0:31)/32, abs(y2)) % модуль ДПФ сигнала х2
На екрані показано підвищення спектрального дозволу ДПФ при доповненні сигналу нулями. Горизонтальні осі на спектральних графіках переписани в частках частоти дискретизації. Після збільшення довжини сигналу вдвічі за рахунок додавання нульових відліків результат ДПФ став містити вдвічі більше значень, що відповідають в два рази частіше розташованим частотах. Таким чином, доповнення сигналу нулями дозволяє підвищити спектральний дозвіл при обчисленні ДПФ.
11.3. Взаємозв'язок ДПФ і фільтрації
Розглянувши принципи дискретної фільтрації і познайомившись з дискретним перетворенням Фур'є, можна помітити, що формули, що описують ці два процеси, дуже схожі - в обох випадках вони представляють собою лінійну комбінацію відліків вхідного сигналу. Це говорить про те, що ДПФ можна трактувати як обробку сигналу фільтром з відповідною імпульсною характеристикою. імпульсну характеристику можна одержати, якщо зауважити, що ej2pn = 1 при целочисленном n, і з урахуванням цього перетворити формулу ДПФ (11.2) у вигляді
Для показу графіка АЧХ одного з каналів ДПФ при N = 8 потрібно виконати наступний набір команд:
function Example11_2
N=8;
w=0:0.1:N;
plot(w, abs(diric((w-3)/N*2*pi, N)))
hold on
plot(w, abs(diric((w-4)/N*2*pi, N)), '--')
hold off %
На екрані градуювання частотної осі виконана в номерах каналів. Пунктирною лінією зображено АЧХ сусіднього частотного каналу.
11.4. Дискретна фільтрація за допомогою ДПФ
Спочатку ставимо вхідні послідовності
>> x1=[1 2 4 8];
>> x2=[2 3 4 5];
Далі обчислюємо лінійну та кругову згортки (рис. 11.1 і 11.2), щоб потім було з чим порівняти результати фільтрації за допомогою ДПФ
>> y=conv(x1,x2)
y =
2 7 18 41 50 52 40
Реалізуємо розглянутий алгоритм за допомогою функцій fft і ifft:
□ у = fft(x) - обчислює пряме ДПФ для вектора х; якщо х - матриця, перетворення виробляється для кожного її стовпця окремо;
□ у = fft(x, N) — попередньо призводить вихідні дані до розміру N, обрізуючи їх або доповнюючи нулями;
□ х = ifft(y) і х = ifft(y, N) — аналогічні варіанти виклику для функції зворотного ДПФ.
Функції fft і ifft входять в базову бібліотеку MATLAB. Обчислення організовані так, що реалізується максимально можливе для кожної довжини вихідного вектора прискорення обчислень: довжина вектора (число рядків в матриці) x розкладається на прості множники, число цих множників відповідає кількості ступенів ШПФ, а самі множники визначають коефіцієнти проріджування на різних щаблях ШПФ.
function Example11_3
x1=[1 2 4 8];
x2=[2 3 4 5];
y=conv(x1,x2)
X1=fft(x1, 8);
X2=fft(x2, 8);
Y=X1.*X2;
y_fft=ifft(Y)
y =
2 7 18 41 50 52 40
y_fft =
2.0000 7.0000 18.0000 41.0000 50.0000 52.0000 40.0000 0
Недоліком описаного методу фільтрації є те, що вхідний сигнал обробляється відразу цілком, тобто розрахунки можна почати тільки після закінчення вхідного сигналу. Однак на практиці в більшості випадків необхідно обробляти відліки вхідного сигналу в міру їх надходження.
Можливим рішенням проблеми є блокова, або секційна, обробка вхідного сигналу. При цьому послідовність вхідних відліків ділиться на блоки (секції) заданого розміру і ці блоки піддаються фільтрації в частотній області окремо. При виборі розміру блоку необхідно реалізувати компроміс між числом операцій (чим більше розмір блоку, тим ефективніше використання алгоритму ШПФ) і затримкою отримання вихідного сигналу (чим менше розмір блоку, тим менше ця затримка).
При використанні блочної фільтрації необхідно розібратися в ідеї об'єднання вихідних сигналів, отриманих при обробці окремих блоків. Розглянемо її на конкретному прикладі. Нехай вхідний сигнал х і імпульсна характеристика фільтра h мають такий вигляд:
>>h=[1 4 2];
>>x=[1 2 3 4 5 4 3 3 2 2 1 1];
Перш за все вираховується лінійна згортка
>>y=conv(x,h)
y =
1 6 13 20 27 32 29 23 20 16 13 9 6 2
Далі розбиваємо вхідний сигнал на два блоки по 6 відліків і обробляємо їх окремо:
>>x1=x(1:6);
>>x2=x(7:end);
>>y1=conv(x1,h)
y1 =
1 6 13 20 27 32 26 8
>>y2=conv(x2,h)
y2 =
3 15 20 16 13 9 6 2
Аналізуючи отримані результати, ми помітимо, що перші шість відліків вектора yl збігаються з першими шістьма елементами повного вихідного сигналу у. Останні шість відліків вектора у2, у свою чергу, збігаються з шістьма останніми елементами повного вихідного сигналу у. Два «середніх» елемента (7-й і 8-й) вектора у можуть бути отримані підсумовуванням двох останніх елементів вектора yl з двома першими елементами вектора у2.
>>y_add=[y1(1:6) y1(7:8)+y2(1:2) y2(3:end)]
y =
1 6 13 20 27 32 29 23 20 16 13 9 6 2
Результат збігається з отриманим раніше. Отже, в загальному випадку фільтрація організується так.
1. Вхідний сигнал розбивається на блоки довжиною N відліків.
2. Кожен блок фільтрується незалежно. Довжина вихідного сигналу становить N + М - 1 відліків, де М - довжина імпульсної характеристики фільтра. Для підвищення ефективності фільтрація здійснюється в частотній області з використанням ШПФ.
3. Блоки вихідного сигналу об'єднуються, при цьому їх крайні М - 1 відліків перекриваються і сумуються.
Даний алгоритм називається методом перекриття з підсумовуванням (overlap-add). Інший можливий варіант - перекриття з накопиченням (overlap-save). При цьому вхідний сигнал розбивається на блоки, що перекриваються по краях на М - 1 відліків, а у вихідного сигналу для кожного блоку відкидаються крайні «хвости» з М - 1 відліків з кожного боку. Після цього вихідні блоки поєднуються без перекриття.
function Example11_4
h=[1 4 2];
x=[1 2 3 4 5 4 3 3 2 2 1 1];
y=conv(x,h)
x1=x(1:6);
x2=x(7:end);
y1=conv(x1,h)
y2=conv(x2,h)
y_add=[y1(1:6) y1(7:8)+y2(1:2) y2(3:end)]
y =
1 6 13 20 27 32 29 23 20 16 13 9 6 2
y1 =
1 6 13 20 27 32 26 8
y2 =
3 15 20 16 13 9 6 2
y_add =
1 6 13 20 27 32 29 23 20 16 13 9 6 2
Питання для самоперевірки
1. Який зв'язок ДПФ і спектру дискретного аналізу?
2. Яка взаємозв'язок ДПФ і фільтрації?
3. Як виконується дискретна фільтрація за допомогою ДПФ?