标签:ddr 一个 创建 正弦 通过 符号位 fopen rom nbsp
正弦波发生器:
1.将连续的正弦波信号进行离散化
	    设正弦波周期为T=2*pi,对一个周期的正弦波进行100次采样,则
	  相应采样点的离散值为:
		    sin(2*pi/100)
		    sin(2*pi*2/100)
		      . . .
		    sin(2*pi*n/100)  0<=n<=100
		      . . .
		    sin(2*pi*100/100)
	    对于采样点离散值的计算可以采用Matlab进行计算,程序见下。
	
2.将离散化后的正弦波一个整周期存储到Rom中
	  (1)将离散后的数据进行定点化,Rom的规格是256x8bits,数据格式1bit符号位和7bits小数位
	  (2)创建Rom
clc;
clear all;
%% 将连续的正弦波信号进行离散化
% 设正弦波周期为T=2*pi,对一个周期的正弦波进行100次采样,则
%	相应采样点的离散值为:
%		sin(2*pi/100)
%		sin(2*pi*2/100)
%		. . .
%		sin(2*pi*n/100)  0<=n<=100
%		. . .
%		sin(2*pi*100/100)
%% 1.设置离散化参数
T = 2*pi;           %正弦波周期
N = 2^8;            %采样点个数
sp = 0:(N-1);       %采样点
%% 2.进行离散化采样
sin_data = sin(T*sp/N);     % sin_data取值为-1至+1之间的浮点数
%% 3.将离散后的正弦波存储到Rom中
% 将离散后的数据进行定点化,
% Rom的规格是256x8bits,数据格式1bit符号位和7bits小数位
fix_point_sin_data = sin_data * (2^7-1);
fix_point_sin_data = fix(fix_point_sin_data);
% 对负数取补码,便于存储Rom中
for i=1:N
    if fix_point_sin_data(i)<0
        fix_point_sin_data(i) = 256+fix_point_sin_data(i);
    end
end
%% 生成mif文件
fid = fopen(‘rom_256x8_init.mif‘,‘w+‘);
fprintf(fid,‘WIDTH=8;\n‘);
fprintf(fid,‘DEPTH=256;\n‘);
fprintf(fid,‘\n‘);
fprintf(fid,‘ADDRESS_RADIX=UNS;\n‘);
fprintf(fid,‘DATA_RADIX=UNS;\n‘);
fprintf(fid,‘\n‘);
fprintf(fid,‘CONTENT BEGIN\n‘);
for i=0:255
    fprintf(fid,‘    %d : %d;\n‘,i,fix_point_sin_data(i+1));
end 
fprintf(fid,‘END;\n‘);
fclose(fid);
   对于正弦波,如何能够将输出频率提高?离散后的正弦波采样值存储在rom中,通过对rom
进行寻址,读出存储的数据即为正弦波的采样值,因此可以通过控制对rom寻址的快慢(步长)
,来控制输出正弦波的频率。(此为DDS原理作铺垫)
标签:ddr 一个 创建 正弦 通过 符号位 fopen rom nbsp
原文地址:http://www.cnblogs.com/MAQI/p/7604247.html