fsk调制
fsk是利用载波的频率表示基带信息,比如在2fsk系统中,采用单频信号f1表示信息0、单频信号f2表示信息1。根据码元转换时载波的相位是否连续,分为非连续相位fsk和连续相位fsk,如下图所示:
第三幅图为连续相位fsk调制,也称作cpfsk,可视作振荡频率随基带信号线性变化;第四幅图为非连续相位fsk,在码元转换时有一个相位的跳变,可视作两个ask调制信号的叠加。
fsk的一个重要参数是频移指数h=(f2-f1)*t,t为码元周期。该参数影响着两个单频信号之间的相关系数ρ。ρ越小,越容易将两个信号区分开,即解调系统的解调性能越好。h的几个特殊取值如下:
当h=0.715时,ρ可以取到最小值-2π/3;
当h=kπ(k≥1)时,ρ为0,即两信号正交;
当h=n(整数)时,fsk总是会体现出连续相位特性。
调制信号的频谱与相位变化息息相关,如果存在相位突变,信号频谱宽度会扩展(产生旁瓣)。cpfsk是一种恒包络调制技术,在码元速率和h相同时,cpfsk比非连续相位的fsk主瓣宽度更窄,且旁瓣分量更小,通过限带滤波后信号包络起伏小,适合应用于非线性信道。
matlab设计
matlab中可以按照fsk原理完成fsk调制,但是只能产生非连续相位的fsk调制信号(除非h=1)。如果想要产生连续相位的fsk调制信号,必须使用matlab提供的fskmod函数,示例代码如下:
上面将代表0和1两个频率之间的间隔直接设置为8,也可以根据频移指数h的计算公式来设定。fskmod最后还可以增加一个参数,默认值为’cont’表示连续相位;’discont’表示非连续相位。
需要注意的是,老版本的matlab可能会用到randint函数产生随机序列;而2017以后的版本只能使用randi函数。
fsk的fpga设计
在vivado开发环境下完成2fsk(非连续相位)调制技术的设计并进行仿真,系统时钟32mhz,码元速率1mhz,载波频率6mhz,频移指数h=3.5。模块接口如下:
配置两个dds产生两个代表1和0的单频信号。f2-f1=h/t=3.5/1ns=3.5mhz,则在6mhz载波频率的基础上选择4.25mhz和7.75mhz。dds compiler ip核使用方法可参考https://blog.csdn.net/fpgadesigner/article/details/80512067。本设计将dds的无杂散动态范围设置为95db,对应的位宽为16bit。实例化代码如下:
fsk调制信号的产生有两种方法。第一种方法将fsk视作两路ask信号的合成(一路ask有载波代表1,一路ask无载波代表1),代码如下:
采用此方法的系统原理图如下:
可以看到一路ask信号为din与f1的乘法,另一路信号为din取反后与f2的乘法,两路加起来便得到fsk调制信号。另一种方法直接使用多路选择器对输入的基带数据进行判决输出:
采用此方法的系统原理图如下:
rtl_mux即为多路选择器,明显第二种方法更加节省资源。
cpfsk的fpga设计
连续相位的fsk调制信号产生可以借助dds的特性,dds的实现原理就使其输出信号具有连续相位特性,即使频率突然改变。配置一个dds,implementation->phase increment programmability设置为streaming,可以通过s_axis_phase接口动态配置dds的输出频率。完整代码如下:
dds的频率分辨率设置为976.5625hz,正好对应相位位宽为15bits(fs/2^b=32mhz/2^15=976.5625hz)。因此f1=4.25mhz对应的频率控制字为4351(f1/976.5625-1=4351);f2=7.75mhz对应的频率控制字为7935(f2/976.5625-1=7935)。
代码中根据输入基带的情况设定对应的频率控制字。可见cpfsk只需要使用一个dds compiler ip核即可,比fsk要节省不少资源。
仿真测试
编写testbench,产生一个周期信号模拟二进制基带数据。首先仿真非连续相位的fsk:
可以明显看到在码元的跳变时刻fsk信号的相位有明显的突变。再仿真cpfsk:
看到码元跳变时刻fsk信号的相位仍保持连续变化。注意由于dds有一定的latency,导致上图fsk信号相比基带数据有一定的延迟。
quartus环境下实现
quartus中对应的ip核为nco,在产生fsk信号时与dds用法基本相同;但在产生cpfsk信号时,nco ip核有独特的配置方式。
nco的输出频率由phi_inc_i接口控制。需要使用fsk调制功能时,在implementation标签下选中“frequency modulation input”:
ip核会多出一个freq_mod_i接口,该接口的作用时在phi_inc_i输出频率的基础上进行调整。比如:频率控制字位宽为25bits,phi_inc_i输出频率6mhz,系统时钟32mhz,需要输出f1=4.25mhz,则freq_mod_i对应的控制字为(4.25mhz-6mhz)/(32mhz/2^25)=-1835008。
根据基带数据改变freq_mod_i接口的控制字即可实现cpfsk信号的产生。
原文标题:fpga学习-fsk调制技术
文章出处:【微信公众号:fpga设计论坛】欢迎添加关注!文章转载请注明出处。
直流有刷电机正反转控制应用
聚焦非标零部件在线制造,云工厂完成近亿元B+轮融资
关于包装机自动控制系统的分类
芯片厂商多元化布局 加速向大众市场迁移
计算机语言的发展过程
FSK调制技术的MATLAB与FPGA设计
单片机与微机的区别与联系
临时员工可以推动欧洲半导体行业的发展
英特尔和amd处理器哪个比较好
全球区块链资产市场总体情况解析
这家公司凭着什么?超越苹果亚马逊重返市值第一
小米校招风波道歉!校园招风波事件背后,是歧视还是小题大做?
2020年的SaaS模式会有怎样的进展
国际工业控制技术与产业的未来市场发展趋势
欧司朗智慧照明点亮南京长江五桥:实现真正的智能控制
人工智能在各场景中的应用
华为发布筹备两年的麦芒系列新产品
年产量近4000万辆的电动两轮车市场都有哪些参与者?
新技术芯机遇 电动工具盛典落幕
电动汽车充电系统介绍