简易FM信号调制的FPGA实现过程讲解

可编程逻辑

1366人已加入

描述

AM是幅度调制,因此只需要将基带信号与载波信号相乘;FM是频率调制,以频率的变化来表示基带信号。

好在FPGA有NCO IP核,其内部的原理,是将一个完整的正弦波信号分为2的32次方点数,将点数存放在ROM内,然后使用频率控制字作为读数据地址,频率控制字越大,点数的跨度越大,输出的波形周期越小,频率越大。

所以只需要将基带信号的变化加入到载波频率控制字上,便可以达到频率调制的效果。NCO的内容可以看之前的那篇讲述DDS上变频的文章,Xilinx称之为DDS,Altera称之为NCO。

为了方便板上验证,这里使用NCO产生基带信号,模拟整体过程。

使用50M时钟,NCO的相位精度为32,基带信号使用200kHz频率,算出的频率控制字为17179869;输出的基带信号位宽为16位;载波设为20MHz信号。输出的基带信号转为载波频率控制字的变化量,需要乘上一个倍数,倍数关系大致为:

将数值带入,算出倍乘因子是131。这里的倍数控制调制深度,不宜设的过大。将算出的数值与载波的频率控制字相加,代码如下:

module phi_control2(
       input clk,
       input rst,
       input [26:0]sig_phi,
       output reg [31:0]phi
       );
 parameter phi_t =171798691 ; //
 
 //assign phi = phi_t + {{5{sig_phi[26]}},sig_phi};
 always @ (posedge clk or posedge rst)
 begin
  if (rst)
   phi <= 'd0;
  else
   phi <= phi_t + {{5{sig_phi[26]}},sig_phi};
 end
endmodule

由于变化量的数值与频率控制字不是相同位宽,而且变化量的值是有符号数,所以需要进行符号位扩展,将两个参数的位宽补至相同。将最终的频率控制字送入NCO,输出的就是FM调制信号。

SignaltapII 抓取的FM调制图

乘法器

将数据保存为txt,在matlab读取并做频谱分析,结果如图,截位肯定会损失精度。

乘法器

调制的结构图如下图所示:

乘法器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分