为方便起见,我将使用 matlab 代码,我使用 C++ 代码得到相同的行为。
我有两个信号:
Fp=5;
A=0.00025;
Phi=0;
Off=0.5;
KADC_5VOLT=5.0/32768.0;
tc=250e-6;
tmax=30;
t=0:tc:tmax;
Buf1= int32 ((A*cos(2.0*pi*t*Fp+ Phi*pi/180.0)+Off)/(KADC_5VOLT));
Buf2= int32 ((A*cos(2.0*pi*t*Fp+ Phi*pi/180.0)+0)/(KADC_5VOLT));
Buf1=double(Buf1);
Buf2=double(Buf2);
在 Buf1 上执行 FFT,我得到 5 Hz 分量的幅度 2.4246e-04((这个值似乎作为 A 的函数随机变化,而 A 很小);而对于 Buf2,我得到 5 Hz 的幅度 2.6287e-04 Hz 分量。如果我设置 A > 0.0015,对 Buf1 和 Buf2 执行 FFT,我得到 5 Hz 分量的幅度 0.0015;
如果我只使用:
Buf1= ((A*cos(2.0*pi*t*Fp+ Phi*pi/180.0)+Off)/(KADC_5VOLT));
Buf2= ((A*cos(2.0*pi*t*Fp+ Phi*pi/180.0)+0)/(KADC_5VOLT));
在 Buf1 和 Buf2 上执行 FFT,我得到 5 Hz 分量的振幅 2.5000e-04。
这是什么原因?似乎问题与量化误差有关,但为什么偏移量如此重要?另外:我怎样才能摆脱它?