OFDM、OOK、PPM、QAM 的误码率模拟【绘制不同调制方案的误码率曲线】(Matlab代码实现)
用户可以从列表框中选择调制方案,从切换按钮中,用户可以选择要绘制的图。实施了四种OFDM方案,即电气OFDM,DCO-OFDM,ACO-OFDM和FLIP-OFDM。调制和解调函数分别写入ofdm_mod和ofdm_demod文件中。OFDM、OOK、PPM、QAM 的误码率模拟,并绘制不同调制方案的误码率曲线。[1]崔伟,于颖,于海霞,陈超,李云鹏.基于IOC-CSMP的OFDM系统稀疏信道快速
👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
本文为基于 matlab 图形的 UI 控件。用户可以从列表框中选择调制方案,从切换按钮中,用户可以选择要绘制的图。单击评估按钮后,将生成 BER 图。实施了四种OFDM方案,即电气OFDM,DCO-OFDM,ACO-OFDM和FLIP-OFDM。调制和解调函数分别写入ofdm_mod和ofdm_demod文件中。OFDM、OOK、PPM、QAM 的误码率模拟,并绘制不同调制方案的误码率曲线。
📚2 运行结果


部分代码:
fig = figure('units','normalized','Position',[0.4 0.4 0.2 0.2]);
annotation('textbox',[0.1 0.8 0.5 0.1],'String',"Select and Press Any Key",'FitBoxToText','off',...
'FontName','Times New Roman');
mod_select = uicontrol('Parent',fig,'style','list','max',length(mod_opt),'min',1,'units','normalized',...
'Position',[0.1 0.05 0.5 0.7],'string',mod_opt,'Fontsize',12,'FontUnits','normalized');
pause;
select = mod_select.Value;
mod_sel = mod_opt(select,:);
lgnd = cell(2,length(mod_sel));
ber_sim = zeros(1,length(EbNo));
ber = zeros(2*length(mod_sel),length(EbNo));
bin_tx = randi([0 1], 1, 1000000);
N = length(bin_tx);
for j = 1:length(mod_sel)
mod_t = char(mod_sel(j));
% BPSK Electrical
if contains(mod_t,'bpsk')
for i=1:length(EbNo)
snr = EbNo(i) + 3; % avg signal energy = Eb, avg noise energy No/2, effective snr 2*EbNo for unit power
bpsk_tx = zeros(size(bin_tx));
bpsk_tx(bin_tx==0) = -1;
bpsk_tx(bin_tx==1) = 1;
bin_rx = (awgn(bpsk_tx, snr, 'measured')>=0);
ber_sim(i) = sum(bin_tx~=bin_rx)/N;
end
ber((2*j-1)+(0:1),:) = [ber_sim; bpsk_the];
lgnd(1:2,j) = {'BPSK Sim BER','BPSK The BER'};
end
% OOK RZ Optical
if contains(mod_t,'ook_rz')
for i=1:length(EbNo)
snr = EbNo(i) + 3; % avg signal energy = 0.25*Eb, avg noise energy No/2, effective snr 8*EbNo for unit power
rz_arr = [0 0; 1 0]';
ook_rz_tx = reshape(rz_arr(:,bin_tx+1),1,[]);
bin_rx = sum( bsxfun(@times, [1 0]', reshape((awgn(ook_rz_tx, snr, 'measured')>=0.5),2,[])) == [1 0]') ==2;
ber_sim(i) = sum(bin_tx~=bin_rx)/N;
end
ber((2*j-1)+(0:1),:) = [ber_sim; ook_rz_the];
lgnd(1:2,j) = {'OOK-RZ Sim BER','OOK-RZ The BER'};
end
% OOK NRZ Optical
if contains(mod_t,'ook_nrz')
for i=1:length(EbNo)
snr = EbNo(i) + 3; % avg signal energy = 0.5*Eb, avg noise energy No/2, effective snr 4*EbNo for unit power
bin_rx = (awgn(bin_tx, snr, 'measured')>=0.5);
ber_sim(i) = sum(bin_tx~=bin_rx)/N;
end
ber((2*j-1)+(0:1),:) = [ber_sim; ook_nrz_the];
lgnd(1:2,j) = {'OOK-NRZ Sim BER','OOK-NRZ The BER'};
end
% M-QAM Electrical
if contains(mod_t,'qam')
M = sscanf(mod_t,'%d-qam');
for i=1:length(EbNo) % avg signal energy = nbits*Eb, avg noise energy No, effective snr nbits*EbNo for unit power
nbits = log2(M);
snr = EbNo(i) + 10*log10(nbits);
qam_tx = qammod(reshape(bin_tx(1:end-mod(end,nbits)), nbits,[]),M,'InputType','bit','UnitAveragePower',true) ;
bin_rx = reshape(qamdemod( awgn(qam_tx, snr), M,'OutputType','bit','UnitAveragePower',true), 1, []);
ber_sim(i) = sum( bin_tx(1:end-mod(end,nbits))~=bin_rx)/N;
end
ber((2*j-1)+(0:1),:) = [ber_sim; qam_the(qam_t==M,:)];
lgnd(1:2,j) = {strcat(num2str(M),'-QAM Sim BER'),strcat(num2str(M),'-QAM The BER')};
end
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]崔伟,于颖,于海霞,陈超,李云鹏.基于IOC-CSMP的OFDM系统稀疏信道快速重构算法[J].通信学报,2023,44(02):52-58.
[2]王保柱. 低频闪OOK可见光通信系统的研究[D].南京邮电大学,2022.DOI:10.27251/d.cnki.gnjdc.2022.000888.
🌈4 Matlab代码实现
更多推荐




所有评论(0)