DDS ROM数据生成程序整理贴<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
用FPGA做DDS,如果采用ROM查表的话,波形数据必不可少,当然ROM可以存正弦、方波、三角波的数据,对应也就成为了波形发生器。
MATLAB生成正弦波波形数据
width=8; %宽度是
depth=1024; %深度是1024
index = linspace(0,pi*0.5,depth);
sin_a=sin(index); %归一化
sin_d=fix(sin_a*(2^width-1)); %量化
plot(sin_d);
axis([0,depth-1,0,2^width-1]);
%===============================开始写mif文件===============================
addr=0:depth-1;
str_width=strcat('WIDTH=',num2str(width));
str_depth=strcat('DEPTH=',num2str(depth));
fid=fopen('f:\sin.mif','w'); %打开或者新建mif,存放位置和文件名任意
%如果只写文件名,则在当前目录下建立此文件
fprintf(fid,str_width);
fprintf(fid,';\n');
fprintf(fid,str_depth);
fprintf(fid,';\n\n');
fprintf(fid,'ADDRESS_RADIX=HEX;\n'); %因为下面的数据输入我选的是16进制,
%这里可根据情况改写
fprintf(fid,'DATA_RADIX=HEX;\n\n');
fprintf(fid,'CONTENT BEGIN\n');
fprintf(fid,'\t%X : %X;\n',[addr;sin_d]) %开始写数据了
fprintf(fid,'END;\n');
fclose(fid);
程序解释:
axis([xmin xmax ymin ymax]) [ ]中分别给出x轴和y轴的最大值、最小值
sin(x):正弦函数
fix(x):截尾取整.
>> fix( [3.12 -3.12])
ans = 3 -3
linspace(x0,x1,n) :其中n代表的是点的数目,即分成n-1等分,步长应当是(x1-x0)/(n-1)
用C语言编写的生成正弦的数据:
一个网上高手编写的程序
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
还有几个Matlab程序
https://static.assets-stash.eet-china.com/album/old-resources/2008/12/1/ff5e0f88-c01b-43e3-8813-ab232ca82e4e.rar
在ISE中ROM怎么转载数据可以参考如下教程:
下面是我用LabVeiw弄的正弦波波形数据正周期采集程序,准备继续完善,能生成方波,三角波,能采集1/4周期,1个周期。
下载可以到我的另一篇文章:
文章评论(0条评论)
登录后参与讨论