МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА
Кафедра Захист інформації
З В І Т
До лабораторної роботи №2
з курсу:
„ Системи запису та відтворення інформації ”
на тему:
„ ДОСЛІДЖЕННЯ МЕТОДІВ КОМПРЕСІЇ АУДІОІНФОРМАЦІЇ В MATLAB ”
Варіант-23
Львів – 2011
Мета роботи : набути вміння розробляти власні методи стиснення аудіоінформації та оцінювати їх ефективність.
Завдання:
1. Ознайомитись з теоретичним матеріалом.
2. Завантажити wav-файл вказаний в завданні відповідно до свого варіанту.
3. Вивести основну інформацію про файл : кількість вибірок, кількість каналів, частота дискретизації, кількість біт на вибірку. Прослухати аудіофайл.
4. Оцінити степінь стиснення звукового файлу кодом Хафмена.
5. Побудувати гістограму аудіофайлу.
6. Написати кодер, на базі ДКП, який би компресував мовний сигнал з заданим степенем стиску.
7. Написати декодер, який відтворює мовний сигнал.
8. Прослухати декодований мовний сигнал та зробити висновки про якість відтвореного сигналу.
Варіант – 23
Розмір блоку – 350, степінь стиску– 11 .
Лістинг програми:
[y,Fs,bits]=wavread('C:\Users\Адмін\Desktop\нулп\Системи запису і відтворення інформації\Аудіосигнали\Lab_1_3.wav');
Fs
bits
wavplay(y,Fs,'sync');
[Y, F, B] = wavread('C:\Users\Адмін\Desktop\нулп\Системи запису і відтворення інформації\Аудіосигнали\Lab_1_3.wav');
hist(Y*128, -128:127);
P=hist(Y*128, -128:127) / length(Y);
Nopt = 0;
for ii=1:256
if(P(ii) > 0)
Nopt = Nopt - P(ii)*log2(P(ii));
end;
end;
Y = Y * 128; % Y -- дробове; треба, щоб було ціле (Y*128)
N = 350; % розмір блоку
L = 131; % к-сть збережених коефіцієнтів ДКП на блок
nn = fix(length(Y)/N); % к-сть блоків
mm = 1;
kk = 1;
% Компресія
for ii = 1 : nn-1
x = dct( Y(kk : kk + N-1) );
y(mm : mm + L-1) = x(1 : L); % В y записуємо лише "великі" відліки
mm = mm + L;
kk = kk + N;
end;
% Квантування
y = round(y); % До цілого
[A, X] = hist(y, min(y) : max(y));
NN = length(y);
Ls = 0;
for ii = 1 : length(A)
if(A(ii) > 0)
Ls = Ls + (A(ii)/NN) * log2(A(ii)/NN);
end;
end;
disp('-Ls = ');
-Ls
CR2 = (10 / -Ls) * (N / L) % CR2 -- cтепінь стиснення
% Відновлений сигнал
YC = Y * 0;
dx = Y(1 : N) * 0;
mm = 1;
kk = 1;
% ...*0 -- це "малі" відліки
for ii = 1 : nn - 1
dx(1 : L) = y(mm : mm + L-1);
x1 = idct( dx );
YC(kk : kk + N-1) = x1;
dx = dx * 0;
mm = mm + L;
kk = kk + N;
end;
YC = YC / 128;
YC = round(YC * 128) / 128;
wavplay(YC, F, 'sync');
Результати програми
/
Графік гістограми сигналу
Степінь стиснення кодом Хафмена:
ans = 2.4153
Степінь стиснення ДКП:
CR2 = 11.0619
Висновок:
Виконуючи дану лабораторну роботу, я навчився розробляти власні методи стиснення аудіоінформації за допомогою алгоритмів стиснення аудіосигналів на основі ортогональних перетворень, а також оцінив їх ефективність, та ефективність алгоритмів стиснення без втрат, а саме коду Хафмена.
В методах стиснення без втрат первинний сигнал можна відновити з точністю до біту, тоді як в методах компресії з втратами відновлений сигнал не повністю відповідає первинному, але містить основну частину інформації.
В алгоритмах компресії аудіосигналів на основі ортогональних перетворень стиснення досягається за рахунок того, що кодуються тільки ті коефіцієнти,які переносять суттєву інформацію, решта відкидаються.
Ми побачили, що за допомогою цих алгоритмів можна досягнути значного стиснення, і на практиці досягнули степеня компресії рівного 11.0619,тоді як код Хафмена дає стиснення для цього ж сигналу лише 2.4153.
Оскільки степінь стиснення 11.0619 є досить великим, то якість відтвореного сигналу не надто висока, проте основна мовна інформація збереглася, що в деяких випадках і є основним (степінь стиску), а не якість звучання аудіосигналу.