我又想了一下,认为我昨天的看法应当没有错。
我们首先考虑纯数学的富利叶变换,也就是用解析方法来处理频谱问题。这种方法有一个基本要素:严格按照信号本身的周期来处理。当然,我们可以很容易的知道按照信号周期的若干整数倍来处理,可以得到完全性同的结果。
而fft这类算法,是以数值方法处理富利叶变换的问题,如果我们不考虑处理器的实际精度有限的问题,那么如果处理的数据正好是信号的整数周期,那么除了采样定理的限制之外,可以认为这种方法也能得到精确的答案。
由于通常的数字系统采样频率是固定的,加上这类算法通常处理的数据量是2的n次幂,所以很难在保证处理的数据周期和信号周期之间的整倍数关系。
为了减小由此产生的误差,所以引进了窗口函数。窗口函数的用途是减少时间轴上两端的数据的重要性,通过这种方法可以将由于周期不匹配导致的阶段误差减小到可以接受的程度。但不管什么样的窗口函数,都无法将误差减小到零。
我们再看看84楼的16bit dds的数据:这里相位步长是8321,从相位零开始,经过65536步之后,相位为8321*65536。实际上这里65536对应的相位2π,所以在这里fft的输入数据正好是8321个周期。
如果我前面的结论没有错,那么对这组数据进行fft的时候,即使不用窗口函数,我们也应当能得到同样好的频谱输出 而对于32bit dds,我们可以计算出fft输入数据为:8321.0017个周期,不满足整数周期的条件,所以fft的结果会有误差。
希望我没错