正弦波信號發生器(離散采樣)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM