clear all;
close all;
clc;
SNR=0:20;
N=128; %载波数目
L=5; %多径数
M=N+1/4*N+L-1; %卷积之后序列长度 循环前缀至少大于L多径数目
table=[-1-1j -1+1j 1-1j 1+1j]; %可以对信号功率归一化:*1/sqrt(2)
%预分配空间
N0=zeros(1,length(SNR));
for k=1:length(SNR)
error=0;
Eb=1; %若前面归一化了 则Eb=0.5
N0(k)=Eb./(10.^(SNR(k)./10)); %方差
for i=1:100 %比特数:100组*128*2
data0=randi([0 1],N,2);
de0=bi2de(data0,'left-msb');
data0mod=table(de0+1); %1*128 调制
data1=randi([0 1],N,2);
de1=bi2de(data1,'left-msb');
data1mod=table(de1+1);
%瑞利信道 频选信道
h00=1/sqrt(10)*(randn(1,5)+randn(1,5)*1j); %对方差sigma=1归一化 h00信道总的方差为1
h01=1/sqrt(10)*(randn(1,5)+randn(1,5)*1j);
h10=1/sqrt(10)*(randn(1,5)+randn(1,5)*1j);
h11=1/sqrt(10)*(randn(1,5)+randn(1,5)*1j);
% noise=AWGN(0,N0(k),M);
noise=sqrt(N0(k))*(randn(1,M)+1j*randn(1,M))*1/sqrt(2);
%ifft 会把能量归一化
data0ifft=ifft(data0mod,N)*sqrt(N);
data1ifft=ifft(data1mod,N)*sqrt(N);
%加CP
data0ifftCP=[data0ifft(97:128) data0ifft];
data1ifftCP=[data1ifft(97:128) data1ifft];
%y=h*s+n
y0=conv(data0ifftCP,h00)+conv(data1ifftCP,h01)+noise;
y1=conv(data0ifftCP,h10)+conv(data1ifftCP,h11)+noise;
%去CP
y00=y0(33:160);
y11=y1(33:160);
%fft
y00fft=fft(y00,N)/sqrt(N);
y11fft=fft(y11,N)/sqrt(N);
%均衡:对一个OFDM符号中的每一个小的码元均衡
H00=fft(h00,N)/sqrt(N);
H01=fft(h01,N)/sqrt(N);
H10=fft(h10,N)/sqrt(N);
H11=fft(h11,N)/sqrt(N);
%对每一个子载波上的数据都要均衡
for a=1:N
H=[H00(1,a) H01(1,a);H10(1,a) H11(1,a)];
ys(:,a)=inv(H)*[y00fft(1,a);y11fft(1,a)];
end
ys0=ys(1,:);
ys1=ys(2,:);
for n=1:2
for m=1:N
if(real(ys(n,m))>0)
datademod(n,2*m-1)=1;
else
datademod(n,2*m-1)=0;
end
%判断虚部
if(imag(ys(n,m))>0)
datademod(n,2*m)=1;
else
datademod(n,2*m)=0;
end
end
end
data0=reshape(data0',1,2*N);
data1=reshape(data1',1,2*N);
[e,ra]=biterr([data0;data1],datademod); %error=sum(xor(data,datademod)); error=sum(error); 计算很慢
error=error+e;
end
ratio(k)=error/(4*N*100);
end
figure;
ber = berfading(SNR,'oqpsk',1);
semilogy(SNR,ratio,'-r','LineWidth',1.5);
grid on;
hold on;
semilogy(SNR,ber,'-.*b','LineWidth',1.5);
title('QPSK在2*2Rayleigh频选信道场景下,误码性能分析');
xlabel('Eb/N0');
ylabel('Pb');
axis([0 20 10^(-6) 1]);
legend('Rayleigh-OFDM-MIMO 2*2-biterr','QPSK调制下标准瑞利衰落');