DDS产生波形及AM 调制解调原理

DDS产生波形及AM FM调制解调原理

原视频链接:https://www.bilibili.com/video/BV17W411i7zQ?t=1469

该博客主要是观看完上述视频链接后做的笔记:
如有侵权,请联系我删除,谢谢。

一、FPGA工程搭建

1.采用的是Basys3开发板,芯片型号为:xc7a35tcpg236-1
2.调用block ram,生成IP,ram位宽为8bit,深度为1024.
3.采用matlab生成波形文件:
SIN_COS_MAKER.M

%---------------------------------%
width = 8;		%设置bram的位宽
depth = 1024;   %设置bram的深度
%---------------------------------%
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('C:\Users\10242\Desktop\2018_1_21_DDS\cos_8_1024_signed.coe','wt');

fprintf(fid,'memory_initialization_radix = 10;\n');
fprintf(fid,'memory_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);                    %关闭文件

在这里插入图片描述
在这里插入图片描述

4.正弦波代码生成编写

module dds_cos(
	input						clk,
	input						rst_n,
	output	reg	[7:0]			cos_a,
	output	reg	signed	[7:0]	cos_b
);

//---------------------------------------//
//FreqWord = 2^32 * freq  / sysclk
parameter freq_a 			= 32'd4294967; 	//----->100k		
parameter freq_b 			= 32'd42949673;	//----->1M

parameter cnt_width 		= 8'd32;
parameter rom_addr_width	= 10;
//---------------------------------------//

//---------------------------------------//
reg		[cnt_width-1:0]			cnt_a;
reg		[cnt_width-1:0]			cnt_b;
wire 	[rom_addr_width-1:0]	addr_a;
wire	[rom_addr_width-1:0]	addr_b;
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cnt_a <= 0;
		cnt_b <= 0;
	end
	else	begin
		cnt_a <= cnt_a + freq_a;
		cnt_b <= cnt_b + freq_b;
	end
end

assign	addr_a = cnt_a[cnt_width-1:cnt_width-rom_addr_width];
assign	addr_b = cnt_b[cnt_width-1:cnt_width-rom_addr_width];
//------------------------------------------//

//-------------调用ROM核---------------------//
wire	signed	[7:0]	cos_a_r;
wire	signed	[7:0]	cos_b_r;

ROM			ROM_inst(
  .clka		(clk),
  .addra	(addr_a),
  .douta	(cos_a_r),
  .clkb		(clk),
  .addrb	(addr_b),
  .doutb	(cos_b_r)
);
//-------------------------------------------//

//-------------------------------------------//
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cos_a <= 0;
		cos_b <= 0;
	end
	else	begin
	//加128会将有符号数据变为无符号数据;
	//正常ILA看波形数据时都是看有符号数据才是正弦波,DA识别的也是有符号数据;
	//但是有时候数据在进行处理时是进行无符号数据的处理,此时就需要加128
		cos_a <= cos_a_r + 8'd128;
		cos_b <= cos_b_r;
	end
end

endmodule

二、AM调制原理

1.A0是一个直流分量,m(t)是需要调制的信号(AD采样进来的信号),cos(wt)是载频(10M、50M的那种,FPGA内部产生的正弦波),载频是一个有符号型的
在这里插入图片描述
2.直流分量是有要求的,要求必须大于信号的1/2峰峰值,使得加入直流分量后整个信号都在x轴上方。否则解调出来的会不对,造成失真。
在这里插入图片描述
3.包络解波:
模拟电路的方法是:一个二极管加一个电阻、电容实现的包络解波。
数字电路的方法是:接收到信号进行取绝对值,将负信号转为正信号,然后经过低通滤波器将载频滤掉。
在这里插入图片描述
4.频域分量有一个w+wc和一个w-wc,解调的时候滤波器的截至频率要低于w-wc
在这里插入图片描述

三、FM调制原理

FM与AM的非官方定义:
AM:载波 幅度 随着调制信号 频率 的变化而变化;
FM:载波 频率 随着调制信号 幅度 的变化而变化;
1.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.FM:载波 频率 随着调制信号 幅度 的变化而变化…过程解析:
当调制信号的幅值为0时,载波的频率等于原载波的频率;
当调制信号的幅值为+1/2峰峰值时,载波的频率小于原载波的频率;
当调制信号的幅值为正峰值时,载波的频率达到最小;
当调制信号的幅值为负峰值时,载波的频率达到最大;

在这里插入图片描述
3.例子:
(图片中2的14次方与2的n次方,需要注意),下图可以理解为一个14bit的AD,采集一个50khz的正弦波数据。最终得出来得N为在任意时刻得频率控制字
FreqWord = 2^32 * freq / sysclk
在这里插入图片描述
所以:freq_word为载波的频率控制字,N为任意时刻的频率控制字
在这里插入图片描述

4.解调
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有钱挣的地方就是江湖之FPGA行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值