clc;
clear all;
close all;
warning off;
addpath 'func\'
%OFDM长度
Nfft = 512;
%子载波数目
NCarrier = 100;
%符号数/载波
Nsymbols = 660;
%循环前缀长度
Ncp = 10;
Nadder = Nfft+Ncp;
Modes = 4;
%位数/符号
Nbits = log2(Modes);
%发送天线矩阵
Tr_matrix =[1 2;-2+j 1+j];
NTr_matrix= size(Tr_matrix,1);
Nt = size(Tr_matrix',2); %发射天线数目
Nr = 2; %接收天线数目
%发射
[Nxx,data_eta,data_delta,data_eps,data_cojm] = func_trans_x(Nt,Tr_matrix,NTr_matrix);
%子载波
Carriers = (1: NCarrier) + (floor(Nfft/4) - floor(NCarrier/2));
Len_carriers = Nfft-Carriers+2;
Tx_training = func_training_symbol(Nt,NCarrier);
Nbase = NCarrier * Nsymbols;
SNRs = [0:2:20];
%绘图信息存储矩阵
Bers=zeros(length(SNRs));
idx = 0;
for j_snr = SNRs
j_snr
idx = idx + 1;
Nerror = zeros(1,Nr);
data_buffer1 = zeros(NCarrier,Nsymbols,Nr);
data_bits = zeros(Nbase,Nbits,Nr);
%生成随机数用于仿真
Tsignal = round(rand(Nbase,Nbits));
Tsignal2 = bi2de(Tsignal);
%PSK调制
Tsignal_mod = pskmod(Tsignal2,Modes,0);
Tcar_mat = reshape(Tsignal_mod,NCarrier,Nsymbols);
for st1=1:Nt:Nsymbols
data = [];
for st2=1:Nt
data=[data;Tcar_mat(:,st1+st2-1)];
end
%STBC
data_stbc = func_stbc(data,Tr_matrix,NTr_matrix,NCarrier,Nt);
%添加训练序列
data_stbc = [Tx_training;data_stbc];
data_rec = zeros(1,Nadder*(NTr_matrix+1),Nr);
for st11=1:Nr
for st2=1:Nt
data_tra = reshape(data_stbc(:,st2),NCarrier,NTr_matrix+1);
data_tra_ifft = zeros(Nfft,NTr_matrix+1);
data_tra_ifft(Carriers,:) = data_tra(1:NCarrier,:);
data_tra_ifft(Len_carriers,:) = conj(data_tra(1:NCarrier,:));
%IFFT
time_matrix = ifft(data_tra_ifft);
time_matrix =[time_matrix((Nfft-Ncp+1):Nfft,:);time_matrix];
tx = time_matrix(:)';
%信道
txn = func_channel(tx,st2,j_snr);
data_rec(1,:,st11) = data_rec(1,:,st11)+txn;
end
%接收机
Rx_spec = reshape(data_rec(1,:,st11),Nadder,NTr_matrix+1);
[p,L,Wk,Y_buf] = func_rec_fft(Rx_spec,Ncp,Nt,Nadder,Nfft,NTr_matrix,Carriers,NCarrier,Tx_training);
h = p/NCarrier;
H_buf = func_H(h,NCarrier,Nt,L,Wk);
%获得接收数据
data_recf = func_rec_data(data_eta,data_cojm,data_eps,data_delta,Nxx,Y_buf,H_buf,NCarrier);
%解调
r_sym = pskdemod(data_recf,Modes,0);
data_buffer1(:,st1:st1+Nt-1,st11) = r_sym;
end
end
data_bufferf = zeros(Nbase,Nr);
for st11=1:Nr
tmps1 = data_buffer1(:,:,st11);
data_bufferf(:,st11) = tmps1(:);
data_bits(:,:,st11) = de2bi(data_bufferf(:,st11));
for st22=1:Nbase
for st33=1:Nbits
if data_bits(st22,st33,st11)~=Tsignal(st22,st33)
Nerror(st11) = Nerror(st11) + 1;
end
end
end
end
Bers(idx)=mean(Nerror/(Nbase));
end
figure;
semilogy(SNRs,Bers,'b-s');
xlabel('信噪比/dB');
ylabel('误码率');
grid on
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2021a,包含仿真操作录像,操作录像使用windows media player播放。 2.领域:OFDM+STBC 3.内容:OFDM+STBC通信系统的误码率matlab仿真。包括IFFT,FFT,多径信道模型,STBC模块,信道估计模块等。最后输出误码率曲线。 %OFDM长度 Nfft = 512; %子载波数目 NCarrier = 100; %符号数/载波 Nsymbols = 660; %循环前缀长度 Ncp = 10; Nadder = Nfft+Ncp; Modes = 4; 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
资源推荐
资源详情
资源评论
收起资源包目录
OFDM+STBC通信系统的误码率matlab仿真.rar (11个子文件)
fig1
tops.m 4KB
func
func_rec_data.m 1KB
func_stbc.m 731B
func_trans_x.m 1KB
func_H.m 267B
func_channel.m 444B
func_rec_data.asv 1KB
func_rec_fft.m 700B
func_training_symbol.m 697B
untitled.jpg 37KB
操作录像0040.avi 8.8MB
共 11 条
- 1
资源评论
- 2301_774853122023-07-08资源内容详实,描述详尽,解决了我的问题,受益匪浅,学到了。
fpga和matlab
- 粉丝: 16w+
- 资源: 2557
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- .archivetemp04 - 继承和多态 作业.doc
- 基于运动学车辆模型的开放式驾驶MPC横向控制算法Analyzed commaai Openpilot MPC lateral c
- STM32F103单片机源码STM32-74HC595串转并控制数码管显示
- python语言教程项目案例
- 斐波那契数列java代码 FibonacciProblem
- 服务器的概要介绍与分析
- logseq-linux包
- 蓝色简历首页的微信小程序模板源码
- 基于MPC的仿真轨迹跟踪模块MPC-based Simulink trajectory tracking module
- 递归地求解Fibonacci数列.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功