непрерывного временного канала с дискретным временем, эквивалентным h k , и
дискретным временным нулевым форсирующим эквалайзером w k , разнесенным по символам. Цель состоит в том, чтобы разработать эквалайзер с нулевым форсированием длины N, который мог бы компенсировать эффекты искажения,
вносимые каналом длины L.
В качестве примера для моделирования предполагается, что частота дискретизации всей системы равна Fs 100 Гц с 5 отсчетами на символnSamp 5 , а также предполагается модель канала со следующей общей импульсной характеристикой канала при скорости передачи в бодах.
h(t) |
|
1 |
|
(8.26) |
|
|
|
|
|||
|
t |
2 |
|||
|
|
||||
1 |
|
|
|
||
|
|
||||
|
T |
|
|
||
|
|
sym |
|
||
Программа 8.1: Модель канала
%System parameters
nSamp=5; %Number of samples per symbol determines baud rate Tsym Fs=100; %Sampling Frequency of the system
Ts=1/Fs; %Sampling time Tsym=nSamp*Ts; %symbol time period
%Define transfer function of the channel
k=6; %define limits for computing channel response
N0 = 0.001; %Standard deviation of AWGN channel noise
t = -k*Tsym:Ts:k*Tsym; %time base defined till +/-kTsym
h_t = 1./(1+(t/Tsym).^2);%channel model, replace with your own model h_t = h_t + N0*randn(1,length(h_t));%add Noise to the channel response h_k = h_t(1:nSamp:end);%downsampling to represent symbol rate sampler t_inst=t(1:nSamp:end); %symbol sampling instants
Затем постройте импульсную характеристику канала для вышеупомянутой модели, получившийся график показан на Рисунке 8.5.
Программа 8.2: Построение импульсной характеристики канала
figure; plot(t,h_t); hold on; %channel response at all sampling instants stem(t_inst,h_k,'r'); %channel response at symbol sampling instants legend('continuous-time model','discrete-time model');
title('Channel impulse response'); xlabel('Time (s)');ylabel('Amplitude');
Рисунок 8.5 − Импульсная характеристика канала
Поскольку характеристика канала, изображенная на рисунке 8.5, имеет длину L = 13, желателен принудительный фильтр с нулевым принуждением с длиной N L . Давайте зафиксируем длину фильтра с принуждением к нулю равной N = 14. Конструкция эквалайзера с принуждением к нулю соответствует уравнению 8.18, а задержка эквалайзера определяет положение одиночной «1» в
матрице k0 , которая представляет дельта-функцию Дирака.
Учитывая импульсную характеристику канала и желаемую длину эквалайзера, следующая функция проектирует эквалайзер с нулевым форсированием, используя уравнения 8.18, 8.20 и 8.21.
Программа 8.3: zf_equalizer.m: Функция для разработки эквалайзера ZF и
выравнивания сигнала
function [w,err,optDelay]=zf_equalizer(h,N,delay)
%Delay optimized zero forcing equalizer.
%[w,err,optDelay]=zf_equalizer(h,N,delay) designs a ZERO FORCING equalizer
%w for given channel impulse response h, the desired length of the equalizer
%N and equalizer delay (delay). Also returns the equalizer error (err),the
%best optimal delay (optDelay) that could work best for the designed equalizer
%[w,err,optDelay]=zf_equalizer(h,N) designs a DELAY OPTIMIZED ZERO FORCING
%equalizer w for given channel impulse response h, the desired length of the
%equalizer N. Also returns equalizer error(err),the best optimal delay(optDelay)
h=h(:); %Channel matrix to solve simultaneous equations L=length(h); %length of CIR
H=convMatrix(h,N); %(L+N-1)xN matrix - see Chapter 1 %section title - Methods to compute convolution %compute optimum delay based on MSE
Hp = inv(H'*H)*H'; %Moore-Penrose Pseudo inverse [~,optDelay] = max(diag(H*Hp)); optDelay=optDelay-1;%since Matlab index starts from 1 k0=optDelay;
if nargin==3,
if delay >=(L+N-1), error('Too large delay'); end k0=delay;
end d=zeros(N+L-1,1);
d(k0+1)=1; %optimized position of equalizer delay w=Hp*d;%Least Squares solution
err=1-H(k0+1,:)*w; %equalizer error (MSE)-reference [5] MSE=(1-d'*H*Hp*d);%MSE and err are equivalent
end
Давайте спроектируем эквалайзер с нулевым форсированием с N = 14
ответвлениями для данной характеристики канала на рисунке 8.5 и задержкой эквалайзера k0 , установленной на 11. Разработанный эквалайзер испытывается путем отправки импульсной характеристики канала в качестве входа, r[k] h[k].
Предполагается, что эквалайзер полностью его компенсирует, как показано на рисунке 8.6. Общий отклик системы вычисляется как свертка импульсной характеристики канала и отклика эквалайзера с нулевым принуждением.
Программа 8.4: Разработка и испытание эквалайзера обнуления
%Equalizer Design Parameters
N = 14; %Desired number of taps for equalizer filter delay = 11;
%design zero-forcing equalizer for given channel and get tap weights
%and filter the input through the equalizer find equalizer co-effs for given CIR
[w,error,k0]=zf_equalizer(h_k,N,delay); %[w,error,k0]=zf_equalizer(h,N,); %Try this delay optimized equalizer r_k=h_k; %Test the equalizer with the sampled channel response as input d_k=conv(w,r_k); %filter input through the eq
1h_sys=conv(w,h_k); %overall effect of channel and equalizer
disp(['ZF Equalizer Design: N=', num2str(N), ...' Delay=',num2str(delay), ' Error=', num2str(error)]);
disp('ZF equalizer weights:'); disp(w);
Вычислите и постройте частотную характеристику канала, эквалайзера и всей системы. Результирующий график, представленный на рисунке 8.6,
показывает, как эквалайзер с нулевым принуждением скомпенсировал отклик канала, инвертируя его.
Программа 8.5: Частотные характеристики канального эквалайзера и системы в целом
[H_F,Omega_1]=freqz(h_k); %frequency response of channel [W,Omega_2]=freqz(w); %frequency response of equalizer [H_sys,Omega_3]=freqz(h_sys); %frequency response of overall system figure;
plot(Omega_1/pi,20*log(abs(H_F)/max(abs(H_F))),'g'); hold on; plot(Omega_2/pi,20*log(abs(W)/max(abs(W))),'r'); plot(Omega_3/pi,20*log(abs(H_sys)/max(abs(H_sys))),'k'); legend('channel','ZF equalizer','overall system'); title('Frequency response');ylabel('Magnitude(dB)'); xlabel('Normalized frequency(x \pi rad/sample)');
Рисунок 8.6 − Эквалайзер с нулевым форсированием компенсирует отклик канала
Отклик фильтра во временной области показан на рисунке 8.7. График показывает, что эквалайзер идеально скомпенсировал вход, когда r[k] h[k].
Программа 8.6: Разработка и испытание эквалайзера обнуления
figure; %Plot equalizer input and output subplot(2,1,1); stem(0:1:length(r_k)-1,r_k);
title('Equalizer input'); xlabel('Samples'); ylabel('Amplitude'); subplot(2,1,2); stem(0:1:length(d_k)-1,d_k);
title(['Equalizer output- N=', num2str(N), ...' Delay=',num2str(delay), ' Error=', num2str(error)]);
xlabel('Samples'); ylabel('Amplitude');
Расчетная расчетная ошибка нулевого принуждения зависит от задержки эквалайзера. Для эквалайзера с 14 отводами и задержкой 11 ошибка
MSE 7,04 10 4 для бесшумного входа. С другой стороны, ошибка = 0,9985 для задержки = 1. Таким образом, задержка эквалайзера играет жизненно важную роль в конструкции эквалайзера с нулевым форсированием. Знание задержки, вносимой эквалайзером, очень важно для определения положения первого действительного отсчета на выходе эквалайзера (см. Разделы 8.6 и 8.7). Полный код моделирования,
который включает в себя все вышеупомянутые фрагменты кода, приводится ниже.
Программа 8.7: zf_equalizer_test.m: Моделирование эквалайзера с принудительной установкой нуля
clearvars; clc; %System parameters
nSamp=5; %Number of samples per symbol determines baud rate Tsym Fs=100; %Sampling Frequency of the system
Ts=1/Fs; %Sampling time Tsym=nSamp*Ts; %symbol time period
%Define transfer function of the channel
k=6; %define limits for computing channel response
N0 = 0.001; %Standard deviation of AWGN channel noise
t = -k*Tsym:Ts:k*Tsym; %time base defined till +/-kTsym
h_t = 1./(1+(t/Tsym).?2);%channel model, replace with your own model h_t = h_t + N0*randn(1,length(h_t));%add Noise to the channel response h_k = h_t(1:nSamp:end);%downsampling to represent symbol rate sampler t_inst=t(1:nSamp:end); %symbol sampling instants
figure; plot(t,h_t); hold on; %channel response at all sampling instants stem(t_inst,h_k,'r'); %channel response at symbol sampling instants legend('continuous-time model','discrete-time model');
title('Channel impulse response'); xlabel('Time (s)');ylabel('Amplitude'); %Equalizer Design Parameters
N = 14; %Desired number of taps for equalizer filter delay = 11;
%design zero-forcing equalizer for given channel and get tap weights
%and filter the input through the equalizer find equalizer co-effs for given CIR