clear all;
clc;
f1=128;%设置fft长度
g1=32;%循环前缀长度
Ns=8;%每个子载波包含的符号数
para=128;%子载波数
N=1024;%串并变换前的符号数
bit=2;%每个符号的bit数
signal=round(rand(1,para*Ns*bit));%源信号
%调制和串并变换
din2=1-2*signal;
din_temp=reshape(din2,2,length(signal)/2);
for b=1:length(signal)/2
QPSKdata(b)=din_temp(1,b)+j*din_temp(2,b);
end
complex_qam_data=reshape(QPSKdata,128,8);
x=complex_qam_data;
%////////////////////调制和串并变换的实现////////////////////////////
%////////////////////显示调制后的星座图///////////////////////////////
figure(1);
plot(complex_qam_data,'*r');%16qam调制后星座图
axis([-4,4,-4,4]);
grid on
%////////////////////显示调制后的星座图///////////////////////////////
%//////////////////////IFFT模块//////////////////////////////////////
y=ifft(x);
ich2=real(y);
qch2=imag(y);
%/////////////////////IFFT模块///////////////////////////////////////
%////////////////////插入保护间隔////////////////////////////
ich3=[ich2(f1-g1+1:f1,:);ich2];
qch3=[qch2(f1-g1+1:f1,:);qch2];
%figure(3)
%subplot(211);stem(ich3);%这里的插入保护间隔就是插入循环前缀
%subplot(212);stem(qch3);
%////////////////////插入保护间隔////////////////////////////
%///////////////////并串变换////////////////////////////////
ich4=reshape(ich3,1,(f1+g1)*Ns);
qch4=reshape(qch3,1,(f1+g1)*Ns);
TrData=ich4+qch4.*sqrt(-1);%发射数据为复数,这是一个什么概念,这是OFDM的基带已调信号啊?
%TrData=reshape(y,1,128*8);
%///////////////////并串变换////////////////////////////////
%%/////////////////添加噪声///////////////////////////////////////////
Tx_signal_power=var(TrData);%发送信号功率
a=[0:0.2:50];
for b=1:length(a)
SNR=a(b);
linear_SNR=10^(SNR/10);%线性信噪比
noise_sigma=Tx_signal_power/linear_SNR;
noise_scale_factor=sqrt(noise_sigma);%标准差sigma
noise=randn(1,(f1+g1)*Ns)*noise_scale_factor;%产生正态分布噪声序列
%noise=wgn(1,length(windowed_Tx_data),noise_sigma,'complex');%产生复高斯白噪声信号
ReData=TrData+noise;%接收到的信号加噪声
%/////////////////添加噪声///////////////////////////////////////////
%/////////////实现串并变换,并且移除保护间隔///////////////////
idata=real(ReData);
qdata=imag(ReData);
idata1=reshape(idata,f1+g1,Ns);%将实部数据实现串并变换
qdata1=reshape(qdata,f1+g1,Ns);%将虚步数据实现串并变换
idata2=idata1(g1+1:g1+f1,:);%移除保护间隔(循环前缀)
qdata2=qdata1(g1+1:g1+f1,:);
%/////////////实现串并变换,并且移除保护间隔///////////////////
%////////////////fft模块////////////////////////////////////////////
Rex=idata2+qdata2.*sqrt(-1);
ry=fft(Rex);%数据格式是什么,128*6?
ReIChan=real(ry);
ReQChan=imag(ry);
%////////////////fft模块////////////////////////////////////////////
%//////////////////////QPSK解调//////////////////////////
Y=reshape(ry,1,1024);
z(1,:)=real(Y);
z(2,:)=imag(Y);
yout=reshape(z,1,2048);
yout=-1.*yout;
ReSig=yout>0.001;
%//////////////////////QPSK解调//////////////////////////
%//////////////////计算误码率///////////////////////////////////////////
Signal_Rx=ReSig;
%figure(9);
%subplot(211);
%stem(signal(1:100));
% subplot(212);
% stem(Signal_Rx(1:100));
bit_errors=find(Signal_Rx-signal);
bit_error_count=size(bit_errors,2);
ber(b)=bit_error_count/(para*Ns*bit);
end
figure;
plot(ber);
title('基于IFFT的OFDM系统的误码率(带循环前缀)');
海神之光
- 粉丝: 5w+
- 资源: 7128
最新资源
- ouc2024秋攻防先导作业
- ouc2024秋攻防先导作业
- 算数优化算法AOA对BP的权值和阈值做优化,建立多个特征变量输入,单个因变量输出的拟合预测建模 程序内注释详细,可学习性强 直接替数据就可以用,可以直接导入excel数据 程序语言为matlab
- 精确符合规范反应谱的人工合成地震波
- LINUX最新版本算法库5.0.15(1).zip
- Matlab基于量子遗传算法的函数寻优方法 量子遗传算法QGA是量子计算与遗传算法相结合的产物,是一种新发展起来的概率进化算法 代码可正常运行
- 驾校预约学习系统 源码+数据库+论文(JAVA+SpringBoot+Vue.JS+MySQL).zip
- 基于ssm+mysql图书仓储管理系统源码数据库.docx
- springboot3+vue3
- CREO7装配与产品设计-钟日铭-配套操作文件
- 基于SpringBoot+Vue.JS开发的校园志愿者管理系统 JAVA毕业设计 源码+数据库+论文(有项目截图)+启动教程
- Linux操作系统课程设计实验报告-涵盖多线程同步、内核模块编程、进程树打印、系统调用添加及块设备驱动实现
- 素材网站解析源码支持21个网站解析可搭建运营
- 285个地级市灯光数据和雾霾数据.zip
- 全桥谐振和变压器计算 看截图,知识文档,含有LLC谐振半桥计算,全桥LLC谐振和变压器的计算,描述详细使用,表格都有引用公式依据,便于理解
- vlan dnsp 111
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈