📄 mimo-performances.m
字号:
N = 1000; %信息包含帧数
a = 1; %高斯信道中幅度衰减
FrameLim = 1000; %终止帧数目
EbN0db = [0:1:30]; %输入信噪比矢量
FRAME = N; %传送的数据比特(帧)
fprintf('+ + + Please be patient. Wait a while to get the result. + + +\n');
for nEN = 1:length(EbN0db) %计算31次连续变化的输入信噪比对应的误比特率
en = 10^(EbN0db(nEN)/10); %计算实际信噪比,将前面的db化到实际比值
sigma = sqrt(1/en/2); %AWGN信道噪声标准差
cber0(nEN) = 0; %1T1R误比特率
cerrs0(nEN) = 0; %1T1R总误比特数
cber12(nEN) = 0; %1T2R误比特率
cerrs12(nEN) = 0; %1T2R总误比特数
nframe = 0; %发送次数参量,用来标志发送次数
while nframe < FrameLim %发送过程
nframe = nframe + 1;
data = randint(1, N); %产生N个随机数用来发送,这里N个随机数为1帧
H = (randn + j*randn)/sqrt(2); %独立瑞利MIMO信道模型
sMatrix0 = 2 .* data - 1; %2PSK调制
rMatrix0 = H * sMatrix0; %接收到的信号(无噪声)
nMatrix0 = sigma*(randn(1,FRAME)+j*randn(1,FRAME)); %AWGN噪声
rMatrix0 = rMatrix0 + nMatrix0; %接收到的信号(含噪声)
dMatrix0= H'* rMatrix0; %利用与H共轭矩阵相乘恢复接收信号
dec1(1,1:N)=real(dMatrix0(1,1:N)); %2PSK解调
%for i = 1:N
% dec1(1,i)=real(dMatrix0(1,i))
%end
dec = (sign(dec1)+1)/2; %判决发送的是0还是1
cerr0 = length(find(dec(1:N) ~= data(1:N))); %计算该帧信号中的误比特数量
cerrs0(nEN) = cerrs0(nEN) + cerr0; %对每帧的误比特数量进行累加
end %end of while
cerrs0(nEN);
cber0(nEN) = cerrs0(nEN)/(N)/nframe; %计算总的误比特率
end
figure
semilogy(EbN0db,cber0) %做图
hold on;
%1发2收
for nEN = 1:length(EbN0db) %计算31次连续变化的输入信噪比对应的误比特率
en = 10^(EbN0db(nEN)/10); %计算实际信噪比,将前面的db化到实际比值
sigma = sqrt(1/en/2); %AWGN信道噪声标准差
cber12(nEN) = 0;
cerrs12(nEN) = 0;
nframe = 0; %发送次数参量,用来标志发送次数
while nframe < FrameLim %发送过程
nframe = nframe + 1;
data = randint(1, N); %产生N个随机数用来发送,这里N个随机数为1帧
H1 = (randn + j*randn)/sqrt(2); %独立瑞利MIMO信道模型
H2 = (randn + j*randn)/sqrt(2); %独立瑞利MIMO信道模型
sMatrix0 = 2 .* data - 1; %2PSK调制
rMatrix1 = H1 * sMatrix0; %接收到的信号(无噪声)
rMatrix2 = H2 * sMatrix0; %接收到的信号(无噪声)
nMatrix0 = sigma*(randn(1,FRAME)+j*randn(1,FRAME)); %AWGN噪声
rMatrix1 = rMatrix1 + nMatrix0; %接收到的信号(含噪声)
rMatrix2 = rMatrix2 + nMatrix0; %接收到的信号(含噪声)
dMatrix1= H1'* rMatrix1; %利用与H共轭矩阵相乘恢复接收信号
dMatrix2= H2'* rMatrix2; %利用与H共轭矩阵相乘恢复接收信号
dMatrix=dMatrix1+dMatrix2;
dec1(1,1:N)=real(dMatrix(1,1:N)); %2PSK解调
dec = (sign(dec1)+1)/2; %判决发送的是0还是1
cerr12 = length(find(dec(1:N) ~= data(1:N))); %计算该帧信号中的误比特数量
cerrs12(nEN) = cerrs12(nEN) + cerr12; %对每帧的误比特数量进行累加
end %end of while
cerrs12(nEN);
cber12(nEN) = cerrs12(nEN)/(N)/nframe; %计算总的误比特率
end
figure
semilogy(EbN0db,cber12) %做图
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -