👨‍🎓个人主页:研学社的博客    

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥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代码实现

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐