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); %記住這里是負數用加號即可elsefix_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); %關閉文件
?