clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
SNR_Range=0:2:12;
b=2;
for ii=1:length(SNR_Range)
SNR=SNR_Range(ii);
num_errors=200;
cycle = 0;
error_num_bin=0;
error_num_gray=0;
error_num_normal=0;
h = waitbar(0,'1','Name','Mostafa Amin-Naji Adv. Comm.');
avrage_p_y11=0;
avrage_p_y21=0;
avrage_p_y12=0;
avrage_p_y22=0;
avrage_p_n1t1=0;
avrage_p_n1t2=0;
avrage_p_n2t1=0;
avrage_p_n2t2=0;
s=1;
while ((error_num_bin<num_errors) )
s=s+1;
%bits
bitsnumber=4;
%QPSK
M=4;
x = randi([0 M-1],bitsnumber/2,1); % Random symbols
symbol_bin = pskmod(x,M,pi/4,'bin');
symbol_gray = pskmod(x,M,pi/4,'gray');
symbol_normal=symbol_bin;
%H
H11=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
H12=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
H21=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
H22=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
%Noise
N11=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
N12=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
N21=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
N22=((randn(1,1))+1i*(randn(1,1)))./sqrt(2);
for z=1:bitsnumber/4
x1_bin=symbol_bin(2*z-1,1);
x2_bin=symbol_bin(2*z,1);
x1_gray=symbol_gray(2*z-1,1);
x2_gray=symbol_gray(2*z,1);
x1_normal=symbol_normal(2*z-1,1);
x2_normal=symbol_normal(2*z,1);
%
sigma=sqrt(((10^((SNR/10))))/2);
H11(z)=sigma.*H11(z);
H12(z)=sigma.*H12(z);
H21(z)=sigma.*H21(z);
H22(z)=sigma.*H22(z);
Y11_bin=H11.*x1_bin+H12.*x2_bin+N11;
Y12_bin=H21.*x1_bin+H22.*x2_bin+N12;
Y21_bin=H11.*(-conj(x2_bin))+(H12.*conj(x1_bin))+N21;
Y22_bin=H21.*(-conj(x2_bin))+H22.*conj(x1_bin)+N22;
Y11_gray=H11.*x1_gray+H12.*x2_gray+N11;
Y12_gray=H21.*x1_gray+H22.*x2_gray+N12;
Y21_gray=H11.*(-conj(x2_gray))+(H12.*conj(x1_gray))+N21;
Y22_gray=H21.*(-conj(x2_gray))+H22.*conj(x1_gray)+N22;
Y1_normal=H11.*x1_normal+N11;
Y2_normal=H22.*x2_normal+N22;
Y_normal(1,1)=Y1_normal;
Y_normal(2,1)=Y2_normal;
end
%++++++++++++++++++++++++++++++++++++++++
avrage_p_y11=abs(Y11_gray)^2+avrage_p_y11;
avrage_p_y21=abs(Y21_gray)^2+avrage_p_y21;
avrage_p_y12=abs(Y12_gray)^2+avrage_p_y12;
avrage_p_y22=abs(Y22_gray)^2+avrage_p_y22;
avrage_p_n1t1=avrage_p_n1t1+abs(N11)^2;
avrage_p_n1t2=avrage_p_n1t2+abs(N12)^2;
avrage_p_n2t1=avrage_p_n2t1+abs(N21)^2;
avrage_p_n2t2=avrage_p_n2t2+abs(N22)^2;
L=length(Y11_bin)*2;
%
s1_bin(1,1)=(conj(H11(z)).*Y11_bin(z)+H12(z).*conj(Y21_bin(z))+conj(H21(z)).*(Y12_bin(z))+H22(z).*conj(Y22_bin(z)));
s1_bin(2,1)=(conj(H12(z)).*Y11_bin(1,z)-H11(z).*conj(Y21_bin(z))+conj(H22(z)).*(Y12_bin(z))-H21(z).*conj(Y22_bin(z)));
s1_gray(1,1)=(conj(H11(z)).*Y11_gray(z)+H12(z).*conj(Y21_gray(z))+conj(H21(z)).*(Y12_gray(z))+H22(z).*conj(Y22_gray(z)));
s1_gray(2,1)=(conj(H12(z)).*Y11_gray(1,z)-H11(z).*conj(Y21_gray(z))+conj(H22(z)).*(Y12_gray(z))-H21(z).*conj(Y22_gray(z)));
output_qpsk_alamouti_bin = pskdemod(s1_bin,M,pi/4,'bin');
% output_qpsk_bin = pskdemod(s1_bin,M,pi/4,'bin');
output_qpsk_alamouti_gray = pskdemod(s1_gray,M,pi/4,'gray');
% output_qpsk_gray = pskdemod(s1_gray,M,pi/4,'gray');
output_qpsk_normal = pskdemod(Y_normal,M,pi/4,'bin');
waitbar(error_num_bin / num_errors,h,sprintf('calculating BER for SNR= %d',SNR))
% Check symbol error rate.
[num_bin,~] = biterr(x,output_qpsk_alamouti_bin);
[num_gray,~] = biterr(x,output_qpsk_alamouti_gray);
[num_normal,~] = biterr(x,output_qpsk_normal);
error_num_bin = error_num_bin + num_bin;
error_num_gray = error_num_gray + num_gray;
error_num_normal = error_num_normal + num_normal;
cycle = cycle+4;
end
BER_alamouti_bin=error_num_bin/cycle
BER_alamouti_gray=error_num_gray/cycle
BER_normal=error_num_normal/cycle
delete(h)
Final_BER_alamouti_bin(ii)=BER_alamouti_bin;
Final_BER_alamouti_gray(ii)=BER_alamouti_gray;
Final_BER_normal(ii)=BER_normal;
avarage_p_y=(avrage_p_y11+avrage_p_y21+avrage_p_y12+avrage_p_y22)/8;
avrage_p_n=(avrage_p_n2t2+avrage_p_n1t1+avrage_p_n2t1+avrage_p_n1t2)/8;
SNR_db(1,ii)=10*log10((avarage_p_y-avrage_p_n)/avrage_p_n)
end
figure
semilogy(SNR_Range,Final_BER_alamouti_bin,'b-o')
hold on
semilogy(SNR_Range,Final_BER_alamouti_gray,'r-s')
axis([SNR_Range([1 end]) 1e-5 1e0]);
grid on; xlabel('SNR'); ylabel('BER')
legend('bin QPSK Alamouti STBC','gray QPSK Alamouti STBC');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2021a,我录制了仿真操作录像,可以跟着操作出仿真结果 2.领域:2x2mimo通信系统 3.内容:QPSK-Alamouti-STBC的2x2mimo通信系统误码率 4.适合人群:本,硕等教研学习使用
资源推荐
资源详情
资源评论
收起资源包目录
基于QPSK-Alamouti-STBC的2x2mimo通信系统误码率matlab仿真.rar (2个子文件)
基于QPSK-Alamouti-STBC的2x2mimo通信系统误码率matlab仿真
操作录像0030.avi 33.94MB
Runme.m 4KB
共 2 条
- 1
资源评论
fpga和matlab
- 粉丝: 16w+
- 资源: 2558
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 隐马尔可夫实践(生物序列)
- CLShanYanSDKDataList.sqlite
- 2024年度乐材教育春季高中数学教师专业测试答案.docx
- 选择题-数组&类I.docx
- cn-msdn-library-for-visual-studio-2008-service-pack-1-x86-dvd-x1
- cn-msdn-library-for-visual-studio-2008-service-pack-1-x86-dvd-x1
- cn-msdn-library-for-visual-studio-2008-service-pack-1-x86-dvd-x1
- Screenshot_20240517_181056.jpg
- Oracle中查询哪个存储过程中引用包含T-USER-INFO表语句的命令脚本
- 一个图层擦除掉多个不需要的图层
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功