%x定义为10bit长度,取1024个点,步长为2*pi/1024
x = 0 : 2*pi/1024 : 2*pi-2*pi/1024;
N=12; %12bit进行纵轴的量化,取值范围为-2^11-1到2^11-1
phase=0; %相位初始值
cos_tab=round(cos(x)*(2^(N-1)-1));%12bit,余弦表
sin_tab=round(sin(x)*(2^(N-1)-1));%12bit,正弦表
frectrl=round(fi/fs*(2^31-1)); %32bit,频率控制字,相当于每次相位跳转这么多,fi为给DDS产生信号的频率,fs为采样频率
idx=zeros(1,length(t)); %提前定义长度来提高运算速度
for k=1:length(t) %跟时间统一长度
phase=phase+frectrl;
idx(k)=mod(bitshift(phase,-22),1024)+1; %因为频率控制字为32bit,查找表只有10bit,故右移22位取高10位
end
生成的idx为查找表的索引号直接代入cos_tab[idx],sin_tab[idx],为生成的正余弦分量。