symbolcount=200; %总符号数
carrierspersymbol=333; %每个符号的子载波个数
bitspercarrier=4; %每个子载波含比特数(16QAM)
FFTpoint=512; %FFT点数
CPrate=0.07; %保护间隔与OFDM符号长度的比
CPlength=round(CPrate*FFTpoint); %保护间隔长度
%信号产生
signallength=symbolcount*carrierspersymbol*bitspercarrier;
signalsend=round(rand(1,signallength));
%串并转换和16QAM调制
sigtemp=reshape(signalsend,bitspercarrier,length(signalsend)/bitspercarrier);%返回一个跟symbolcount相同的4xsignallength/4的数组
sigstr=num2str(sigtemp');%把数值转换为字符串
sigmod=bin2dec(sigstr);%二进制转换为十进制
sigmod=sigmod';
sigqam=qammod(sigmod,16,0,'GRAY');
%16QAM调制后星座图\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
figure(1);
plot(sigqam,'*r');
title('16QAM调制后星座图');
axis([-4, 4, -4, 4]);
grid on;
%IFFT
beforeIFFT=zeros(symbolcount,FFTpoint);
beforeIFFT(:,1:carrierspersymbol)=reshape(sigqam,symbolcount,carrierspersymbol);
afterIFFT=zeros(symbolcount,FFTpoint+CPlength);
for temp=1:symbolcount
afterIFFT(temp,CPlength+1:FFTpoint+CPlength)=...
ifft(beforeIFFT(temp,:));
end
%添加循环前缀
for temp=1:symbolcount
afterIFFT(temp,1:CPlength)=afterIFFT(temp,FFTpoint+1:FFTpoint+CPlength);
end
%并串转换
siglaunch=reshape(afterIFFT,1,symbolcount*(FFTpoint+CPlength));
%信号时域图\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
figure(2);
plot(real(siglaunch));
figure(3);
plot(imag(siglaunch));
%信号功率
sigp=var(siglaunch);
SNR=5:1:17;
tempSNR=17.5:0.5:18;
SNR=[SNR,tempSNR];
errorrate=zeros(1,length(SNR));
%添加噪声
for i=1:1:length(SNR)
linearSNR=10^(SNR(i)/10);
noisep=sigp/linearSNR;
noise=randn(1,length(siglaunch))*sqrt(noisep);
sigrece=siglaunch+noise;
%串并转换
tempsig=reshape(sigrece,symbolcount,FFTpoint+CPlength);
%去除循环前缀
beforeFFT=tempsig(:,CPlength+1:FFTpoint+CPlength);
%FFT
afterFFT=zeros(symbolcount,FFTpoint);
for temp=1:symbolcount
afterFFT(temp,:)=fft(beforeFFT(temp,:));
end
sigqamde=reshape(afterFFT(:,1:carrierspersymbol),1,symbolcount*carrierspersymbol);
%16QAM解调和并串转换
sigdemod=qamdemod(sigqamde,16,0,'GRAY');
sigdemod=sigdemod';
sigdestr=dec2bin(sigdemod);
[m,n]=size(sigdestr);
sigdetemp=reshape(sigdestr',m*n,1);
signalget=str2num(sigdetemp);
signalget=signalget';
%误码率计算
errorrate(i)=sum(signalget~=signalsend)/length(signalsend);
end
%16QAM解调前星座图\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
%figure;
%plot(sigqamde,'*r');
%title('16QAM解调前星座图');
%axis([-4, 4, -4, 4]);
%grid on;
%误码率曲线
figure;
semilogy(SNR,errorrate,'-s');
title('误码率曲线');
axis([min(SNR),max(SNR),10^(-5),10^(-1)]);
ylabel('误码率');
xlabel('SNR(dB)');
grid on;
ofdm.rar_OFDM功率谱_ofdm_ofdm仿真_ofdm仿真星座图_功率谱
版权申诉
5星 · 超过95%的资源 200 浏览量
2022-09-24
23:39:04
上传
评论
收藏 1KB RAR 举报
钱亚锋
- 粉丝: 90
- 资源: 1万+
最新资源
- 并发与同步实验:理解操作系统中的进程并发与互斥机制
- 设备管理实验:学习操作系统中设备的管理与驱动程序的编写
- 网络通信实验:探索操作系统中的网络通信机制与协议
- 文件系统实验:构建基本的文件系统并实现文件的读写操作
- 内存管理实验:了解操作系统中的内存分配与回收机制
- 基于YOLOv5 + SlowFast +PyQt5的人体动作识别项目源码+文档说明(高分毕业设计)
- 《数字经济全景白皮书》中国商业银行普惠金融可持续发展能力评价2022-31页.pdf
- Spring Boot《驾校管理系统》
- “碳”路未来-低碳旅游指引手册-第一财经.pdf
- “AI+医药健康”系列报告(一)- 院内场景丰富,全流程 AI 赋能.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论1