五 单音信号对载波信号进行双边带幅度调制
5.1 实验内容
- 合成一个双边带AM调制信号,载波频率1MHz,调制信号1KHz,采样率50MHz
- 使用Modelsim仿真,观察波形,使用Matlab观察频谱
- 使用Signaltap抓取电路输出波形,使用Matlab观察频谱
方案描述 - 使用两个DDS,一个DDS为1MHz,另一个为1KHz,直接相乘
- ROM表由Matlab生成,10bit地址,10bit量化
- 相位累加器32bit
5.2 原理
(1)DDS原理
(2)双边带调幅原理
时域表达式
图5. 1 DSB时域图像
频域表达式
图5. 2 DSB频域图像
5.3 双边带幅度调制Verilog实现
5.3.1 DDS模块实现
(1)dds_core.v
完成ROM地址改变的功能
`timescale 1ns/1ns
module dds_core_sin(
CLK, //clock
RST, //button reset, high level reset
// FWEN, //button frequency word update enable, high level enable
FWIN, //input frequency word
CLKOUT, //output clock
SINOUT, //sine signal output, 2's complement format
AccCNT
);
input CLK;
input RST;
//input FWEN;
input[31:0] FWIN;
output CLKOUT;
output[9:0]SINOUT;
output[31:0]AccCNT;
parameter FW_WL=32; // frequency word 32bit
parameter RA_WL=10; // rom address input length
parameter RD_WL=10; // rom data output length
//reg [FW_WL-1 : 0] fwin_R; // frequency word
reg [FW_WL-1 : 0] acc_R; // acc register record frequency + acc
reg [RA_WL-1 : 0] addr_R; // addr_R related to rom input
reg [RD_WL-1 : 0] sinout_R; // sinout_R is the register of rom output
wire [RD_WL-1 : 0] romout_W;// related to rom output
always @ (posedge CLK ) begin
if(!RST)
begin // all registers clear out
// fwin_R <= 0;
acc_R <= 0;
addr_R <= 0;
sinout_R <= 0;
end
else begin
// fwin_R update
// if(FWEN) fwin_R <= #5 FWIN;
// else fwin_R <= #5 fwin_R;
// fwin_R <= FWIN;
// acc_R update
// acc_R <= fwin_R + acc_R;
acc_R <= FWIN +acc_R;
// addr_R update, the acc_R high RA_WL is rom address
addr_R <= acc_R[FW_WL-1 : FW_WL-1 - (RA_WL-1)];
// sinout_R update
sinout_R <= romout_W;
end
end
sine_rom_10bit