clear
clc
close all
%%局部变量:函数间调用的位数、样本数、保护符号数、临时变量数
psk=16;
nfft=64; %fft大小
subcar=48; %数据子载波数
nbitpsk = log2(psk);
guard = (nfft-subcar)/2;
nsym=3000; %ofdm符号的数量
nbitdata = subcar*nbitpsk*nsym/2;
ncp=4; %循环前缀大小
nbitsym = nfft + ncp;
data=(rand(1,nbitdata)>0.5)+0;
%标准化CFR的大小
alpha=[0.609981229934408,0.715459955559726,0.636965602683617,0.694127681700978,0.695098676789100,0.681699620219806,0.705628746895461,0.834320339106743,0.873378196662836,0.827668204581301,0.768804769140058,0.756148741911805,0.926978115212095,0.913129736817394,0.871793084001999,0.848536621661314,0.909045348037926,0.834381831138879,0.896913346571862,0.928182910840626,0.932323910122903,0.907741812468878,0.943650044868540,1];
symbols=1:nsym*subcar/2;
bits=1:nsym*nbitpsk*subcar/2;
Cbits=1:nsym*nbitpsk*subcar/2*(1/2);
CCbits=1:nsym*nbitpsk*subcar/2*(2/3);
CCCbits=1:nsym*nbitpsk*subcar/2*(3/4);
Bbits=1:nsym*nbitpsk*subcar/2*(1/2);
BBbits=1:nsym*nbitpsk*subcar/2*(2/3);
BBBbits=1:nsym*nbitpsk*subcar/2*(3/4);
%动态情况下的θ
d0=1;
%theta_0对应于EIRP,并在噪声下被扫描以获得不同的SNR
theta_0=logspace(-1,4,40);
v=0; %m/s2
a=0; %m/s2
dt=1/(2*1e6); %CFR是针对2MHz带宽测量的
for n=1:10
%噪声矢量是用归一化的功率创建的。人们可以这样想
%归一化因子随噪声功率而重新缩放。
noise1=normrnd(0,1,[1,subcar*nsym/2])+i*normrnd(0,1,[1,subcar*nsym/2]);
noise2=normrnd(0,1,[1,subcar*nsym])+i*normrnd(0,1,[1,subcar*nsym]);
noise3=normrnd(0,1,[1,subcar*nsym*0.75])+i*normrnd(0,1,[1,subcar*nsym*0.75]);
noise4=normrnd(0,1,[1,subcar*nsym/2*(1+1/3)])+i*normrnd(0,1,[1,subcar*nsym/2*(1+1/3)]);
for k=1:length(theta_0)
[n,k]
%%这是针对所提出的算法
%TX
%并行化bin数据并进行psk调制
psk_data_tx = pskmod(bi2de(reshape(data, nbitpsk,[]).').',psk);
%用于集体ifft的psk数据并行化
par_data = reshape(psk_data_tx.', subcar/2, nsym).';
%生成hermitian对称数据并在非数据子载波位置插入保护
pilot_ins_data=[zeros(nsym,guard) par_data zeros(nsym,1) conj(flip(par_data.').') zeros(nsym,guard-1)] ;
%对帧中的所有ofdm符号进行ifft
ifft_data = sqrt(nfft*nfft/subcar)*ifft(ifftshift(pilot_ins_data.',1)).';
%向每个ofdm符号添加循环前缀
cyclic_add_data = [ifft_data(:,((nfft - ncp +1):nfft)) ifft_data];
%按行排列符号并串级传输时域信号
ofdm_tx = reshape(cyclic_add_data.',nbitsym*nsym,1);
%通道效应1
t=(0:(nbitsym*nsym-1))*dt;
theta=(theta_0(k)./(d0+v*t+0.5*a*t.^2).^3.346).';
ch_data=ofdm_tx.*theta;
%%
%将接收到的数据并行化
par_rec_data = reshape(ch_data.', nbitsym, nsym).';
%删除循环前缀
cyclic_pre_rem=par_rec_data(:,ncp+1:end);
%对时域ofdm符号进行fft
fft_data = fftshift(fft(cyclic_pre_rem.'),1).'/sqrt(nfft*nfft/subcar);
%移除防护以获取psk数据
rem_pilot = fft_data(:,guard+(1:subcar/2));
%通道效应2
ch_rem_pilot = reshape((rem_pilot.*alpha).',1,[])+noise1;
%计算SNR
EsN0(n,k)=mean(abs(ch_rem_pilot(symbols)).^2)/mean(abs(noise1).^2);
%并行化ch数据
pardata=reshape(ch_rem_pilot, subcar/2,[]).';
%计算theta*数据
pskconst=pskmod(0:(psk-1),psk);
est_theta=sum(((abs(real(pardata))+abs(imag(pardata)))./alpha).')./(mean(abs(real(pskconst))+abs(imag(pskconst)))*subcar/2);
%计算theta*数据
td=(pardata./alpha).';
%估计psk_data_tx
psk_data_rx=td./est_theta;
%序列化psk数据
serdata=reshape(psk_data_rx, subcar*nsym/2,[]).';
%ofdm符号中psk数据的解调
bin_data_rx = reshape(de2bi(reshape(pskdemod(serdata, psk),1,[])).',1,[]);
%计算BER
BER(n,k)=sum((data(bits)~=bin_data_rx(bits)))/length(bits);
%%这是块类型CE算法(1个数据包,1个导频包)
%TX
%并行化bin数据并进行psk调制
Bpsk_data_tx = reshape([(rand(subcar/2,nsym)>0.5)*2-1; reshape(psk_data_tx,subcar/2,[])],1,[]);
%用于集体ifft的psk数据并行化
Bpar_data = reshape(Bpsk_data_tx.', subcar/2, nsym*2).';
%生成hermitian对称数据并在非数据子载波位置插入保护
Bpilot_ins_data=[zeros(nsym*2,guard) Bpar_data zeros(nsym*2,1) conj(flip(Bpar_data.').') zeros(nsym*2,guard-1)] ;
%对帧中的所有ofdm符号进行ifft
Bifft_data = sqrt(nfft*nfft/subcar)*ifft(ifftshift(Bpilot_ins_data.',1)).';
%向每个ofdm符号添加循环前缀
Bcyclic_add_data = [Bifft_data(:,((nfft - ncp +1):nfft)) Bifft_data];
%按行排列符号并串级传输时域信号
Bofdm_tx = reshape(Bcyclic_add_data.',nbitsym*nsym*2,1);
%通道效应1
Bt=(0:(nbitsym*nsym*2-1))*dt;
Btheta=(theta_0(k)./(d0+v*Bt+0.5*a*Bt.^2).^3.346).';
Bch_data=Bofdm_tx.*Btheta;
%将接收到的数据并行化
Bpar_rec_data = reshape(Bch_data.', nbitsym, nsym*2).';
%删除循环前缀
Bcyclic_pre_rem=Bpar_rec_data(:,ncp+1:end);
%对时域ofdm符号进行fft
Bfft_data = fftshift(fft(Bcyclic_pre_rem.'),1).'/sqrt(nfft*nfft/subcar);
%移除防护以获取psk数据
Brem_pilot = Bfft_data(:,guard+(1:subcar/2));
%通道效应2
Bch_rem_pilot = reshape((Brem_pilot.*alpha).',1,[])+noise2;
%并行化ch数据
Bpardata=reshape(Bch_rem_pilot, subcar,[]).';
%单独的数据和训练矩阵
Brecpilot=abs(Bpardata(:,1:subcar/2));
Brecdata=Bpardata(:,subcar/2+1:end);
%计算SNR
BEsN0(n,k)=mean(abs(Bch_rem_pilot(symbols)).^2)/mean(abs(noise2).^2);
%估计psk_data_tx
Bpsk_data_rx=Brecdata./Brecpilot;
%序列化psk数据
Bserdata=reshape(Bpsk_data_rx.', subcar*nsym/2,[]).';
%ofdm符号中psk数据的解调
Bbin_data_rx = reshape(de2bi(reshape(pskdemod(Bserdata, psk),1,[])).',1,[]);
%计算BER
BBER(n,k)=sum((data(Bbits)~=Bbin_data_rx(Bbits)))/length(Bbits);
%%这是用于组合型CE算法(1个数据符号,1个导频符号)
%TX
%并行化bin数据并进行psk调制
Cpsk_data_tx = reshape([(rand(1,nsym*subcar/2)>0.5)*2-1; psk_data_tx],1,[]);
%用于集体ifft的psk数据并行化
Cpar_data = reshape(Cpsk_data_tx.', subcar/2, nsym*2).';
%生成hermitian对称数据并在非数据子载波位置插入保护
Cpilot_ins_data=[zeros(nsym*2,guard) Cpar_data zeros(nsym*2,1) conj(flip(Cpar_data.').') zeros(nsym*2,guard-1)] ;
%对帧中的所有ofdm符号进行ifft
Cifft_data = sqrt(nfft*nfft/subcar)*ifft(ifftshift(Cpilot_ins_data.',1)).';
%向每个ofdm符号添加循环前缀
Ccyclic_add_data = [Cifft_data(:,((nfft - ncp +1):nfft)) Cifft_data];
% ar%按行排列符号并串级传输时域信号
Cofdm_tx = reshape(Ccyclic_add_data.',nbitsym*nsym*2,1);
%通道效应1
Ct=(0:(nbitsym*nsym*2-1))*dt;
Ctheta=(theta_0(k)./(d0+v*Ct+0.5*a*Ct.^2).^3.346).';
Cch_data=Cofdm_tx.*Ctheta;
%将接收到的数据并行化
Cpar_rec_data = reshape(Cch_data.', nbitsym, nsym*2).';
%删除循环前缀
Ccyclic_pre_rem=Cpar_rec_data(:,ncp+1:end);
%对时域ofdm符号进行fft
Cfft_data = fftshift(fft(Ccyclic_pre_rem.'),1).'/sqrt(nfft*nfft/subcar);
%移除防护以获取psk数据
fpga和matlab
- 粉丝: 18w+
- 资源: 2639
最新资源
- 2-Notepad3(开源文本编辑器)
- 数字孪生赋能低空经济研究报告(2024年).pdf
- 2023物流销售收入明细.zip
- javaEE基于ssm的学生心理健康网的规划与设计javaweb毕业设计源码含数据库.zip
- 地下管道渗漏检测项目python源码(高分项目).zip
- 数据库设计图书信息管理系统大作业
- ftp被动模式抓包数据
- 学生信息管理系统【项目完整源码】(项目源码+数据库mysql源码)基于java+jsp+servlet开发
- 2-快速启动工具v1.0绿色版
- PostgreSQL数据库Docker容器快速部署配置指南
- python一阶段考试及答案
- Annie推广导航开心免授权版本
- 2-专为英语四级考试准备软件
- 水质监测系统平台Java源码(高分项目).zip
- 数字图像期末复习知识点
- VMware Workstation 17.6.2 Pro Release Notes Last Updated December 21, 2024
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈