📄 dfe_main_3.m
字号:
clc
clear
echo off
global cir_matrix_t
global N
global flag
flag = 1;
snr_b = [1,5,10,15,20,35,30];
iter_num = 3;
N = 32;
snr = snr_b + 10*log10(2);
subCarrNum=64; %number of ifft/fft point ,the subchannel numbers.
gama=16; %length of polyphase filter
Nf=(2*gama-1);% Select FSE and DFE lengths
Nb=gama;
Prototype=ProtoFilter(subCarrNum,gama);
tPolyphase=reshape(Prototype,subCarrNum,gama);%polyphase:多相,gama多相滤波器的长度,subCarrNum为子载波个数, reshape:改变数组的配置
mPolyphase=SubMatchFilter(tPolyphase,subCarrNum);
for p=1:subCarrNum
subChannelMat(p,:)=conv(tPolyphase(p,:),mPolyphase(p,:));%conv:求两个多项式的乘积
end
for p=1:subCarrNum
c(p,:)=subChannelMat(p,:)/norm(subChannelMat(p,:));%%%norm:矩阵或向量的范数
end
for snr_index=1:length(snr)
errsnr(snr_index)=0;
ber(snr_index)=0;
lambda = power(10,-snr(snr_index)/20);
erriter= 0;
for iter =1:iter_num
for p=1:subCarrNum
bit_signal(p,:) = randint(1,N);
modul_signal1(p,:) = mod_4PSK(bit_signal(p,:));
end
modul_signal=ifft(modul_signal1);
for p=1:subCarrNum
rx_sym(p,:) = Through_channel(c(p,:),modul_signal(p,:),N/2);
rx_signal1(p,:) = awgn(rx_sym(p,:),snr(snr_index));
end
for p=1:subCarrNum
equal_bit= [];
equal_signal1(p,:) = equalizer(Nf,Nb,rx_signal1(p,:),lambda);
end
equal_signal=fft(equal_signal1);
errp=0;
for p=1:subCarrNum
equal_bit= [];
for k=1:N/2
if real(equal_signal(p,k))>0.5
equal_bit = [equal_bit 0 0];
elseif real(equal_signal(p,k)<-0.5)
equal_bit = [equal_bit 1 1];
elseif imag(equal_signal(p,k))>0.5
equal_bit = [equal_bit 1 0];
else equal_bit = [equal_bit 0 1 ];
end
end
errr(p) = sum(abs(equal_bit-bit_signal(p,:)));
errp = errp+ errr(p);
end
erriter=erriter+errp;
end
errsnr(snr_index)=erriter;
errsnr1(snr_index)=errsnr(snr_index)/(N*iter_num*subCarrNum);
ber(snr_index)= errsnr1(snr_index)
snr_index
end
semilogy(snr_b,ber,'*-')
hold on
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -