通信信号源设计原理
通过设计一个DDS信号源,然后将该信号作为载波信号,再对基带信号进行2ASK、2FSK、2PSK、2DPSK调制,进而产生多种通信信号。
设计框图如下:
将PN序列进行2ASK、2FSK、2PSK、2DPSK调制,其中载波发生器提供三种不同的载波信号,按键设置用来选择当前DAC输出的最终调制信号,DAC输出模块将调制好的数字化波形转换为模拟信号。
PN序列采用的设计方法是m序列,采用3级寄存器生成7序列基带信号。
调制模块分别包含:2ASK、2FSK、2PSK、2DPSK这四种调制方式,可以通过按键选择所要输出的调制信号。
按键设置,主要分为按键消抖和按键编码,用来切换输出信号。
载波发生器,采用DDS的方法进行生成三种载波信号,分别为:500Hz(起始相位为0度),1K(起始相位为0度),1K(起始相位为180度)。
DAC输出模块,这是驱动TLC5615的硬件接口,用于将数字信号转换位模拟信号。
硬件原理图说明
按键操作:
波形输出:
示波器要接LVOUT这个排针的引脚,旁边那个就是地;输出的是经过调制的正弦信号!
136是输出PN序列,135是输出pdsk调制。
将这两个信号接入示波器可以和前面的DAC输出进行对比。
实验代码
-
顶层接口模块:
/********************************版权声明************************************** ** 大西瓜团队 ** **----------------------------文件信息-------------------------- ** 文件名称: DDS_top.v ** 创建日期: ** 功能描述:顶层设计 ** 硬件平台:大西瓜第3代开发板 http://daxiguafpga.taobao.com ** 版权声明:本代码属个人知识产权,本代码仅供交流学习. **---------------------------修改文件的相关信息---------------- ** 修改人: ** 修改日期: ** 描述:PN序列频率为500HZ 载波1频率为500HZ 载波2频率为1000Hz 载波3频率为1000Hz相位相差180 *******************************************************************************/ module DDS_top(clk,//内部时钟 reset,//复位 sclk,//DAC时钟输入 din,//DAC数据输入 cs,//DAC片选 m_ser_out,//PN序列输出,25引脚 set_ask,//设置输出为ask set_fsk,//设置输出为fsk set_psk,//设置输出为psk set_dpsk,//设置输出为pdsk dpsk_code_out //pdsk调制输出,27引脚 ); input clk; input reset; output sclk; output din; output cs; input set_ask; input set_fsk; input set_psk; input set_dpsk; output m_ser_out; output dpsk_code_out;
wire clk; wire reset; wire set_ask_line; wire set_fsk_line; wire set_psk_line; wire set_dpsk_line; wire clk_div; wire[9:0] data_line1; wire[9:0] data_line2; wire[9:0] data_line3; wire[9:0] ask_code_sin_out; wire[9:0] fsk_code_sin_out; wire[9:0] psk_code_sin_out; wire[9:0] dpsk_code_sin_out; wire[9:0] dac_data_in;
DDS u4(.clk(clk), .reset_n(reset), .dds_data_out1(data_line1), .dds_data_out2(data_line2), .dds_data_out3(data_line3)); m_ser u5( .clk(clk),//sys clk .reset_n(reset),//sys reset_n .clk_div(clk_div), .m_ser_out(m_ser_out)//PN ser_code out ); ask_code u6( .clk(clk), .m_ser_code_in(m_ser_out), .dds_sin_data_in(data_line2),//10k正弦波 .ask_code_sin_out(ask_code_sin_out) ); fsk_code u7( .clk(clk), .m_ser_code_in(m_ser_out), .dds_sin_data_in1(data_line1),//1k正弦波 .dds_sin_data_in2(data_line2),//10k正弦波 .fsk_code_sin_out(fsk_code_sin_out) ); psk_code u8( .clk(clk), .m_ser_code_in(m_ser_out), .dds_sin_data_in2(data_line2),//10k正弦波 .dds_sin_data_in3(data_line3),//10k正弦波 .psk_code_sin_out(psk_code_sin_out) ); |