'
fdsgdhhjy uytuytutyuytu
'
hi mainstreet,俺试着运行了您的程序,发现如下问题
1、波表的位宽超限,已改成2^n-1;
2、fft的功率计算有误。既然前面已对电压平方了,后面就db计算应该是10*log10(),也改了;
3、相位累加部分没看懂,请问如何表示一个16位累加器,又如何表示一个32位累加器呢?否则相位的舍入就不能评估了。是否可介绍一下您程序的设计原理。
下面是俺修改的程序,运行效果与小比尔/5和我的c程序类似了。但还是不知道这个dds是多少位累加器的,我感觉这里还有错误。

,运行结果见附图:
function mainstreet_case_modis
close all;
clear all;
m=10; wave=sin(2*pi*(1:2^m)'/2^m); % 1024-entry wave table
n=8-1; wave=round(wave*(2^n-1)); % truncated to 8-b
f0=0.1*exp(1)/2.7; % normalized frequency is 0.1
phase0=rand; % initial phase
k=16; phase1(1:2^k)=phase0+2*pi*f0*(0:2^k-1); % phase
phase2=mod(phase1,2*pi)/2/pi; % phase between 0 and 2*pi
phase3=round(phase2*(2^m-1)+1); % phase as wave table indices
x=wave(phase3); % wave table output
x=x.*hanning(2^k); % windowed
y=fft(x);
y2=abs(y(1:2^k/2)).^2;
y2=y2/max(y2); % normalized
plot((1:2^k/2)/2^k,10*log10(y2));
axis([0 0.5 -100 0]);
title(['fft of dds based on ',num2str(2^m),'x',num2str(n+1),' wave table'])
fhandle=fopen('wave','w');
for i=1:length(wave)
fprintf(fhandle,'%3i\n',wave(i));
end