Board logo

标题: 基于matlab FPGA verilog的DUC/DDC设计 [打印本页]

作者: yuyang911220    时间: 2015-8-30 22:03     标题: 基于matlab FPGA verilog的DUC/DDC设计

1、一个完整的DUC功能框图如下:


FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="297" width="690">

一个实时信号是由两个分量组成:I(n(同相分量))Q(n)(正交分量)。这两个分量频率相等,相位相差90度。相关的理论可以参考参考资料的Quadrature_signals.pdf文件。欧拉公式:

FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="59" width="598">
FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="82" width="690">

FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="64" width="690">


2、由三角公式 cos(α+β)=cosα·cosβ-sinα·sinβ,假设代表两个信号的频率,要FPGA实现上变频,只需实现公式cosα·cosβ-sinα·sinβ,令频率分量代表输入信号,频率分量代表本振,FPGA实现上变频功能框图:

FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="196" width="395">


分量FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="16" width="17">和分量FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="23" width="17">都有DDS产生(见DDS模块),实现上变频。
3、modelsim仿真和输出频谱分析
(1) 分量频率=0.1MHz, 分量=0.1MHz
FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="356" width="690">

FPGA verilog的DUC/DDC设计(原创)" title="基于matlab FPGA verilog的DUC/DDC设计(原创)" height="564" width="670">


图中可以看到,DUC的输出为0.2MHz,为本振和信号频率相加,-0.2MHz为镜像频率。
部分代码:
//Filename  :duc_block.v
//modulename:duc_block
//Author    :afei
//Date    :2012-5-29
//Description :数字上变频,i_nco1控制信号频率,i_nco2控制本振频率        
//Uesedfor
//Taobao   :
//E-mail   :2352517093@qq.com
//==========================================================================
`timescale 1ns/1ps

module duc_block(
   i_clk    ,
   i_rst_n  ,
   i_nco1   ,
   i_nco2   ,
   
    o_duc
    );
   input          i_clk   ;//25MHz
   input          i_rst_n  ;
   input  [8:0]  i_nco1   ;//信号频率控制字
   input  [8:0]  i_nco2   ;//本振频率控制字
    outputreg signed[7:0]o_duc    ;//上变频输出
   
.........................................
.........................................
........................................
//=======================================================
// 上变频
//=========================================================
//======cosα*cosβ
reg signed[15:0] sub_data1 ;
[email=always@%28posedge]always@(posedge[/email] i_clk ornegedge i_rst_n)  
  if(!i_rst_n)                              
        sub_data1<=16'b0 ;
   else
        sub_data1<=signal_i*vco_i ;
        
//=====sinα*sinβ
reg signed[15:0] sub_data2 ;
[email=always@%28posedge]always@(posedge[/email] i_clk ornegedge i_rst_n)  
  if(!i_rst_n)                              
        sub_data2<=16'b0;                 
  else                                      
        sub_data2<=signal_q*vco_q;         
        
//=======cosα*cosβ-sinα*sinβ      
reg signed[15:0] sub_result;        
[email=always@%28posedge]always@(posedge[/email] i_clk or negedgei_rst_n)   
   if(!i_rst_n)                                
         sub_result<=16'b0;                  
   else                                      
         sub_result<=sub_data1-sub_data2;         

//========================================================
// 截位输出
//========================================================                  
[email=always@%28posedge]always@(posedge[/email] i_clk or negedgei_rst_n)     
   if(!i_rst_n)                                 
         o_duc<=8'b0;                    
   else                                       
         o_duc<=(sub_result[14:0]+{!sub_result,{6{sub_result[14]}}})>>7;//四舍五入   
        
           
                  
endmodule




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0