什么插值滤波器、定时误差检测器,环路滤波器,定时误差控制器这里就不说了。
代码如下:

%BPSK gardner  2022年8月30日 北京理工大学clc;clear;close all;%参数设定
symbol_rate = 1000;     %每秒symbol_rate个符号
sps = 4;                %每个符号sps个采样点
fs = sps*symbol_rate;   %每秒就是sps*symbol_rate个采样点
fc = 4*fs;              %载波频率
P = 40000;              %P是resample函数的分子
Q = 40002;              %Q是resample函数的分母
N = 1E5;                %设置了N个符号%信号源
msg_source = randi([0 1],1,N);          %生成1行N列范围是[0,1]的随机序列
bipolar_msg_source = 2*msg_source -1;   %将[0,1]映射为[-1,1],便于成型卷积%根升余弦滤波器
rolloff_factor = 0.5;                   %滚降系数
span = 6;                               %横跨6个符号的长度
rcos_fir = rcosdesign(rolloff_factor,span,sps,'sqrt');%sps倍上采样
up4_bipolar_msg_source = upsample(bipolar_msg_source,sps);
%成型滤波
rcos_msg_source = conv(up4_bipolar_msg_source,rcos_fir,'same');
%载波调制
nn = 0:length(rcos_msg_source)-1;
rcos_msg_source_module = rcos_msg_source.*cos(2.*pi.*nn.*fc./fs);%环路滤波器系数
k1 = 5.41*10^(-4);
k2 = 3.82*10^(-6);EbN0 = 0:8;
SNR = EbN0 - 10*log10(sps) + 10*log10(2);
err_number=zeros(1,length(SNR));
bit_err_ratio=zeros(1,length(SNR));
for i = 1:length(SNR)%信道加噪rcos_msg_source_addnoise = awgn(rcos_msg_source_module,SNR(i),'measured');%解调rcos_msg_source_addnoise_demodulation = rcos_msg_source_addnoise.*cos(2*pi*nn*fc/fs);%采样时钟出现了偏差data_re = resample(rcos_msg_source_addnoise_demodulation,P,Q);%匹配滤波rcos_msg_source_MF = conv(data_re,rcos_fir,'same');len_rcos_msg_source_MF = length(rcos_msg_source_MF);%gardner环参数设置w = [0.5,zeros(1,N-1)]; %环路滤波器输出寄存器n = [0.9,zeros(1,N-1)]; %NCO寄存器%nco输出的定时分数间隔寄存器u = [0.6,zeros(1,len_rcos_msg_source_MF - 1)];yI = zeros(1,2*N);%I路内插之后的输出数据time_error = zeros(1,N);%时钟误差寄存器ii = 1;%用来表示Ts的时间序号,指示n,n_temp,ncok = 1; %用来表示Ti的时间序号,指示u,yI,yQms = 1;%用来指示T的时间序号,用来指示a,b以及wfor ii = 2:(len_rcos_msg_source_MF - 3)n(ii+1) = n(ii) - w(ms);if(n(ii+1)<0)u(k) = n(ii)/w(ms);n(ii+1) = mod(n(ii+1),1);%内插滤波器F1=0.5*rcos_msg_source_MF(ii+2)-0.5*rcos_msg_source_MF(ii+1)-0.5*rcos_msg_source_MF(ii)+0.5*rcos_msg_source_MF(ii-1);F2=1.5*rcos_msg_source_MF(ii+1)-0.5*rcos_msg_source_MF(ii+2)-0.5*rcos_msg_source_MF(ii)-0.5*rcos_msg_source_MF(ii-1);F3=rcos_msg_source_MF(ii);yI(k)=(F1*u(k)+F2)*u(k)+F3;% 时钟误差提取模块if(mod(k,2)==1)%每一个数据符号计算一次误差if(k>2)time_error(ms)=yI(k-1)*(yI(k)-yI(k-2));elsetime_error(ms)=0;endif(ms>1)w(ms+1)=w(ms)+k1*(time_error(ms)-time_error(ms-1))+k2*time_error(ms);elsew(ms+1)=w(ms)+k1*time_error(ms)+k2*time_error(ms);endms = ms +1;endk=k+1;endend%抽样判决yI_decision = (sign(yI(1:2:end))+1)/2;[err_number(i),bit_err_ratio(i)] = biterr(msg_source(1:N),yI_decision(1:N));
end%仿真结果
theoryBer = berawgn(EbN0,'psk',2,'nondiff');
figure;
subplot(2,2,1);
plot(EbN0,10*log10(bit_err_ratio),'-*');
hold on;
plot(EbN0,10*log10(theoryBer),'-+');
xlabel('Eb/N0');ylabel('误码率');
title('不同信噪比下误码率仿真曲线');
legend('实验曲线','理论曲线');
grid on;
subplot(2,2,2);plot(u);xlabel('运算点数');ylabel('分数间隔');
subplot(2,2,3);plot(time_error);xlabel('运算点数');ylabel('定时误差');
subplot(2,2,4);plot(w);xlabel('运算点数');ylabel('环路滤波器输出');

BPSK调制gardner算法的MATLAB实现相关推荐

  1. gardner环 matlab,gardner 算法matlab实现

    % 仿真4比特原始数据与星座图的编码映射过程: % 完成16QAM信号的调制解调: % 基带信号符号速率 ps =1Mbps: % 成形滤波器的滚降因子 a=0.8: % 载波信号频率fc=2MHz ...

  2. hh模型仿真matlab程序,gardner算法算法matlab仿真请教(附程序)

    %定时恢复程序: clear all N=6000;  %符号数 K=4;     %每个符号采4个样点 Ns=K*N;  %总的采样点数 w=[0.5,zeros(1,N-1)];  %环路滤波器输 ...

  3. bpsk的matlab仿真,用MATLAB仿真BPSK调制

    这是本人的处女贴,以后还会写更多ICT方面的blog.今天为大家呈上MATLAB仿真BPSK调制的codes: clear all;clc; SNR_dB=1:1:9; SNR=10.^(SNR_dB ...

  4. matlab ellip传递函数,BPSK和QPSK调制解调原理及MATLAB程序

    <BPSK和QPSK调制解调原理及MATLAB程序>由会员分享,可在线阅读,更多相关<BPSK和QPSK调制解调原理及MATLAB程序(10页珍藏版)>请在人人文库网上搜索. ...

  5. 用matlab实现bpsk,用MATLAB实现的BPSK调制解调源程序(国外英文资料).doc

    用MATLAB实现的BPSK调制解调源程序(国外英文资料) 用MATLAB实现的BPSK调制解调源程序(国外英文资料) modulation.m 函数output_modu =调制(input_fra ...

  6. 7位双极性序列 matlab,BPSK调制的MATLAB仿真毕业论文_实验报告

    五.matlab程序及仿真结果图 1.生成m序列及m序列性质 实验产生7位m序列,频率100Hz,模拟线性反馈移位寄存器序列,原理图如下: clear all; clc; X1=0;X2=0;X3=1 ...

  7. BPSK调制下(2,1,6)标准卷积码及打孔生成2/3、3/4、4/5、5/6删余码Viterbi译码误码率曲线图(MATLAB实现)

    关注公号[逆向通信猿]更精彩!!! 目录 仿真结果 卷积码原理图 删余后性能比较 常用的删余码 仿真代码 根据码率生成打孔参数(子函数) 将标准(2, 1, 6)编码后的序列进行打孔,生成删余码(子函 ...

  8. 《调制解调算法》专栏导航贴

    关注公号[逆向通信猿]更精彩!!! 通信方面有关信号处理算法的MATLAB仿真,包含博主的一些宝贵经验,不定期补番. 本系列博克力求从简到繁,无论是刚接触通信的小白,还是接触通信已若干年的学者,或许均 ...

  9. 数字定时误差检测算法系列之 ———时域Gardner算法

    1.Gardner 算法简介 Gardner 算法是一种非数据辅助,实现复杂度低,广泛应用于实际工程中的一种定时误差检测算法.Gardner 算法具有如下特点: 1). 工作于2倍采样率,每个码元需要 ...

  10. 高斯信道、单径Rayleigh信道和多径衰落信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)

    前3节仿真了基带BPSK调制下DSSS-CDMA系统在高斯信道.单径Rayleigh衰落信道和多径衰落信道下的性能仿真,同时采用了m序列和正交Gold序列进行对比. 高斯信道下基带模型的多用户BPSK ...

最新文章

  1. 集合框架(List的三个子类的特点)
  2. 由Linux内核bug引起SSH登录缓慢问题的排查与解决
  3. Windows mgmt command commom
  4. LR(1)分析表-语法树-四元式
  5. bzoj2442codevs4654 单调队列优化dp
  6. PHP设计模式(6)迭代器模式
  7. 动态导入模块__import__(str) importlib标准库
  8. java eden space_JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...
  9. JavaScript操作Table
  10. 1.3Python快速入门
  11. applicationcontext and webapplicationcontext
  12. 国内PHP,ASP免费开源的CMS介绍
  13. 文件后缀名修改重命名,两种更改的小技巧
  14. windows10安装MySQL8.0
  15. fatal: unable to connect to gitlab.domian: gitlab.domian : Temporary failure in name resolution
  16. 外网下载速度过慢问题解决办法
  17. php fpm 指定用户,php-fpm-请不要用root作为php工作用户
  18. jsp网页嵌入PHP网页,JSP_(jsp/html)网页上嵌入播放器(常用播放器代码整理),这个其实很简单,只要在HTML上 - phpStudy...
  19. 戴尔Inspiron 5548 用原配电源给电脑充电,显示电源已连接,未充电,且电脑异常卡顿?
  20. 用html做一个拍拍网界面视频,用canvas做一个DVD待机动画的实现代码

热门文章

  1. eova使用之-集成jersey开发REST服务
  2. win10无法直接用照片查看器打开图片怎么办
  3. BC26通过LWM2M接入电信AEP平台(透传模式)
  4. Spring常用注解(绝对经典)
  5. Mac无法正常使用共享屏幕功能的解决办法
  6. ps4路由器虚拟服务器,在PC上使用PS4手柄图文教程(附模拟360手柄教程)
  7. java解析本地wsdl_关于解析本地wsdl文件
  8. 【雕虫小技第10篇】scratch编程技巧之源码素材快速导出为png或者svg格式
  9. 安卓模拟器手游辅助制作教程
  10. Otter CTF (取证专项赛)WP兼volatility取证工具运用技巧