gardner时间同步matlab仿真和FPGA实现

算法原理参考https://zhuanlan.zhihu.com/p/345445660
时间同步原理框图:

在这里插入图片描述在这里插入图片描述

Matlab仿真流程:1)产生调制数据;
2)插入帧头(帧同步);
3)成形滤波上采样;
4)加入采样偏差;
5)接收匹配滤波;
6)gardner定时同步;
7)帧同步;
8)解调;
9)误码统计;

clc
clear  
close all
%% 参数设置
len = 1e4;             % 每帧仿真数据长度
fame = 4;              %% 帧数,帧数越多误码率越精确,仿真速度越慢
mtype = 3;             %%  调制方式 1:bpsk , 2:qpsk , 3:8psk 
snr = 30 ;             %% 信噪比
%% 生成bit数据
msg = randi([0 1],len*mtype,1);   % 生成bit信号 
[tx_mod] = modulation(mtype,msg);

figure(1)
plot(tx_mod,'.r')
title('调制后星座图')
%% 重复多帧
head = tx_mod(1:64);                 %% 取64个符号作为同步帧头
tx_mod_r = repmat(tx_mod.',1,fame);  %% 重复帧数 
%% 2倍成型滤波
sps = 2; %% 上采样倍数
Alpha = 0.45; %%滚降系数
[tx_fir,fir_hn] = rcos_up(tx_mod_r,sps,Alpha);

%% 加噪声
tx_agwn = awgn(tx_fir,snr);

%% 加入采样偏差
fs = 100e6;
ppm = 100e-6;
data_rx = func_reshape(tx_agwn,fs,ppm);

%% 接收匹配滤波
data_farrow  = filter(fir_hn,1,data_rx);
figure(9)
plot(data_farrow(end-1e4:end),'.r');
title('时间同步前星座图')
%% 时间同步
[gardner_out,miu_out] = gardner_func(data_farrow);
 
figure(10)
plot(gardner_out(end-1e4:end),'.r');
title('时间同步后星座图')
  
figure(11)
plot(miu_out );
title('时间同步收敛uk')   
%% 符号同步
sync_out = xcorr(head.',gardner_out);
figure(12)
plot(abs(sync_out));
title('符号同步相关峰')


function [output ] = func_reshape(input,fs,ppm)

% fs = 100e6;
% ppm = 100e-6;
fs_rx= fs + fs*ppm;
output = resample(input, fs_rx ,fs);

end

function [output,fir] = rcos_up(input,sps,Alpha)

span = 16;          % number of symbols
fir = rcosdesign(Alpha,span,sps,'sqrt');   %%产生根升余弦滤波器系数
% fvtool(fir)
output = upfirdn(input,fir,sps);  %%内插滤波
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
需要gardner-matlab和FPGA代码可私信交流。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Gardner定时同步MATLAB程序是一种用于在MATLAB环境中实现定时同步的方法。这种方法可以用来定义一个特定时间间隔,然后在每个时间间隔内触发MATLAB程序的执行。 在MATLAB中,我们可以使用计时器对象来实现定时同步。首先,我们需要创建一个计时器对象,并设置它的时间间隔。例如,我们可以将时间间隔设置为10秒。然后,我们可以为计时器对象设置回调函数,即程序需要在每个时间间隔执行的函数。 当计时器对象启动时,它会按照设置的时间间隔定时触发回调函数的执行。回调函数可以包含我们希望在每个时间间隔内执行的MATLAB程序。这样,我们就可以实现定时同步MATLAB程序的效果。 在回调函数中,我们可以编写任意的MATLAB代码来执行我们想要的操作。例如,我们可以读取数据、运行模型或进行数据处理等。这样,我们的MATLAB程序就可以根据我们设置的时间间隔进行定时同步了。 需要注意的是,我们可能需要在执行程序之前先启动计时器对象,并在程序执行完成后停止计时器对象。这样可以确保我们的MATLAB程序能够按照我们指定的时间间隔进行定时同步。 总之,使用Gardner定时同步MATLAB程序可以为我们提供一种灵活、方便的方法来定时执行我们的MATLAB代码。无论是在数据处理、模型运行还是其他应用场景中,这种方法都可以帮助我们实现定时同步的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MRHLT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值