✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

⛄ 内容介绍

基于matlab的PDT DMR 物理层仿真

⛄ 部分代码

%%%%% 频率偏差

% FreqOffset = 250; %% 此处设置频率偏差

% rx_cpfsk_signal = rx_cpfsk_signal .* exp(1i*2*pi*FreqOffset*SamplePeriod*[1:length(rx_cpfsk_signal)]);

% demod_phase = zeros(1,length(rx_cpfsk_signal));

% demod_phase(2:end) = angle(rx_cpfsk_signal(2:end).*conj(rx_cpfsk_signal(1:end-1)));

% conv_pulse = conv(pulse,pulse);

% demod_phase2 = conv(demod_phase,pulse)/norm(pulse)^2;

% detecx = demod_phase2(1:overSampleRate:end);

% detecx = detecx/(2*pi*0.27);

% dectBits = zeros(1,2*length(detecx));

% idx = find(detecx>=2); dectBits(2*idx)=1; %% 01

% idx = find(detecx<=-2); dectBits(2*idx)=1; dectBits(2*idx-1)=1; %% 11

% idx = find(detecx<0 & detecx>-2); dectBits(2*idx-1)=1; %% 10

% startIdx = Tspan*4 +1; 

% errBits= sum(dectBits(startIdx:startIdx-1+length(txBits))~=txBits);

% BER_offset(n1) = BER_offset(n1)  + errBits;

%%%% 4CPFSK浮点的仿真

%%%% 时间 2021年4月13号    目的:看网上一篇文章 取80个符号的每个采样点作为最佳采样点

%%%% 期望比较一下在各种SNR条件下的性能

clc;

clear all;

close all;

randn('state',0);rand('state',0);

tic

bitLen=288;

overSampleRate=10;

Tspan=6;

pulse = rcosfir(0.2, Tspan, overSampleRate, 1,'sqrt');

cumpulse = cumsum(pulse);

pulse = pulse*0.5/cumpulse(end);

MaxIter=1e4;     % 测试此时

SNR = 5:1:10;    % 标记的SNR 取值

BER_opt = zeros(1,length(SNR));  %记录最后的误码率结果

for iter = 1:MaxIter

    Sync_MS_data= [0,1,1,1,0,  1,1,0,0,0,  1,0,1,0,0, 0,0,1,1,0,  1,1,1,0];

    txBits=Build_txbits(bitLen);  %建立测试数据

    cpfsk_signal = FSK_Modulation(txBits, overSampleRate,pulse);  %发射端调制

    noise = (randn(1,length(cpfsk_signal)) + 1i*randn(1,length(cpfsk_signal)))/sqrt(2);

    %%

    for n1=1:length(SNR)

        noiseSigma=sqrt(10^(-SNR(n1)/10));

        rx_cpfsk_signal = cpfsk_signal+noise*noiseSigma;   %添加噪声   频偏该怎么处理

        demod_phase = zeros(1,length(rx_cpfsk_signal));

        demod_phase(2:end) = angle(rx_cpfsk_signal(2:end).*conj(rx_cpfsk_signal(1:end-1)));

        conv_pulse = conv(pulse,pulse);

        demod_phase2 = conv(demod_phase,pulse)/norm(pulse)^2;

        demod_phase2 = demod_phase2/(2*pi*0.27);

        %% 将收到的数据变成10行*144的格式,其中 输入是匹配滤波后的值    YouXiaoData_in_Quant为数据*33之后的值

        [rx_buffers,rx_buffers_Quant] =Build_rx_buffer(demod_phase2);

        %% 找最佳采样点  

        % 计算每个采样点的对应的同步起始位置

        for sample_cnt=1:1:10

            rx_burst_sym_select=rx_buffers_Quant(sample_cnt,:);   %选择一个采样点作为数据来源 注意这里已经截断成150个符号

            [Syn_Position_suzhu(sample_cnt),max_corr_shuzu(sample_cnt)]=DetectSyn_New(rx_burst_sym_select);  %选择的50-70这个范围内找同步字

        end

        %采用原来Dsp的方法  找到最佳采样点

        [optimumIdx,Sumerr_Collect]=OptimumSamplingIndex(rx_buffers_Quant);  %最佳采样点是 optimumIdx

        Syn_start1=Syn_Position_suzhu(optimumIdx);  %根据选择的方法计算的最佳采样点 推导出同步的24符号开始的位置    

        burst_start=Syn_start1-60;

        fprintf('同步开始位置=%d optimumIdx=%d \n',Syn_start1,optimumIdx);

        %%  计算 errobit 

        rx_buffers=rx_buffers(:,burst_start:(burst_start+144-1));

        [ReceiveBits_opt,errBits]=Calcu_erro(rx_buffers,optimumIdx,txBits);

%         if errBits~=0

%           

%             fprintf('optimumIdx=%d \n',optimumIdx);

%              bbb=1; 

%         end

        BER_opt(n1) = BER_opt(n1)  + errBits;

    end

end

% BER_opt_B = BER_opt/MaxIter/bitLen;

% save 3_BER_opt_B.mat BER_opt_B;

% % BER_offset = BER_offset/MaxIter/bitLen;

% figure;

% semilogy(SNR,BER_opt,'b-*'); hold on;

% % semilogy(SNR,BER_offset,'r-o'); hold on;

% % legend('optimum Sampling','T/20 offset')

% xlabel('SNR'); ylabel('BER');

% grid on;

% % toc

⛄ 运行结果

基于matlab的PDT DMR 物理层仿真_图像处理

⛄ 参考文献

[1] 向长波, 李惠, 王玉霞,等. 基于Matlab/Simulink的GSM系统物理层仿真[J]. 中国新通信, 2015, 17(10):2.

[2] 史晓霞. 基于Matlab的3L物理层系统仿真平台的研究与实现[D]. 北京邮电大学, 2016.

[3] 康志杰, 白清, 张松轶,等. 一种适用于PDT/DMR的跳频同步方法:, CN112737634A[P]. 2021.

[4] 康志杰, 白清, 张松轶,等. 一种适用于PDT/DMR的跳频组呼迟后加入方法:, CN112737633A[P]. 2021.

⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料