ZF和MMSE准则线性预编码的比较
1.問題描述:
?ZF和MMSE準則線性預編碼的比較
2.部分程序:
?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ? ? ? ? ? ? ? ? ? ZF和MMSE準則線性預編碼的比較
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
close all;
warning off;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ? ? ? ? ? ? ? ? ? system parameter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nt = 4; % the Tx antenna number
Nr = 4; % the Rx antenna number
num = 100; % 幀內信道保持不變,幀的符號數
M = 4;% QPSK modulation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ? ? ? ? ? ? ? ? ? simulation parameter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Iter_num = 10; % iteration in some snr
SNR = [0:2:10];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ? ? ? ? ? ? ? ? ? ? ? ? init
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Len = length(SNR);
ber_mmse = zeros(1,Len);
ber_zf = zeros(1,Len);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ? ? ? ? ? ? ? ? ? ? ? ? main process
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for index = 1:Len;%不同信噪比的循環
? ??
? ? snr = 10.^(SNR(index)/10);
? ? ea = 1;% 每個天線發射的功率,也即信號向量中每個元素的功率
? ? es = ea*Nt; % 總共的發射功率
? ? sigma_n2 = es/snr;% noise power
? ??
? ? for cnt = 1:Iter_num;% 信道的實現次數的循環
? ? ? ??
? ? ? ? H = sqrt(1/2)*(randn(Nr,Nt)+j*randn(Nr,Nt));% H
? ? ? ? MMSE_F = H'*inv(H*H'+sigma_n2/ea*eye(Nt));% H的MMSE估計
? ? ? ? ZF_F = H'*inv(H*H');% H的ZF估計
? ? ? ? beta_mmse = sqrt(es/norm(MMSE_F,'fro').^2);
? ? ? ? beta_zf = sqrt(es/norm(ZF_F,'fro').^2);
? ? ? ? F_MMSE = beta_mmse*MMSE_F; % MMSE 的預編碼矩陣
? ? ? ? F_ZF = beta_zf*ZF_F;% % ZF的預編碼矩陣
? ? ? ??
? ? ? ? for sym_index = 1:num; %在一幀數據符號中,信道保持不變
? ? ? ? ? ??
? ? ? ? ? ? Source = randint(Nt,1,M);% random data generator
? ? ? ? ? ? Sym = pskmod(Source,M,pi/4,'gray'); % qpsk modulator
? ? ? ? ? ? Sym_mmse = F_MMSE*Sym;% 對符號進行MMSE預編碼
? ? ? ? ? ? Sym_zf = F_ZF*Sym;% 對符號進行ZF預編碼
? ? ? ? ? ? noise = sqrt(sigma_n2/2)*(randn(Nr,2)+j*randn(Nr,2));%生成噪聲功率為sigma_n2
? ? ? ? ? ? y_mmse = H*Sym_mmse + noise(:,1);% 通過信道并加噪聲
? ? ? ? ? ? y_zf = H*Sym_zf + noise(:,2);% 通過信道并加噪聲
? ? ? ? ? ? r_mmse = 1/beta_mmse*y_mmse;% 進行接收端的縮放
? ? ? ? ? ? r_zf = 1/beta_zf*y_zf;% 進行接收端的縮放
? ? ? ? ? ? Rec_Data_mmse = pskdemod(r_mmse,M,pi/4,'gray');% 對接收信號進行判決
? ? ? ? ? ? Rec_Data_zf = pskdemod(r_zf,M,pi/4,'gray');% 對接收信號進行判決
? ? ? ? ? ??
? ? ? ? ? ? [err ratio] = biterr(Rec_Data_mmse,Source,log2(M));% ber
? ? ? ? ? ? ber_mmse(1,index) = ber_mmse(1,index) + ratio;
? ? ? ? ? ? [err ratio] = biterr(Rec_Data_zf,Source,log2(M));%ber
? ? ? ? ? ? ber_zf(1,index) = ber_zf(1,index) + ratio;
? ? ? ? end; % loop for num
? ? ? ??
? ? end; % loop for iteration
? ??
end % loop for snr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ? ? ? ? ? ? ? ? ? ? ? ? ?plot
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ber_mmse = ber_mmse/Iter_num/num;
ber_zf = ber_zf/Iter_num/num;
figure(1);
semilogy(SNR,ber_mmse,'LineWidth',2,'Color',[0 0 0],'Marker','s');
hold on;
semilogy(SNR,ber_zf,'LineWidth',2,'Color',[0 0 0],'Marker','*');
grid on
xlabel('SNR(dB)');ylabel('BER');
legend('MMSE pre-coding','ZF pre-coding');
3.仿真結論:
D00002
總結
以上是生活随笔為你收集整理的ZF和MMSE准则线性预编码的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几何检测
- 下一篇: 格林函数的物理意义是什么?