ФОСМС2015fokin_12345
.pdfКомпандеры
•Логарифмический компрессор μ имеет характеристику «вход-выход» следующего вида:
= |
|
= |
|
|
ln 1+ |
|
|
|
(4.1.7a) |
|||
|
|
|
|
|||||||||
|
|
|
|
ln 1+ |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
||
= −1 |
|
= |
|
|
1+ |
−1 |
|
(4.1.7b) |
||||
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
Логарифмический компрессор A имеет характеристику «вход-выход» следующего вида:
|
|
|
|
|
|
|
|
при 0 < |
≤ 1 |
|
|||||
= |
|
= |
|
1+ln |
|||||||||||
|
|
|
|
|
|
|
|
|
|
(4.1.8a) |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
1+ln |
|
|
|
при 1 < |
|
≤ 1 |
|||||
|
|
|
|
||||||||||||
|
|
|
|
1+ln |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
1+ln |
|
|
|
при 1 + ln |
|
≤ 1 |
|||||
= −1 |
|
= |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
(4.1.8b) |
|||||
|
|
|
|
|
exp |
1+ln |
|
−1 |
|
при других |
|
||||
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В примере неравномерного квантования с компандером используется 16 уровней для квантования синусоиды. Анализ графиков, представленных на рисунках, позволяет сделать следующие выводы: при равномерном квантовании абсолютная ошибка квантования меньше, а при неравномерном квантовании меньше относительная ошибка квантования.
11
Характеристики компандеров
% sim_Compander x=[-1:0.01:1];
slines = {'-', ':', '--', '-.'}; colors = {'r', 'g', 'b', 'k'};
subplot(2,1,1); mu=[1,10,255]; legendstr1=cell(1,length(mu)); for i=1:length(mu)
[y1,xmax]=mulaw(x,mu(i)); plot(x,y1,strcat(slines{i},colors{i}), 'LineWidth', 2);
hold on;
legendstr1{i}=sprintf('\\mu=%d', mu(i));
end legend(legendstr1,'Location','northwest'); xlabel('x'); ylabel('y'); title('\mu-law');
subplot(2,1,2); A=[1,5,87]; legendstr2=cell(1,length(A)); for i=1:length(A)
[y2,xmax]=Alaw(x,A(i)); plot(x,y2,strcat(slines{i},colors{i}),'LineWidth', 2);
hold on; legendstr1{i}=sprintf('A=%d', A(i)); end
legend(legendstr1,'Location','northwest'); xlabel('x'); ylabel('y'); title('A-law');
function [y,xmax]=mulaw(x,mu,ymax) if nargin<3, ymax=1; end
if nargin<2, mu=255; end xmax=max(abs(x));
y=ymax*log(1+mu*abs(x/xmax))./log(1+mu).*sign(x);
function x=mulaw_inv(y,mu,xmax) if nargin<3, xmax=1; ymax=1;
else ymax=max(abs(y)); end
if nargin<2, mu=255; end x=xmax.*(((1+mu).^(abs(y)/ymax)-1)/mu).*sign(y);
12
Пример работы АЦП
function |
[d,dcode]=adc(a,b,c,code_table) |
|
|
|
% Analog-to-Digital Conversion |
|
|
|
|
% Input : analog signal a, boundary vector b, centroid vector c, |
|
|
|
|
% |
and code_table |
|
|
|
% Output: quantized samples d and the corresponding code dcode |
|
|
|
|
N=length(c); |
|
|
|
|
if nargin<4, code_table=[0:N-1]'; end |
|
|
|
|
Na=length(a); % dcode=zeros(Na,size(code_table,2)); |
|
|
|
|
for n=1:Na |
|
|
|
|
I=find(a(n)<b(2:N)); |
|
|
|
|
if ~isempty(I) |
|
|
|
|
|
d(n)=c(I(1)); dcode(n,:)=code_table(I(1),:); |
|
|
|
else |
|
|
|
|
|
d(n)=c(N); dcode(n,:)=code_table(N,:); |
|
|
|
end |
|
|
|
|
еnd |
|
|
|
|
function y=deci2bin1(x,l) |
|
|
|
|
% Converts a given decimal number x into a binary number of l bits |
|
|
|
|
if x==0, y=0; |
|
|
|
|
else y=[]; |
|
|
|
|
while x>=1, y=[rem(x,2) y]; x=floor(x/2); end |
# |
x_q16f |
code |
|
|
|
|
||
end |
|
1 |
0.0625 |
1000 |
|
|
|
|
|
if nargin>1, y=[zeros(size(x,1),l-size(y,2)) y]; end |
2 |
0.0625 |
1000 |
|
|
|
|
||
|
|
3 |
0.0625 |
1000 |
|
|
4 |
0.1875 |
1001 |
t=[0:0.05:2.0]; x=sin(t); |
5 |
0.1875 |
1001 |
|
|
|
|
||
b0=-1; bN=1; xmax=max(abs([b0 bN])); |
6 |
0.1875 |
1001 |
|
|
|
|
||
N=16; delta=(bN-b0)/N; % Width of quantization interval |
7 |
0.3125 |
1010 |
|
|
|
|
||
b=b0+[0:N]*delta; % Boundary vector |
8 |
0.3125 |
1010 |
|
|
|
|
||
c=b(1:N)+delta/2; % Midpoint vector |
9 |
0.4375 |
1011 |
|
|
|
|
||
for m=0:N-1 |
10 |
0.4375 |
1011 |
|
|
|
|
||
code_table(m+1,:)=deci2bin1(m,nextpow2(N)); |
11 |
0.4375 |
1011 |
|
|
|
|
||
end |
|
12 |
0.5625 |
1100 |
|
|
|
|
|
[xq16, code]=adc(x,b,c,code_table) % Uniform quantization |
13 |
0.5625 |
1100 |
|
|
|
|
||
[ts,xq16s]=stairs(t,xq16); |
14 |
0.5625 |
1100 |
|
|
|
|
||
plot(t,x,'k',ts,xq16s,'b:','LineWidth',2); grid on; |
15 |
0.6875 |
1101 |
|
|
|
|
||
legend('x','xq16','Location','southeast'); |
16 |
0.6875 |
1101 |
|
|
|
|
||
fprintf('#\tx_q16f\tcode\n'); |
17 |
0.6875 |
1101 |
|
|
|
|
||
for i=1:length(xq16) |
18 |
0.8125 |
1110 |
|
|
|
|
||
fprintf('%d\t%0.4f\t\t%d%d%d%d\n',i,xq16(i),code(i,:)); |
19 |
0.8125 |
1110 |
|
|
|
|
||
end |
|
20 |
0.8125 |
1110 |
|
|
|
|
|
|
|
21 |
0.8125 |
1110 |
13
Пример квантования с компандером
%dc040e03.m for Example 4.3 (Non-uniform Quantization of sin t) clear, clf
t=[0:0.05:7]; x=sin(t);
b0=-1; bN=1; xmax=max(abs([b0 bN]));
N=16; delta=(bN-b0)/N; % Width of quantization interval b=b0+[0:N]*delta; % Boundary vector
c=b(1:N)+delta/2; % Midpoint vector x_q16=adc(x,b,c); % Uniform quantization bn=mulaw_inv(b/xmax,50)*xmax; cn=mulaw_inv(c/xmax,50)*xmax; xn_q16=adc(x,bn,cn); % Non-uniform quantization subplot(311);
plot(t,x,'k',t,x_q16,'b:',t,xn_q16,'r','LineWidth',2); grid on; legend('x','uniform','non-uniform','Location','southwest'); str1=sprintf('Analog and quantized signals; N=%d', N); title(str1);
e=x-x_q16; en=x-xn_q16; % Absolute error subplot(312);plot(t,e,'b:', t,en,'r','LineWidth', 2); grid on; legend('uniform','non-uniform','Location','southwest'); str2=sprintf('Absolute quantization error'); title(str2);
tmp= abs(x)+0.01; re=e./tmp; ren=en./tmp; % Relative error subplot(313);plot(t,re,'b:', t,ren,'r-','LineWidth', 2); legend('uniform','non-uniform','Location','southwest'); title('Relative quantization error'); grid on;
14
Тема 2. АИМ, ИКМ, ДИКМ, ДМ
Цель: Изучить принципы работы АИМ, ИКМ, ДИКМ, ДМ
Задачи:
сформировать сигналы АИМ и ИКМ; построить их осциллограммы и спектры; сравнить осциллограммы и спектры и сделать выводы
сформировать сигнал ДИКМ; построить осциллограммы сигналов на входе и выходе квантователя передатчика; построить осциллограмму декодированного ДИКМ сигнала в приемнике
сформировать сигнал ДМ; построить осциллограммы сигналов на входе и выходе квантователя передатчика; построить осциллограмму декодированного ДМ сигнала в приемнике
сравнить ошибку квантования в случае ИКМ, ДИКМ, ДМ
План:
Импульсно-кодовая (ИКМ) и амплитудно-импульсная модуляция (АИМ)
Моделирование АИМ
Моделирование ИКМ
Принцип работы ДИКМ
Структура приемопередатчика ДИКМ
Предсказатель ДИКМ
Моделирование работы ДИКМ
Структура приемопередатчика ДМ
Моделирование работы ДМ
Иллюстрация работы ДМ
Содержание отчета: определяется задачами и планом практического занятия
ДЗ: оценить среднеквадратическая ошибку MSQE для ИКМ, ДИКМ и ДМ на примере синусоидального сигнала
15
Импульсно-кодовая (ИКМ)
иамплитудно-импульсная модуляция (АИМ)
ИКМ включает три этапа:
-дискретизация,
-квантование и
-двоичное кодирование в последовательный битовый поток.
ИКМ имеет следующие особенности в сравнении с АИМ:
-Большая помехоустойчивость вследствие большей разницы между уровнями кодированного сигнала ИКМ и квантованного сигнала АИМ
-Сигнал ИКМ изменяется более скачкообразно и быстро по сравнению с АИМ сигналом, поэтому в его спектре содержится больше высокочастотных составляющих.
Таким образом, ширина полосы сигнала ИКМ больше ширины полосы сигнала АИМ и как минимум в раз больше ширины полосы аналогового сигнала ( - число бит для представления квантованного значения ИКМ сигнала)
Программа sim_PCM.m выполняет следующие процедуры:
-Модуляция ИКМ и АИМ синусоидального сигнала
-Добавление шума к модулированным сигналам
-Демодуляция ИКМ и АИМ сигналов
-Оценка мощности переданных сигналов
-Подсчет символьных ошибок демодулированных АИМ и ИКМ сигналов
- Оценка спектра ИКМ и АИМ сигналов |
16 |
|
Моделирование АИМ
%sim_PCM.m
%PAM/PCM(Pulse Amplitude/Code Modulation) system clear all;
T=0.02; nmax=60; t=[0:nmax-1]*T; b0=-1; bN=1; N=8;
delta=(bN-b0)/N; |
% Quantization |
interval |
|
b=b0+[0:N]*delta; |
% |
Boundary vector |
|
c=b(1:N)+delta/2; |
% |
Quantization |
level vector |
Nb=ceil(log2(N)); N2=2^Nb; % Frequency range
wa=2*pi/T/nmax*[-nmax/2:nmax/2]; wp=2*pi/T/nmax/Nb*[-nmax*Nb/2:nmax*Nb/2]; if N2>N
b(N+1:N2)=b(N)*ones(1,N2-N); c(N+1:N2)=c(N)*ones(1,N2-N);
end code_table=fliplr(de2bi([0:N2-1])); noise_amp=0.5;
%% PAM (Pulse Amplitude Modulation)
tx_pam=[]; |
% Serial bit pattern |
pam_signal_power=0; |
|
for n=1:nmax |
|
x(n)=sin(6*(n-1)*T); |
% Analog signal |
xq(n)=adc(x(n),b,c); |
|
y(n)=xq(n)+noise_amp*(rand-0.5); |
|
yq(n)=adc(y(n),b,c); |
% Detection by RX |
pam_signal_power=pam_signal_power+xq(n)*xq(n);
end
tmp=ones(Nb,1)*xq; tx_pam=tmp(:)'; Xts_PAM=abs(fftshift(fft(tx_pam))); pam_signal_power=pam_signal_power/nmax pam_symbol_error=sum(yq~=xq)/nmax
17
Моделирование ИКМ
%%
%% PCM (Pulse Code Modulation)
tx_pcm=[]; |
% Serial bit pattern |
pcm_signal_power=0; A=1; |
|
for n=1:nmax |
|
[xq(n),code]=adc(x(n),b,c,code_table); |
|
for m=1:Nb |
% Nb=length(code) |
ym(m)=A*code(m)+noise_amp*(rand-0.5); |
|
ymq(m)=(ym(m)>A/2); |
% Detection by RX |
end
tx_pcm=[tx_pcm code(1:Nb)]; y_dec(n)=c(strmatch(ymq,code_table)); pcm_signal_power=pcm_signal_power+sum(code.^2);
end Xts_PCM=abs(fftshift(fft(A*tx_pcm)));
pcm_signal_power=A*A*pcm_signal_power/Nb/nmax pcm_symbol_error=sum(y_dec~=xq)/nmax
subplot(611);
plot(t,x,'linewidth', 2); legend('Analog signal'); Xts_AM=abs(fftshift(fft(x)));
subplot(612);
plot(wa,[Xts_AM Xts_AM(1)],'linewidth',2,'color','r'); legend('Analog spectrum');
subplot(613); stairs(tx_pam, 'linewidth', 2); str1=sprintf('PAM signal; N=%d',N);legend(str1); subplot(614);
plot(wp,[Xts_PAM Xts_PAM(1)],'linewidth',2,'color','r'); legend('PAM spectrum');
subplot(615); stairs(tx_pcm, 'linewidth',2); str2=sprintf('PCM signal; N_{bits}=%d',Nb);legend(str2); subplot(616);
plot(wp,[Xts_PCM Xts_PCM(1)],'linewidth',2,'color','r'); legend('PCM spectrum');
18
Принцип работы ДИКМ
В отличие от ИКМ (PCM), при которой каждая выборка обрабатывается отдельно, в случае ДИКМ (DPCM) передатчик TX использует предсказатель, который предсказывает следующую выборку на основе предыдущей и вместо текущей выборки отправляет ошибку предсказания. Приемник ДИКМ RX использует тот же предсказатель, что и передатчик TX для восстановления текущей выборки на основе принятой ошибки предсказания и предыдущей выборки.
В случае ДИКМ при хорошей работе предсказателя и сильной корреляции соседних
выборок |
размер = 2 − число бит на выборку интервалов квантования и |
диапазон |
ошибок предсказания, подлежащих передаче, будут значительно меньше, |
чем при ИКМ. Это, по идее, должно позволить уменьшить ошибки квантования по сравнению с ИКМ, или же сократить число передаваемых бит за счет сокращения числа интервалов квантования при равной с ИКМ ошибкой квантования.
Выражения сигналов на входе квантователя и предсказателя передатчика TX можно представить следующим образом:
− |
|
= |
|
(4.3.1) |
||||
|
|
|
|
|
|
|
|
|
|
|
|
= |
|
+ |
|
|
(4.3.2) |
|
|
|
|
|
|
Разность между входным сигналом предсказателя = + и выборкой сигнала , согласно (4.3.1)-(4.3.2), определяется выражением:
|
− |
= |
|
+ |
|
|
− |
= |
|
|
− |
= |
(4.3.3) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Таким образом, |
|
|
представляет собой квантованное выборку . |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19
Структура приемопередатчика ДИКМ
|
|
|
|
|
|
|
|
Передатчик/кодер |
|
|
|
|
|
|
|
|
|
|
|
Приемник/декодер |
|
|
||||||
x(t) |
|
|
x[n] |
|
|
d[n] |
|
|
|
|
|
|
|
dq[n] |
|
|
|
yq[n]=xq[n]≈x(t) |
|
|
|
|||||||
|
|
|
+ |
+ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ + |
|
|
|
|
|||||
|
Дискр-р |
|
|
|
|
|
|
|
Квантователь |
|
|
|
|
|
|
|
Канал |
|
|
+ |
|
|
|
|
||||
|
|
|
|
|
|
– |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
xq[n] |
|
Предсказатель |
xq[n-1] |
z¯¹ |
xq[n] |
+ |
|
|
|
yq[n] |
Предсказатель |
yq[n-1] |
z¯¹ |
yq[n] |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
ak |
|
|
|
|
|
|
|
|
|
|
|
ak |
|
|
|
|
Примем следующие обозначения: |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
- |
|
|
– аналоговый сигнал |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
- |
- выборка аналогового сигнала |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
- |
|
- квантованная выборка аналогового сигнала |
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
= − |
- сигнал на входе квантователя |
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
- |
|
|
- сигнал на выходе квантователя |
|
|
|
|
|
|
|
|
|||||||||||||||||
- |
|
|
= |
+ |
|
- сигнал на входе предсказателя |
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- сигнал на выходе предсказателя Допустим, что
-поступает на вход приемника без ошибок и
- предсказатель RX настроен на предсказатель TX так, что выполняется |
|
= |
|
|||||
|
|
|
|
|
|
|
|
|
Тогда выход декодера в приемнике можно представить следующим выражением: |
||||||||
= |
|
+ = |
|
+ |
= |
|
|
(4.3.4) |
|
|
|
|
|
|
|
Анализ выражения (4.3.4) говорит о том, что для приема квантованного сигнала по каналу связи достаточно передать квантованную ошибку предсказателя .
20