⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blind_equalizer_24tap.m

📁 Blind Equalizer 的演算法主要是利用CMA及 LMS 的配合
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   Blind Equalizer Simulation (24 TAP Gordard CMA & DD LMS) with Channel effect & Carrier offset  % 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear;close all;
%%== System Setup ==%%
load channel;
channel=channel/norm(channel);
load srrc18;
srrc=h/norm(h);
fb=5e6;       % 5M Hz
fs=4*fb;        % 2400M Hz
fc=fb;
df=100e3;       % 100 KHz;
%%== 64 QAM Transmitter ==%%
%-- 64 QAM Symbol Generation
nums=20000;
bitstream=randint(1,nums,64);              
qam64=qammod(bitstream,64);
%-- 4 times oversampling SRRC filtering
I4=zeros(1,4*nums);
Q4=zeros(1,4*nums);
I4(1:4:4*nums)=real(qam64);
Q4(1:4:4*nums)=imag(qam64);
I4tx=filter(srrc,1,I4);
Q4tx=filter(srrc,1,Q4);
tx=I4tx+j*Q4tx;
%%-- pass the channel
tx_ch=filter(channel,1,tx);
%%-- Baseband Carrier Offset Modulation  
[rnum cnum]=size(I4tx);
t=[1:cnum]/fs;
tx_off=tx_ch.*exp(j*(2*pi*df*t));
%%-- add AWGN
snr=20;
r_amp=sqrt(sum(tx_off.^2)/length(tx_off));
noise_amp=r_amp/10^(snr/20);
tx_awgn=tx_off+randn*noise_amp;
% %%== 64 QAM receiver ==%%
%%--  Matched Filtering
rx=filter(srrc,1,tx_awgn);
%%-- Downsample 2
rx2=downsample(rx,2);
%%=======================%%
%  24 TAP Blind Equalizer %
%%=======================%%
%%-- Parameter Setup
R2=58;
step=2^-24;
delta=2^-14;
tap=24;
fse_c=zeros(tap,nums-11);
fse_c(tap/2,1)=1;
fse_out=zeros(1,nums-11);
er=zeros(1,nums-11);
fse_de=zeros(1,nums-11);
fse_decision=zeros(1,nums-11);
error=zeros(1,nums-11);
loop_out=zeros(1,nums-11);
phase=zeros(1,nums-11);
r1=2^-11; 
r2=2^-6;  
temp=0;
%%-- Starting
for i=1:nums-11
in=rx2(2*i-1:1:2*i+22);
if i<=10000
fse_out(i)=in*fse_c(:,i);
er(i)=fse_out(i)*(abs(fse_out(i))^2-R2);
fse_c(:,i+1)=fse_c(:,i)-step*conj(in.')*er(i);
fse_de(i)=fse_out(i)*exp(-j*phase(i));
fse_decision(i)=de_qam_64(real(fse_de(i)))+j*de_qam_64(imag(fse_de(i)));
error(i)=imag(fse_de(i)*conj(fse_decision(i)));
temp=r1*error(i)+temp;
loop_out(i)=r2*error(i)+temp;
phase(i+1)=phase(i)+loop_out(i);  
elseif i<=20000
fse_out(i)=in*fse_c(:,i);
fse_de(i)=fse_out(i)*exp(-j*phase(i));
fse_decision(i)=de_qam_64(real(fse_de(i)))+j*de_qam_64(imag(fse_de(i))); 
err(i)=[fse_de(i)-fse_decision(i)]*exp(j*phase(i));
fse_c(:,i+1)=fse_c(:,i)-delta*conj(in.')*err(i);
error(i)=imag(fse_de(i)*conj(fse_decision(i)));
temp=r1*error(i)+temp;
loop_out(i)=r2*error(i)+temp;
phase(i+1)=phase(i)+loop_out(i);
end
end

figure;
plot(fse_out,'.');title('Constellation diagram before phase derotator');
xlabel('I channel');ylabel('Q channel');axis([-10 10 -10 10]);grid on;
hold on;
plot(fse_de,'r.');

figure;
stem(real(fse_c(:,end)),'ob','fill');
hold on;
stem(imag(fse_c(:,end)),'dr','fill');
legend('Real','Imagine');grid on;xlabel('Tap Number');ylabel('Amplitude');title('24-tap FSE Coefficients')

figure;
plot(real(fse_de),'.');title('Real Part of the Derotated Signal');
xlabel('pts');ylabel('Level');axis([1 nums-11 -10 10]);grid on;

figure;
plot(loop_out);title('Input Signal of the NCO');xlabel('pts');ylabel('Amplitude');
grid on;














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -