DDS的fpga实现

DDS的fpga实现

DDS的原理可以查找其他资料,本次主要采用matlab生成载波数据,通过存储在ROM中对数据进行读取。
1、先附上matlab代码生成的载波数据

clc;
clear all;
close all;
Nbit=16;%量化位数
Ndata= 4096; 
N_data=0:Ndata-1;
sintheta=sin(pi*2/4/4096*(N_data));
plot(N_data,sintheta);
title('y=sin(\theta)');
xlabel('\theta');
ylabel('sin');

Nor_sin= sintheta/max(abs(sintheta)); % 对数据进行归一化
sinlianghua=round(Nor_sin*2^(Nbit-1)-1);%量化后注意首尾是否溢出
sinlianghua(1)=0;%首位负数-1改成0.

Fix_Nor2=dec2bin(sinlianghua,Nbit);

%% 将处理后数据存储在.coe文件中
fid = fopen('sintheta.coe','w');
fprintf(fid,'MEMORY_INITIALIZATION_RADIX = 2;\r\n');
fprintf(fid,'MEMORY_INITIALIZATION_VECTOR =\r\n'); 
for i=1:Ndata
  fprintf(fid, '%s\r\n', Fix_Nor2(i,:)); 
end
fclose(fid);

可以看出,为了节省寄存器资源,根据正弦函数的对称性,只存储sin函数的四分之一周期。
在这里插入图片描述
上图是取得的需要存储的数据波形。

接下来就是关键的,需要在FPGA中进行取数以及对地址和数据的转换。先附上FPGA程序如下。首先定义控制字以及相位位宽,同时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学技术得猴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值