AM调制的FPGA实现

一、说明:

  1. 功能:AM调制
  2. 平台:Vivado 2016.4 和 Matlab R2017a

二、原理:

1. AM调制原理

  • AM已调信号的时域表达式:
    在这里插入图片描述

  • 已调信号的频域表达式:
    在这里插入图片描述
    本质上AM调制就是频谱的搬移。

  • AM调制的系统框图
    在这里插入图片描述
    将调制信号加上一个直流分量,保证信号的最小值大于零,然后再和载波相乘,得到已调信号。

三、AM调制的FPGA实现

1.产生调制信号和载波信号

调用ROM IP核在FPGA内部产生两路余弦信号,其中一路信号用于模拟外部输入的调制信号,另一路用作载波信号。
在配置ROM IP核之前,需要用Matlab生.coe文件,存放在ROM核里。

  • Matlab生成.coe文件:
%---------------------------------%
width=8;       %设置rom的位宽
depth=1024;     %设置rom的深度
%---------------------------------%

x=linspace(0,2*pi,depth);       %在一个周期内产生depth个采样点
y_cos=cos(x);                   %生成余弦函数
%y_cos=sin(x);                   %生成正弦函数
%y_cos=round(y_cos*(2^(width-1)-1))+2^(width-1)-1;       %将数据转化成整数,生成无符号数
y_cos=round(y_cos*(2^(width-1)-1));       %将数据转化成整数,生成有符号数

plot(x,y_cos);                  %绘图

fid = fopen('E:\Workspace\DDS\Design\IP_Core\cos.coe','wt');

fprintf(fid,'memory_initialization_radix = 10;\nmemory_initialization_vector = ');
for i = 1 : depth
    if mod(i-1,8) == 0 
        fprintf(fid,'\n');
    end
    fprintf(fid,'%6d,',y_cos(i));
end

fclose(fid);                    %关闭文件

生成.coe文件后就可以进行IP核的配置了。

  • ROM核具体配置:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

配置完IP核后,编写控制模块,产生两路信号。其中,调制信号上叠加的直流分量的大小为调制信号的峰值,这样将得到调制度为100%的已调信号。如果要得到不同的调制度,则需要叠加不同大小的直流分量,同时需要注意定义的数据位宽,防止数据溢出。

  • 产生载波和带有直流分量的调制信号:
module cos_make(
	input	clk,
	input	rst_n,
	output	reg	[7:0]	cos_s,
	output	reg	signed	[7:0]	cos_c
);

//------------------------------------//
parameter freq_s = 32'd429497;			//调制信号频率10k
parameter freq_c = 32'd42949673;		//载波频率1M
parameter cnt_width = 8'd32;
//------------------------------------//

//------------------------------------//
reg 	[cnt_width-1:0]	cnt_s = 0;
reg		[cnt_width-1:0]	cnt_c = 0;
wire 	[9:0]	addr_s;
wire	[9:0]	addr_c;
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cnt_s <= 0;
		cnt_c <= 0;
	end
	else	begin
		cnt_s <= cnt_s + freq_s;
		cnt_c <= cnt_c + freq_c;
	end
end

assign	addr_s = cnt_s[cnt_width-1:cnt_width-10];
assign	addr_c = cnt_c[cnt_width-1:cnt_width-10];
//------------------------------------//

//------------调用ROM核----------------//
wire 	signed	[7:0]	cos_s_r;
wire 	signed	[7:0]	cos_c_r;

ROM			ROM_inst(
	.clka	(clk),
	.addra	(addr_s),
	.douta	(cos_s_r),
	.clkb	(clk),
	.addrb	(addr_c),
	.doutb	(cos_c_r)
);

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cos_s <= 0;
		cos_c <= 0;
	end
	else	begin
		cos_s <= cos_s_r + 8 'd128;		//加上大小为峰值的直流分量
		cos_c <= cos_c_r;
	end
end

endmodule

2.生成AM调制信号

得到两路信号后就可以用乘法器将两路信号相乘,得到已调信号。

  • 乘法器具体配置:
    在这里插入图片描述
    在这里插入图片描述

  • AM调制的顶层模块:

module modulate(
	input		clk,
	input		rst_n,
	output	signed	[15:0]	AM_mod
);

wire 	[7:0]	cos_s;
wire	signed	[7:0]	cos_c;

//------------调用出波模块------------//
cos_make		cos_make_inst0(
	.clk			(clk),
	.rst_n		(rst_n),
	.cos_s		(cos_s),
	.cos_c		(cos_c)
);
//-----------------------------------//

//------------调用乘法器--------------//
MULT		MULT_inst1(		
  .CLK	(clk),
  .A		(cos_s),
  .B		(cos_c),
  .P		(AM_mod)
);

endmodule

3.仿真调制结果

以上AM调制过程基本完成,但是正确与否还需要通过仿真来确定,接下来编写仿真用的测试模块。

  • TestBeach的编写:
`timescale 1ns/1ps

module tb_AM();

//---------接口设置----------//
reg 	sclk;
reg		rst_n;
wire 	signed	[15:0]	AM_mod;
//--------------------------//
initial		sclk = 1;
always	#5	sclk = ~sclk;		//100M时钟

initial	begin
	rst_n = 0;
	#500
	rst_n = 1;
end
//--------------------------//
modulate		modulate_inst0(
	.clk		(sclk),
	.rst_n		(rst_n),
	.AM_mod		(AM_mod)
);

endmodule

在Vivado中将各个文件添加进工程后,运行仿真。

  • 仿真结果如下:
    在这里插入图片描述
    在这里插入图片描述

已调信号能明显看到包络,并且包络的频率同调制信号一致,表明AM调制正确。

  • 30
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
FPGA是一种可编程逻辑器件,可以通过编程来实现各种数字电路的功能。AM调制是一种调制方式,将音频信号加到载波信号上进行传输。在FPGA实现AM调制的方式如下: 1. 设计解调器:首先,在FPGA中设计一个解调器,用于将接收到的AM调制信号解调成原始音频信号。解调器可以基于调频解调器或者相干解调器来设计,并根据AM调制信号的特点进行适当的调整。 2. 载波生成:在FPGA中生成AM调制所需的载波信号。载波信号的频率通常与音频信号相比较高,需要通过FPGA中的数字信号发生器或者计数器来生成。可以根据AM调制的要求,设置合适的频率和幅度。 3. 调制信号生成:将音频信号与载波信号进行调制合成。音频信号可以通过ADC将模拟信号转换为数字信号,然后通过FPGA内的数字信号处理模块进行处理。通过将音频信号与载波信号相乘,得到被调制的信号。 4. 合成输出信号:将调制后的信号与FPGA中的输出模块相连接,将信号转换为模拟信号输出。可以通过DAC将数字信号转换为模拟信号,并进行滤波等处理,最后输出为AM调制信号。 通过以上步骤,可以在FPGA实现AM调制。根据具体的需求和设计,可以进一步优化和完善电路结构,提高系统的性能和效率。同时,通过FPGA的可编程性,还可以灵活地进行调试和修改,方便实现多种调制方式和音频信号处理功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值