%% Given the received signal Design ZF and MSE equalizers to detected the transmitted signal.
clc;
clear all;
close all;
clear figure;
snr = 1:1:20;
ber_zf_1 = zeros(1,20);
ber_mmse_1 = zeros(1,20);
ber_mmse_no_1 = zeros(1,20);
ber_mmse_the_1 = zeros(1,20);
ber_zf_2 = zeros(1,20);
ber_mmse_2 = zeros(1,20);
ber_mmse_no_2 = zeros(1,20);
ber_mmse_the_2 = zeros(1,20);
N =600000;
K =5;
f_seq =[1 0.9];
for j=1:1:length(snr)
err_tot = 0;
err_tot_mmse =0;
err_tot_mmse_no =0;
for frame = 1:1:30
syn = randint(1,N);
%% BPSK调制
syn_m = 1-2*syn;
%% 过多径信道
recv = conv(syn_m,f_seq);
%% awgn
recv_fi = awgn(recv,snr(j));
%% 信道均衡 ,D = 0.9
%ZF equalization
%产生滤波器w因子
f_samp =[zeros(2*K,1);f_seq';zeros(2*K+1-length(f_seq),1)];
for i = 1:1:2*K+1
f_val(i,:)=f_samp(2*K+i:-1:i)';
end
q_n = [1; zeros(2*K,1)];
C = f_val\q_n;
%计算D_min为0.333 D = 0.9 最小化峰值失真
res = conv(C,f_seq);
q_n_hat = [1 zeros(1,length(res)-1)];
q_max = abs(res(1));
res = res';
D_min = sum(abs(res(2:end)-q_n_hat(2:end)),2)/q_max;
%信道卷积
y_equ = conv(recv_fi,C');
y = y_equ(1:length(y_equ)-2*K-1);
% mmse equalization
h_corr = conv(f_seq,fliplr(f_seq));
[h_corr(2:end) zeros(1,2*K-1)]
hM = toeplitz([h_corr(2:end) zeros(1,2*K-1)]);
d = zeros(2*K+1,1);
d(K:K+1) = fliplr(f_seq);
c_mmse_no = hM\d;
hM = hM + 10^(-snr(j)/10)*eye(2*K+1);
c_mmse = hM\d;
y_hat_mmse = conv(recv_fi,c_mmse);
y_hat_mmse = y_hat_mmse(K+1:end-K-1);
y_hat_mmse_no = conv(recv,c_mmse_no);
y_hat_mmse_no = y_hat_mmse_no(K+1:end-K-1);
%% BPSK解调
%ZF equalization
y_demo = zeros(1,N);
flag = find(y<0);
y_demo(flag) = 1;
%MMSE equalization
y_mmse = zeros(1,N);
flag_mmse = find(y_hat_mmse<0);
y_mmse(flag_mmse) = 1;
%MMSE equalization without noise
y_mmse_no = zeros(1,N);
flag_mmse_no = find(y_hat_mmse_no<0);
y_mmse_no(flag_mmse_no) = 1;
%% 计算误码率 ZF信道均衡
[err ra]= biterr(y_demo,syn);
err_tot = err_tot + err;
[err_mmse ra_mmse]= biterr(y_mmse,syn);
err_tot_mmse = err_tot_mmse + err_mmse;
[err_mmse_no ra_mmse_no]= biterr(y_mmse_no,syn);
err_tot_mmse_no = err_tot_mmse_no + err_mmse_no;
if(err_tot>100 && err_tot_mmse>100)break;
end
end
% mmse euqalization theorical
J_min = 1-d'*(hM^-1)*d;
ber_mmse_the_1(j) = qfunc(sqrt((1-J_min)/J_min));
ber_zf_1(j) = err_tot/N/frame;
ber_mmse_1(j) = err_tot_mmse/N/frame;
ber_mmse_no_1(j) = err_tot_mmse_no/N/frame;
fprintf('BER of mmse equalization without noise is %0.4f',ber_mmse_no_1(j));
end
f_seq =[sqrt(0.7854) sqrt(0.1146)];
for j=1:1:length(snr)
err_tot = 0;
err_tot_mmse =0;
err_tot_mmse_no =0;
for frame = 1:1:30
syn = randint(1,N);
%% BPSK调制
syn_m = 1-2*syn;
%% 过多径信道
recv = conv(syn_m,f_seq);
%% awgn
recv_fi = awgn(recv,snr(j));
%% 信道均衡 ,D = 0.9
%ZF equalization
%产生滤波器w因子
f_samp =[zeros(2*K,1);f_seq';zeros(2*K+1-length(f_seq),1)];
for i = 1:1:2*K+1
f_val(i,:)=f_samp(2*K+i:-1:i)';
end
q_n = [1; zeros(2*K,1)];
C = f_val\q_n;
%计算D_min为0.333 D = 0.9 最小化峰值失真
res = conv(C,f_seq);
q_n_hat = [1 zeros(1,length(res)-1)];
q_max = abs(res(1));
res = res';
D_min = sum(abs(res(2:end)-q_n_hat(2:end)),2)/q_max;
%信道卷积
y_equ = conv(recv_fi,C');
y = y_equ(1:length(y_equ)-2*K-1);
% mmse equalization
h_corr = conv(f_seq,fliplr(f_seq));
[h_corr(2:end) zeros(1,2*K-1)]
hM = toeplitz([h_corr(2:end) zeros(1,2*K-1)]);
d = zeros(2*K+1,1);
d(K:K+1) = fliplr(f_seq);
c_mmse_no = hM\d;
hM = hM + 10^(-snr(j)/10)*eye(2*K+1);
c_mmse = hM\d;
y_hat_mmse = conv(recv_fi,c_mmse);
y_hat_mmse = y_hat_mmse(K+1:end-K-1);
y_hat_mmse_no = conv(recv,c_mmse_no);
y_hat_mmse_no = y_hat_mmse_no(K+1:end-K-1);
%% BPSK解调
%ZF equalization
y_demo = zeros(1,N);
flag = find(y<0);
y_demo(flag) = 1;
%MMSE equalization
y_mmse = zeros(1,N);
flag_mmse = find(y_hat_mmse<0);
y_mmse(flag_mmse) = 1;
%MMSE equalization without noise
y_mmse_no = zeros(1,N);
flag_mmse_no = find(y_hat_mmse_no<0);
y_mmse_no(flag_mmse_no) = 1;
%% 计算误码率 ZF信道均衡
[err ra]= biterr(y_demo,syn);
err_tot = err_tot + err;
[err_mmse ra_mmse]= biterr(y_mmse,syn);
err_tot_mmse = err_tot_mmse + err_mmse;
[err_mmse_no ra_mmse_no]= biterr(y_mmse_no,syn);
err_tot_mmse_no = err_tot_mmse_no + err_mmse_no;
if(err_tot>100 && err_tot_mmse>100)break;
end
end
% mmse euqalization theorical
J_min = 1-d'*(hM^-1)*d;
ber_mmse_the_2(j) = qfunc(sqrt((1-J_min)/J_min));
ber_zf_2(j) = err_tot/N/frame;
ber_mmse_2(j) = err_tot_mmse/N/frame;
ber_mmse_no_2(j) = err_tot_mmse_no/N/frame;
fprintf('BER of mmse equalization without noise is %0.4f',ber_mmse_no_2(j));
end
% figure(1)
% plot(snr,ber_zf,'r*',snr,ber_mmse,'kh',snr,ber_mmse_the,'b-');
figure(1);
semilogy(snr,ber_zf_1,'r*-');
hold on;
semilogy(snr,ber_mmse_1,'kh');
hold on
semilogy(snr,ber_mmse_the_1,'b-');
hold on
semilogy(snr,ber_zf_2,'y*-');
hold on;
semilogy(snr,ber_mmse_2,'cv');
hold on
semilogy(snr,ber_mmse_the_2,'g--');
xlabel('Eb/N0(dB)');
ylabel('BER');
title('comparison of ZF equalizer and MMSE equalizer between case 1 and case 2 ');
legend('ZF equalizer simulation case 1','MMSE equalizer simulation case 1','MMSE equalizer theory case 1','ZF equalizer simulation case 2','MMSE equalizer simulation case 2','MMSE equalizer theory case 2');
axis([1 14 10^-4 1])
grid on;
没有合适的资源?快使用搜索试试~ 我知道了~
eighth-homework.zip_MMSE 均衡_ZF MMSE_mmse均衡_信道均衡_信道均衡mmse
共3个文件
m:2个
asv:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 61 浏览量
2022-07-15
17:37:54
上传
评论
收藏 5KB ZIP 举报
温馨提示
实现两种信道环境下的ZF均衡和MMSE均衡,并比较两者的误码率曲线
资源详情
资源评论
资源推荐
收起资源包目录
eighth-homework.zip (3个子文件)
eighth-homework
test_of_equalizer.m 6KB
equalizer.m 3KB
test_of_equalizer.asv 6KB
共 3 条
- 1
御道御小黑
- 粉丝: 58
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0