function [BER] = STBC_2x2(SNR_Range,NFFT,frame)
s_Num = NFFT;
%导频及数据位置
%等间距
pilot_num = 0;
pilot_pos = [];
data_pos = 1:1:s_Num/2;
for ii=1:length(SNR_Range)
SNR=SNR_Range(ii)
error_num_bin=0;
for j = 1:1:frame
M=4;
x = randi([0 M-1],(NFFT - pilot_num*2),1);%生产随机信号
symbol_bin = qammod(x,M);
x1 = zeros(NFFT,1);
x2 = zeros(NFFT,1);
x1(pilot_pos,1)=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% stbc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x1((NFFT/2)+1:end,:) = conj( x1(1:NFFT/2,:));
pilot_pos = find(x1 ~= 0);
x1(data_pos,1)=symbol_bin(1:length(data_pos),1);
x1((NFFT/2)+1:end,:) = conj( x1(1:NFFT/2,:));
x2(data_pos,1)=symbol_bin((length(data_pos)) + 1:end,1);
x2(pilot_pos,1)=0;
x2((NFFT/2)+1:end,:) = conj( x2(1:NFFT/2,:));
cx2=(-conj(x2));
cx1=conj(x1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ifft %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t_x1 = ifft(x1);
t_x2 = ifft(x2);
t_cx2 = ifft(cx2);
t_cx1 = ifft(cx1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 多径信道 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a11=[0.11 0.13 0.21 0.16 0.15]; %多径的幅度
d11=[3 5 7 11 14]; %各径的延迟
a12=[0.11 0.09]; %多径的幅度
d12=[2 8]; %各径的延迟
a21=[0.11 0.1]; %多径的幅度
d21=[4 9]; %各径的延迟
a22=[0.1 0.09]; %多径的幅度
d22=[6 12]; %各径的延迟
x1 = [t_x1;t_cx2];
x2 = [t_x2;t_cx1];
[x11,h11]=multipath_mimo(NFFT,x1,a11,d11);
[x22,h12]=multipath_mimo(NFFT,x2,a12,d12);
[yx11,h21]=multipath_mimo(NFFT,x1,a21,d21);
[yx22,h22]=multipath_mimo(NFFT,x2,a22,d22);
y11_bin00 = x11 + x22;%第一个时刻x1 y11_bin00(1:nfft,:)
y12_bin00 = yx11 + yx22;%第二个时刻x2 y12_bin00(1:nfft,:)
y11_bin0 = y11_bin00(1:NFFT,:);
y21_bin0 = y11_bin00(NFFT+1:end,:);
y12_bin0 = y12_bin00(1:NFFT,:);
y22_bin0 = y12_bin00(NFFT+1:end,:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 加噪声 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s_Num = NFFT;
TxSymbol(:,1) = [y11_bin0;y21_bin0];
TxSymbol(:,2) = [y12_bin0;y22_bin0];
SignalPower=sum(sum(abs(TxSymbol(:,1).*TxSymbol(:,1))))/(length(TxSymbol(:,1))); % Twice MRRC power
NoisePower=SignalPower*10^(-0.65*SNR/10);
attn=sqrt(NoisePower);
r1 = (randn(s_Num*2,1)+1i*randn(s_Num*2,1));
AWGNoise1=1/sqrt(2)*r1*attn;
SignalPower2=sum(sum(abs(TxSymbol(:,2).*TxSymbol(:,2))))/(length(TxSymbol(:,2))); % Twice MRRC power
NoisePower2=SignalPower2*10^(-0.65*SNR/10);
attn2=sqrt(NoisePower2);
r2 = (randn(s_Num*2,1)+1i*randn(s_Num*2,1));
AWGNoise2=1/sqrt(2)*r2*attn2;
y11_bin = y11_bin0 + AWGNoise1(1:NFFT,1);
y12_bin = y12_bin0 + AWGNoise2(1:NFFT,1);
y21_bin = y21_bin0 + AWGNoise1(NFFT+1:end,1);
y22_bin = y22_bin0 + AWGNoise2(NFFT+1:end,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Y11_bin = fft(y11_bin);
Y12_bin = fft(y12_bin);
Y21_bin = fft(y21_bin);
Y22_bin = fft(y22_bin);
h = [h11,h12,h21,h22];
H = fft(h);
H11 = H(:,1);
H12 = H(:,2);
H21 = H(:,3);
H22 = H(:,4);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s1_bin = zeros(NFFT,2);
for z = 1:1:NFFT
s1_bin(z,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(z,2)=(conj(H12(z)).*Y11_bin(z)-H11(z).*conj(Y21_bin(z))+conj(H22(z)).*(Y12_bin(z))-H21(z).*conj(Y22_bin(z)));
end
re_data = s1_bin(data_pos,:);
s1_bin1 = reshape(re_data,[],1);
output_qpsk_alamouti_bin = qamdemod(s1_bin1,M);
% Check symbol error rate.
[num_bin,~] = biterr(x,output_qpsk_alamouti_bin);
error_num_bin = error_num_bin + num_bin;
end
BER_alamouti_bin=error_num_bin/(frame*128*2);
BER(ii)=BER_alamouti_bin;
end
end

滋巴糯米团
- 粉丝: 14
最新资源
- 基于Qt数据库项目实现Sqlite3为例 (1).zip
- 基于仓颉编程语言的web快速开发框架.zip
- 基于51单片机的心率检测仪资源下载.zip
- 基于OpenCv的SVM实现车牌检测与识别系统.zip
- 基于pyqt5和MySQL的学生管理系统.zip
- 基于二次曲面模型的动态对象SLAM.zip
- 基于SpringBoot + Vue的社区桶装水配送平台.zip
- 一种基于氮转换速率的算法.zip
- 基于QChart和QChartView创建各种图表和美化图表.zip
- 基于SpringBoot + Vue在线电子书阅读平台.zip
- 基于爬虫技术的商品数据监测系统.zip
- 基于SpringBoot + Vue的城市社区食堂管理系统.zip
- 基于Witin-nn的ResNet18量化抗噪研究.zip
- 基于SpringBoot + Vue的实验室耗材管理系统.zip
- 针对月时间长度的重力观测数据的时頻分析方法和绘图.zip
- 基于深度学习的边缘提取方法.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



评论17