1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJ2Xlp5s
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
Gardner定时误差算法通常用在BPSK、QPSK信号,通过改进可以应用在QAM等多进制基带信号中。Gardner定时误差算法,该算法的一个特点是每个符号只需要使用两个采样点,一个是strobe点,即最佳观察点,另外一个是midstrobe点,即两个观察点之间的采样点。Gardener环中的数控振荡器与锁相环路中的NCO功能完全不同,这里的NCO作用是产生时钟,即确定内插基点mk,同时完成分数间隔uk的计算,以提供给内插器进行内插。
4.部分源码
...................................................................
%信号加载的时偏
errs = [2e-4,0.5e-4,0.2e-4];
SNR_DBs = [1,10,20];
idx = 0;
for i1 = 1:length(errs)
for i2 = 1:length(SNR_DBs)
err = errs(i1);
SNR_DB = SNR_DBs(i2);
idx = idx+1;
sl = 3000;
............................................................
I_D = awgn(I_D,SNR_DB,'measured'); %接受端的信号,加载指定的snr
Q_D = awgn(Q_D,SNR_DB,'measured'); %接受端的信号,加载指定的snr
.........................................................................
%gardner环
for i = 2 : interplen - 1
for k = 1 : nsamp
%nco控制模块
y_temp = q0 - w;
q(m) = q0;
if y_temp > 0
q0 = y_temp;
else
q0 = mod(y_temp,1);
mk = m;
uk = s0 * q(m);
uu(j) = uk;
%内插器I
data1 = datarcosI(mk);
data2 = datarcosI(mk + 1);
interp_outI(j) = uk * data2 + (1 - uk) * data1;
%内插抽取模块
.............................................................
end
m = m + 1;
end
%误差检测
................................................
%环路滤波
..........................................................
end
%gardner环性能
figure(1);
subplot(3,3,idx)
plot(uu,'b');
grid on;
title(['SNR=',num2str(SNR_DB),' 时偏:',num2str(err)]);
end
end
%系统最后输出数据与原始数据比对
figure;
subplot(311);
stem(I_Data(6:end-6));
grid on;
xlim([5000,5100]);
legend('原始信号');
subplot(312);
stem(I_D(4:nsamp:end));
grid on;
xlim([5000,5100]);
legend('定时同步前基带信号');
subplot(313);
stem(qoutI(2:end));
grid on;
xlim([5000,5100]);
legend('gardner环输出基带信号');
0X_025m
---