clc; %全屏清零 clear all; %变量清零 N=2^8; %设置ROM深度(字变量)的变量参数, s_p=0:255; %正弦波一个周期的采样点数 sin_data=sin(2*pi*s_p/N); %离散正弦波数据,这里的N决定了由ROM的深度决定,如果要更多的采样点,需要把N增大 %打印我们的波形 %plot(sin_data,'r*'); %红色r*打印 %hold on; %保持 %plot(sin_data); %打印原来的波形 %定点化 fix_p_sin_data=fix(sin_data*127); %调用fix函数,原来幅度是1,扩展到127——(-127)为什么乘127呢?因为每一个采样点 %的位数是8位,而定点化前,正负的点的个数各占一半,也就是7位,2^7-1 = 127。 %若需要精度更高的定点化数据,那么需要把幅度乘的数加大。 %由于使用的DAC位数只有8位,因此定点化8位就可以了,也就是乘以2^(8-1)-1=127即可 for i=1:N %总共1:2^8,即1:256,共256个点(深度),对每个点进行定点化 if fix_p_sin_data(i)<0 %如果得到的值小于零,那么就加上256(定点化位数的幅度)进行取正值 fix_p_sin_data(i)=N+fix_p_sin_data(i); %记住这里是负数用加号即可 else fix_p_sin_data(i)=fix_p_sin_data(i); %若大于0,不需要修正 end end %打印定点化后的波形 %plot(sin_data,'r*'); %红色r*打印 %hold on; %保持 %plot(127*sin_data); %打印原来的波形 fid=fopen('sp_ram_256x8.mif','w+'); %创建并打开名字叫‘p_ram_256x8.mif'的文件,'w+'进行写数据 fprintf(fid,'WIDTH=8;\n'); %打印(写) WIDTH=8; 然后 /n 换行 fprintf(fid,'DEPTH=256;\n'); % fprintf(fid,'ADDRESS_RADIX=UNS;\n'); % fprintf(fid,'DATA_RADIX=UNS;\n'); % fprintf(fid,'CONTENT BEGIN \n'); %上面的print都是写.mif文件的固定格式 for i=1:N %这里开始写数据 fprintf(fid,'%d:%d; \n',i-1,fix_p_sin_data(i)); %数据格式是 行:数据 end %行从0~255,数据则从sin的第一个数(没有0个)写到256个数,12行可以看出 fprintf(fid,'END; \n'); %文件格式'END;' fclose(fid); %关闭文件
不忘初心:写博客最初目的就是记录自己容易忘记的东西,而不是像写书那样专门写给别人看的。所以,除禁止转载的博文外,其他博文可以转载。
尽自己的努力,做到更好!