МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ЗВІТ
до лабораторної роботи №3
з курсу:
«Цифрові методи обробки сигналів і зображень»
на тему:
«ВЕЙВЛЕТ-ОБРОБКА СИГНАЛІВ У СЕРЕДОВИЩІ MATLAB»
Мета роботи – ознайомитися з основними можливостями вейвлет-обробки реалізованими в середовищі MatLab, отримати навики розрахунку дискретного вейвлет-перетворення, декомпозиції сигналу на апроксимуючі і деталізуючи складові, вейвлет-очищення сигналів від шумів в середовищі MatLab.
ЗАВДАННЯ
1. Ознайомитись з теоретичним матеріалом.
2. Скласти програму в середовищі MatLab згідно завдання.
2.1. Провести очищення сигналу від шуму з використанням вейвлет-процедури відповідно до завдання у Табл. 2. Сигнал зберігається у файлі Lab_3_варіант у змінній signal.
Табл. 1.
№
Тип вейвлету
Рівень
розкладу
Поріг
Тип
порогу
Масштабування
Сигнал
1.
Добеші 3-го порядку
3
rigrsure
жорсткий
Тип 1
Lab_3_1.mat
РЕЗУЛЬТАТИ ВИКОНАННЯ РОБОТИ
Лістинг програми:
>> load C:\Lab_3_1;% Завантаження сигналу
>> tn = (0 : length(signal)-1); % вісь часу
>> w_name = 'db3'; % тип вейвлету
>> Lev = 3;% рівень розкладу
>> type = 'rigrsure';% поріг
>> [Lo_D, Hi_D, Lo_R, Hi_R] = wfilters(w_name); % розрах-к фільтрів декомпозиції і реконструкції
>> % розрахунок АЧХ фільтрів
>> [h_D, f] = freqz(Lo_D, 1, 0:0.001:1, 2);
>> h1_D = freqz(Hi_D, 1, 0:0.001:1, 2);
>> [h_R, f] = freqz(Lo_R, 1, 0:0.001:1, 2);
>> h1_R = freqz(Hi_R, 1, 0:0.001:1, 2);
>> figure(1); plot(f, abs(h_D), f, abs(h1_D)); grid on;% графік АЧХ фільтрів декомпозиції
>> figure(2); plot(f, abs(h_R), f, abs(h1_R)); grid on;% графік АЧХ фільтрів реконструкції
>> [C, L] = wavedec(signal, Lev, w_name);% вейвлет-розклад сигналу
>> cA3 = appcoef(C, L, w_name, Lev);% добування коефіцієнтів апроксимації сА3
>> [cD3 cD2 cD1] = detcoef(C, L, [3 2 1]);% добування коефіцієнтів деталізації сD3, cD2, cD1
>> % Побудова графіків коефіцієнтів розкладу
>> figure(3); subplot(411); plot(cA3); grid on; xlim([0 L(1)-1]); ylabel('cA3');
>> subplot(412); plot(cD3); grid on; xlim([0 L(2)-1]); ylabel('cD3');
>> subplot(413); plot(cD2); grid on; xlim([0 L(3)-1]); ylabel('cD2');
>> A3 = wrcoef('a', C, L, w_name, 3); % Обчислення апроксимуючої складової А3
>> D3 = wrcoef('d', C, L, w_name, 3); % Обчислення деталізуючої складової D3
>> D2 = wrcoef('d', C, L, w_name, 2); % Обчислення деталізуючої складової D2
>> D1 = wrcoef('d', C, L, w_name, 1); % Обчислення деталізуючої складової D1
>> L_sig = length(signal);% Розмірність сигналу
>> % Побудова графіків сигналу та його часових складових
>> figure(4); subplot(511); plot(signal); grid on; xlim([0 L_sig-1]); ylabel('S(n)');
>> subplot(512); plot(A3); grid on; xlim([0 L_sig-1]); ylabel('A3');
>> subplot(513); plot(D3); grid on; xlim([0 L_sig-1]); ylabel('D3');
>> subplot(514); plot(D2); grid on; xlim([0 L_sig-1]); ylabel('D2');
>> subplot(515); plot(D1); grid on; xlim([0 L_sig-1]); ylabel('D1');
>> % Оцінка рівня шуму деталізуючих коефіцієнтів
>> stdc = wnoisest(C, L, Lev);
>> % Обчислення порогу для кожного рівня
>> for ii = 1 : Lev;
thr(ii) = thselect(detcoef(C, L, ii)/stdc, type);
thr(ii) = thr(ii) * stdc;
end;
>> % Жорстке порогування коефіцієнтів cD1
>> for ii = 1 : length(cD1)
if (abs(cD1(ii)) < thr(3))
cD1(ii) = 0;
else
cD1(ii) = cD1(ii);
end; end;
>> % Жорстке порогування коефіцієнтів cD2
>> for ii = 1 : length(cD2)
if (abs(cD2(ii)) < thr(2))
cD2(ii) = 0;
else
cD2(ii) = cD2(ii);
end; end;
>> % Жорстке порогування коефіцієнтів cD3
>> for ii = 1 : length(cD3)
if (abs(cD3(ii)) < thr(1))
cD3(ii) = 0;
else
cD3(ii) = cD3(ii);
end; end;
>> % Заміна первинних коефіцієнтів cD обчисленими
>> cD = [cD3 cD2 cD1];
>> C(L(1) + 1 : end) = cD;
>> % Побудова графіків коефіцієнтів після порогування
>> figure(5); subplot(411); plot(0:L(1)-1, cA3); grid on; xlim([0 L(1)-1]); ylabel('cA3');
>> subplot(412); plot(0:L(2)-1, cD3); grid on; xlim([0 L(2)-1]); ylabel('cD3');
>> subplot(413); plot(0:L(3)-1, cD2); grid on; xlim([0 L(3)-1]); ylabel('cD2');
>> subplot(414); plot(0:L(4)-1, cD1); grid on; xlim([0 L(4)-1]); ylabel('cD1');
>> % Обчислення деталізуючих складових після порогування
>> D3 = wrcoef('d', C, L, w_name, 3);
>> D2 = wrcoef('d', C, L, w_name, 2);
>> D1 = wrcoef('d', C, L, w_name, 1);
>> % Побудова графіків сигналу та його часових складових після порогування
>> figure(6); subplot(511); plot(tn, signal); grid on; xlim([0 L_sig-1]); ylabel('S(n)');
>> subplot(512); plot(tn, A3); grid on; xlim([0 L_sig-1]); ylabel('A3');
>> subplot(513); plot(tn, D3); grid on; xlim([0 L_sig-1]); ylabel('D3');
>> subplot(514); plot(tn, D2); grid on; xlim([0 L_sig-1]); ylabel('D2');
>> subplot(515); plot(tn, D1); grid on; xlim([0 L_sig-1]); ylabel('D1');
>> % Обчислення очищенного від шуму сигналу
>> signal_d = waverec(C, L, w_name);
>> % Побудова графіків сигналу до і після очищення
>> figure(7); subplot(211); plot(tn, signal); grid on; xlim([0 L_sig-1]); ylabel('S(n)');
>> subplot(212); plot(tn, signal_d); grid on; xlim([0 L_sig-1]); ylabel('Denoised S(n)');
Графіки до порогування
/
Рис.1 АЧХ фільтрів декомпозиції
/
Рис.2 АЧХ фільтрів реконструкції
/
Рис.3 Коефіціенти розкладу
/
Рис.4 Сигнал та його часові складові
Графіки після жорсткого порогування
/
Рис.5 Коефіціенти розкладу після порогування
/
Рис.6 Сигнал та його часові складові після порогування
/
Рис.7 Сигнал до і після очищення
Висновок: на даній лабораторній роботі я ознайомився з основними можливостями вейвлет-обробки реалізованими в середовищі MatLab, отримав навики розрахунку дискретного вейвлет-перетворення, декомпозиції сигналу на апроксимуючі і деталізуючі складові, вейвлет-очищення сигналів від шумів в середовищі MatLab.