?? 1.m
字號:
clc
clear all
M=2; %BPSK modulation
w_len=2; % 前饋抽頭個數(shù)
Fd=10e6; % 信息速率
rolloff = 1; % 滾降系數(shù)
up = 4; % samples per symbol
delay = 4; % 升余弦濾波器群延遲大小
Fs=Fd*up;
data_len = 500;
data = randint(1,data_len,M);
m_data = pskmod(data,M);
[NUM1,DEN1]=rcosine(Fd,Fs,'fir/sqrt',rolloff,delay);
[t_data,tc]=rcosflt(m_data,Fd,Fs,'filter',NUM1); % 成形濾波
t_data = t_data.';
%%%%%%%%%%%%%%%%%% Two Path Channel %%%%%%%%%%%%%%%%%
chan_type=input('選擇信道(1-15ms delay,2-25ms delay, 3-awgn): ');
gain=[1 1];
if chan_type == 1
t_delay=[0 ceil(1.5*up)];
r_signal= gain(1)*t_data +
gain(2)*[zeros(1,t_delay(2)),t_data(t_delay(2)+1:length(t_data))];
elseif chan_type == 2
t_delay=[0 ceil(2.5*up)];
r_signal= gain(1)*t_data +
gain(2)*[zeros(1,t_delay(2)),t_data(t_delay(2)+1:length(t_data))];
elseif chan_type == 3
r_signal = gain(1)*t_data;
end
snr = input('信噪比大小(dB):');
r_signal = awgn(r_signal, snr, 'measured');
% r_signal = awgn(t_data,10,'measured');
%%%%%%%%%%%%%%%%%%%%%% Receiver %%%%%%%%%%%%%%%%%%%%
[r_data,tr]=rcosflt(r_signal,Fd,Fs,'filter/Fs',NUM1); %匹配濾波
equlz_in=r_data(delay*2*up+1:up:length(r_data)-delay*2*up);
equalizer_type=input('選擇均衡器 (1-LMS,2-RLS): ');
if equalizer_type == 1
a(1)=1; a(w_len)=0; %抽頭系數(shù)初始化
register1(w_len)=0; %數(shù)據(jù)緩存初始化
rd=0;
for m=1:data_len;
[y,e,rd,register1,a,p]=lms_equalizer(equlz_in(m),a,w_len,register1,M);
equlz_out(m)=p; err(m)=e; redata(m)=y;
end
elseif equalizer_type == 2
a = zeros(w_len, 1); %抽頭系數(shù)初始化
register1(w_len)=0; %數(shù)據(jù)緩存初始化
Lambda = 0.99 ; % Set the forgetting factor
Delta = 10 ; % R initialized to Delta*I
rd=0;
for m=1:data_len;
[y,e,rd,register1,R,a,p]=rls_equalizer(equlz_in(m),a,w_len,register1,R,Lambda,M);
equlz_out(m)=p; err(m)=e; redata(m)=y;
end
end
figure;
% plot(10*log10(abs(err).^2));
plot(abs(err));
grid on;
xlabel('symbols');
ylabel('error');
title('qualization');
自適應線性LMS均衡器:
function[y,e,rd,register1,ao,p]=lms_equalizer(x,ai,f_lenth,register1,mindex)
%%% y表示均衡并解調(diào)后的輸出序列
%%% e表示輸出的均方誤差
%%% rd表示判決后的復數(shù)據(jù)
%%% register1為輸入數(shù)據(jù)的緩沖區(qū)
%%% ai表示輸出前饋濾波器系數(shù)
%%% ao表示輸出反饋濾波器系數(shù)
%%% p表示均衡后輸出的復數(shù)據(jù)
%%% x表示均衡器的輸入
%%% f_lenth表示前饋抽頭的個數(shù)
%%% mindex表示QAM調(diào)制的階數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for mm=f_lenth:-1:2 %數(shù)據(jù)緩沖
register1(mm)=register1(mm-1);
end
register1(1)=x;
p=ai*register1.';
if mindex==2;
mu1=0.008; %前饋濾波器的步長
y=pskdemod(p,mindex);
rd=pskmod(y,mindex);
e=rd-p;
else if mindex==64
mu1=0.00005;
elseif mindex==16;
mu1=0.0005
elseif mindex==4;
mu1=0.005;
end
y=qamdemod(p,mindex);
rd=qammod(y,mindex);
end
e=rd-p;
for ll=1:f_lenth;
ao(ll)=ai(ll)+mu1*e*conj(register1(ll));
end
自適應線性RLS均衡器程序:
function[y,e,rd,register1,Ro,ao,p]=rls_equalizer(x,ai,f_lenth,register1,Ri,Lambda,mindex)
%%% y表示均衡并解調(diào)后的輸出序列
%%% e表示輸出的均方誤差
%%% rd表示判決后的復數(shù)據(jù)
%%% ai表示輸出前饋濾波器系數(shù)
%%% ao表示輸出反饋濾波器系數(shù)
%%% Ri表示輸入相關矩陣
%%% Ro表示輸出相關矩陣
%%% p表示均衡后輸出的復數(shù)據(jù)
%%% x表示均衡器的輸入
%%% f_lenth表示前饋抽頭的個數(shù)
%%% Lambda表示遺忘系數(shù)
%%% mindex表示QAM調(diào)制的階數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for mm=f_lenth:-1:2 %數(shù)據(jù)緩沖
register1(mm)=register1(mm-1);
end
register1(1)=x;
u=register1.';
phi = u' * Ri ; % 互相關矩陣
k = phi'/(Lambda + phi * u );
p=ai' * u;
if mindex==2;
y=pskdemod(p,mindex);
rd=pskmod(y,mindex);
else
y=qamdemod(p,mindex);
rd=qammod(y,mindex);
end
e = rd - p ;
ao = ai + k * conj(e) ;
Ro = ( Ri - k * phi ) / Lambda ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -