正弦波發生器:
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原理作鋪墊)
