✅作者简介:热爱科研的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
⛄ 运行结果
⛄ 参考文献
[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.