文章目錄
-
- 1.原理相關
- 2.公式推導
- 3.仿真實作與分析
此篇為信号通過多徑時變信道仿真,基礎篇可參考:
QPSK基礎與多徑信道Matlab仿真
OFDM基礎與多徑信道Matlab仿真
1.原理相關
多徑信道:信号通過多條路徑抵達接收端,由散射等引起,是時延。
時變信道:信道狀态随時間變化與發送序列對應,分為慢衰落信道和快衰落信道,由運動引起,是時變。
2.公式推導
- 首先看通過時不變信道的卷積推導
- 再類比推導時變信道的卷積方法
3.仿真實作與分析
- QPSK調制+時變信道+誤碼率仿真
close all;clc;
%% 參數設定
SNR=1:20; %信噪比變化範圍
snr=10.^(SNR/10); %将信噪比轉化成直角坐标
M=64;
N=100;
pathnum=3;
l_cp=pathnum+1;
w=zeros(2*M,N);
ww=zeros(2*M,N);
%% 初始序列生成qpsk調制
for ii=1:length(SNR)
a=randi([0 1],1,2*M*N);
a2= reshape(a,log2(4),[])';
a10= bi2de(a2);
xt=pskmod(a10,4,pi/4);
x=reshape(xt,M,N); %M×N
x1=zeros(M+l_cp,1);
x2=zeros(M,1);
for jj=1:N
h=channel_generation(pathnum,M) %信道設定
x2=x(:,jj);
x1=[x2(M-l_cp+1:M);x2]; %+cp x1=[M+1_cp×1]
%% 時變多徑信道
yqq=zeros(M,1);
yqql=zeros(M,1);
cw3=1;
for cw1=1:M
cw2=cw3;
for cw4=pathnum:-1:1
yqq(cw1)=x1(cw2+2)*h(cw4,cw1);
yqql(cw1)=yqql(cw1)+yqq(cw1);
cw2=cw2+1;
end
cw3=cw3+1;
end %經過時變信道+去cp
%% 均衡矩陣
H=zeros(M,M);
for iv=1:M
H1=zeros(1,M);
H1(1)=h(1,iv);
jv=2;
for kv=M:-1:M-pathnum+2
H1(kv)=h(jv,iv);
jv=jv+1;
end
H(iv,:)=circshift(H1,iv-1); %每次求出一行(均按第一行形式)在循環移位
end
%% awgn
[m,n]=size(yqql);
N0=1/2/snr(ii);
N0_dB=10*log10(N0);
ni=wgn(m,n,N0_dB);
ys=yqql+ni;
%% 檢測解調
% %迫0均衡
x_dect=pinv(H)*ys; %均衡 Y=H·X→X=invH×Y inv(A)*B=B/A;inv(B)*A=B\A
xxx=reshape(x_dect,[],1); %并串變換
yj=pskdemod(xxx,4,pi/4);
De_data1 = reshape(yj,[],1);
De_data2 = de2bi(De_data1,2);
w(:,jj)= reshape(De_data2',[],1);
% MMSE均衡
[nn,mm]=size(H*H');
W=H'*pinv(H*H'+1/SNR(ii)*eye(nn,mm));
wx_dect=W*ys;
wwx=reshape(wx_dect,[],1); %并串變換
wyj=pskdemod(wwx,4,pi/4);
wDe_data1 = reshape(wyj,[],1);
wDe_data2 = de2bi(wDe_data1,2);
ww(:,jj)= reshape(wDe_data2',[],1);
end
q=reshape(w,1,2*M*N);
[number1,BER_ZF(ii)] = symerr(a,q); %計算錯誤比特數和誤碼率
wq=reshape(ww,1,2*M*N);
[number1,BER_MMSE(ii)] = symerr(a,wq); %計算錯誤比特數和誤碼率
end
BER_ZF
BER_MMSE
%% 繪制圖形
figure;
semilogy(SNR,BER_ZF,'-r*');hold on;
semilogy(SNR,BER_MMSE,'-g*');hold on;
% text(10,0.01,'MMSE');
axis([-1,20,10^-4,1]);
title('誤碼性能分析');
xlabel('信噪比SNR(dB)');ylabel('誤碼率BER');
運作結果:
- OFDM調制+時變信道+誤碼率仿真
close all;clc;
%% 參數設定
SNR=1:20; %信噪比變化範圍
snr=10.^(SNR/10); %将信噪比轉化成直角坐标
M=64;%Nfft
N=100; %符号數
pathnum=2 ;
l_cp=pathnum+1; %保護間隔長度
BER_S=zeros(1,length(SNR)); %誤碼率
BER_Ss=zeros(1,length(SNR)); %誤碼率
%H=[];y6=[];y_dect=[];
%w=zeros(2*M,N);
ws=zeros(2*M,N);
%% 初始序列生成qpsk調制
for ii=1:length(SNR)
a=randi([0 1],1,2*M*N);
a2= reshape(a,log2(4),[])';
a10= bi2de(a2);
xt=pskmod(a10,4,pi/4);
x=reshape(xt,M,N); %M×N
x1=zeros(M+l_cp,1);
x2=zeros(M,1);
for jj=1:N
h=channel_generation(pathnum,M) %信道設定
% hh=(randn(pathnum,1)+1i*randn(pathnum,1))*sqrt(1/2/pathnum);
% for tcv=1:M
% h(:,tcv)=hh;
% end %時不變信道信道設定-測試Y和H的生成
x2=x(:,jj);
x2i=ifft(x2)*sqrt(M);%ifft
x1=[x2i(M-l_cp+1:M);x2i]; %+cp x1=[M+1×1]
%% 時變多徑信道
yqq=zeros(M,1);
yqql=zeros(M,1);
cw3=1;
for cw1=1:M
cw2=cw3;
for cw4=pathnum:-1:1
yqq(cw1)=x1(cw2+2)*h(cw4,cw1);
yqql(cw1)=yqql(cw1)+yqq(cw1);
cw2=cw2+1;
end
cw3=cw3+1;
end %經過時變信道+去cp
%% 均衡矩陣
H=zeros(M,M);
for iv=1:M
H1=zeros(1,M);
H1(1)=h(1,iv);
jv=2;
for kv=M:-1:M-pathnum+2
H1(kv)=h(jv,iv);
jv=jv+1;
end
H(iv,:)=circshift(H1,iv-1); %每次求出一行(均按第一行形式)在循環移位
end
%% awgn
[m,n]=size(yqql);
N0=1/2/snr(ii);
N0_dB=10*log10(N0);
ni=wgn(m,n,N0_dB);
ys=yqql+ni;
%% 檢測解調
%% 均衡1(相位)
% HH=fft(h,M) ;
% y6= fft(ys)/sqrt(M);
% y_dect=y6.*conj(HH); %信道估計+均衡
% y7=reshape(y_dect,[],1); %并串變換
% yj=pskdemod(y7,4,pi/4); %qpsk解調
% De_data1 = reshape(yj,[],1);
% De_data2 = de2bi(De_data1,2);
% w(:,jj)= reshape(De_data2',[],1); %轉換同輸入a形式,便于誤碼率計算
%% 均衡2 Y=Hd*H*Hid*X+Hd*N
[sss,sssss]=size(H);
% fft(H(:,1));
dftmtx(sss);
Hs=dftmtx(sss)*H*dftmtx(sss)'
y6s= fft(ys)/sqrt(M);
y_dects=pinv(Hs)*y6s; % 均衡*HS^-1
y7s=reshape(y_dects,[],1);
yjs=pskdemod(y7s,4,pi/4);
De_data1s = reshape(yjs,[],1);
De_data2s = de2bi(De_data1s,2);
ws(:,jj)= reshape(De_data2s',[],1);
end
qs=reshape(ws,1,2*M*N);
[number1,BER_Ss(ii)] = symerr(a,qs); %計算錯誤比特數和誤碼率
end
BER_Ss
%% 繪制圖形
figure
semilogy(SNR,BER_Ss,'-g*');hold on;
%text(10,0.01,'MMSE');
axis([-1,20,10^-4,1]);
title('誤碼性能分析');
xlabel('信噪比SNR(dB)');ylabel('誤碼率BER');
channel_generation為時變信道産生函數。最終當信道變化慢時信道矩陣Hs理應仍為對角矩陣,但本程式結果并不明顯,并且誤碼率變化好像也有悖理論分析,仍需學習糾正完善。
兩種仿真非常類似,隻是OFDM多了其應有的部分,H與Y輸出的方式是相同的。
相關博文
- QPSK基礎與多徑信道Matlab仿真
- OFDM基礎與多徑信道Matlab仿真