- •Лабораторна робота № 4
- •4. Зробити загальні висновки по роботі, порівнявши між собою моделювання в середовищі Matlab і моделювання в середовищі Simulink
- •Квантування та його моделювання в середовищах Matlab-Simulink
- •1. Теоретичні відомості
- •2. Моделювання квантування
- •Додатковий розділ
- •2.3. Квантування реальних сигналів в Matlab і Simulink
- •Xlabel('Час, с','FontSize', 14, 'FontName', 'ms Sans Serif');grid on;
- •Xlabel('Час, с','FontSize', 14, 'FontName', 'ms Sans Serif');grid on;
- •Xlabel('Час, с','FontSize', 14, 'FontName', 'ms Sans Serif');grid on;
Додатковий розділ
2.3. Квантування реальних сигналів в Matlab і Simulink
Програма лінійного квантування реальних сигналів (в даному випадку–цесигналvorona.wav)має наступний вигляд:
% lin_quant.m - програма лінійного квантування
[y,Fs,bits]=wavread('vorona.wav'); % читання сигналу (Fs – ч-та дискретизації; bits - к-сть біт)
ymax = max(abs(y)); y = y/ymax; % нормалізація сигналу
T = length(y)/Fs; disp('тривалість сигналу T = '); disp(T); % тривалість сигналу в секундах
t = 1/Fs:1/Fs:length(y)/Fs; figure; plot(t,y);
title(['Вхідний сигнал, ' num2str(bits) ' біт, ' num2str(Fs) ' Гц'],'FontSize', 14, 'FontName', 'MS Sans Serif');
Xlabel('Час, с','FontSize', 14, 'FontName', 'ms Sans Serif');grid on;
wavplay(y,Fs); pause;
b = 8; % нові к-сть біт
L = 2^b; % нові к-сть рівнів
q = 2/(L-1); % квант рівня
partition = -1+q/2:q:1-q/2;
codebook = -1:q:1;
[ind, ylinq, D] = quantiz(y, partition, codebook);
figure; plot(t,ylinq);
title(['Рез-тат лін. квантування, ' num2str(b) ' бит, ' num2str(Fs) ' Гц'],'FontSize', 14, 'FontName', 'MS Sans Serif');
Xlabel('Час, с','FontSize', 14, 'FontName', 'ms Sans Serif');grid on;
wavplay(ylinq,Fs);
Результат лінійного 4-бітного квантування реального сигналупоказанона рис. 16.
Рис. 16. Результат лінійного 4-бітного квантування реального сигналу
На графікурис. 16чітковидно,що малірівнімовного сигналусуттєвоспотворені.
Програма нелінійного квантування реальних сигналів по А-законумає наступний вигляд:
% nonlin_quant.m - програма лінійного квантування
[y,Fs,bits]=wavread('vorona.wav'); % читання сигналу (Fs – ч-та дискретизації; bits - к-сть біт)
ymax = max(abs(y)); y = y/ymax; % нормалізація сигналу
T = length(y)/Fs; disp('тривалість сигналу T = '); disp(T); % тривалість сигналу в секундах
t = 1/Fs:1/Fs:length(y)/Fs; figure; plot(t,y);
title(['Вхідний сигнал, ' num2str(bits) ' біт, ' num2str(Fs) ' Гц'],'FontSize', 14, 'FontName', 'MS Sans Serif');
Xlabel('Час, с','FontSize', 14, 'FontName', 'ms Sans Serif');grid on;
wavplay(y,Fs); pause;
%=== попереднє спотворення сигналу по А-закону ===
A = 100; % значення параметру А
if 0<abs(y)<=1/A
yn = A*abs(y).*sign(y)/(1+log(A));
else
if y == 0
y = 1e-3 ;
end
yn = (1+log(A*abs(y))).*sign(y)/(1+log(A));
end
sum_nan = sum(isnan(yn)); % к-сть NaN
yn = yn(~isnan(yn)); % видалення NaN
t1 = 1/Fs:1/Fs:(length(y)-sum_nan)/Fs;
figure; plot(t1,yn);
title(['Попередньо спотворений сигнал, ' num2str(bits) ' біт, ' num2str(Fs) ' Гц'],'FontSize', 14, 'FontName', 'MS Sans Serif');
xlabel('Час, с','FontSize', 14, 'FontName', 'MS Sans Serif');grid on;
wavplay(yn,Fs); pause;
%=== квантування попередньо спотвореного сигналу =======
b = 8; % нова кількість біт
L = 2^b; % нова кількість рівнів
q = 2/(L-1); % квант рівня
partition = -1+q/2:q:1-q/2;
codebook = -1:q:1;
[ind, yq, D] = quantiz(yn, partition, codebook);
figure; plot(t1,yq);
title(['Квантування попередньо спотвореного сигналу, ' num2str(b) ' біт, ' num2str(Fs) ' Гц'],'FontSize', 14, 'FontName', 'MS Sans Serif');
xlabel('Время, с','FontSize', 14, 'FontName', 'MS Sans Serif');grid on;
% === зворотнє нелінійне попереднє спотворення сигналу ======
if 0<abs(yq)<=1/(1+log(A))
yv = (1+log(A))*abs(yq).*sign(yq)/A;
else
yv = exp((1+log(A))*abs(yq)-1).*sign(yq)/A;
end
figure; plot(t1,yv);
title(['Рез-тат нелін. квантувания, ' num2str(b) ' біт, ' num2str(Fs) ' Гц'],'FontSize', 14, 'FontName', 'MS Sans Serif');
xlabel('Час, с','FontSize', 14, 'FontName', 'MS Sans Serif');grid on;
wavplay(yv,Fs);
Результат нелінійного 4-бітного квантування по А-закону (А=100) реального сигналупоказанийна рис. 17.
Рис. 17. Результат нелінійного (А=100) 4-бітного квантування реального сигналу
На графікурис. 17 чітко видно,що малірівнімовногосигналув ціломуспотворені значно менше, однакспостерігаються локальні стрибки.Попередні дослідження цього явища показали, що причиною є нульові значення вихідного сигналу.
Увага! Завдання для бажаючих отримати бонусні бали: виправте наведену вище програму нелінійного квантування так, щоб позбутися вказаних локальних стрибків в області малих рівнів мовного сигналу.
Доречі, нелінійне квантуваннясигналу в середовищіSimulink (рис. 18) при тихсамихпараметрах (4 біта, А=100) приводитьдо суттєво кращих результатівв областімалих рівнівсигналу(рис.19).
Рис. 18
Рис. 19
Література
Продеус А.Н., Родінова М.В. Безпаперова технологія проведення практикумів із статистичної обробки сигналів. – Электроника и связь, №20, 2003,pp.117-120
Гультяев А. Имитационное моделирование в среде Windows. – С-Пб, КОРОНА принт, 1999. – 287 с.
Скляр Б. Цифровая связь. Теоретические основы и практическое применение. – М.,С-Пб,К., изд.дом «Вильямс», 2003. – 1092 с.
КалюжнийО.Я. Моделювання систем передачі сигналів в обчислювальному середовищі MATLAB-Simulink. – К., “Політехніка”, 2004. – 135 с.