在本节,我们将重点考察DTFT的计算方面的问题。与前面一样,序列的长度是有限的。我们关心的重点是如何计算其频谱中某些频率处的频谱密度值。这是因为要对信号进行数字处理,并保存频谱分析的结果,必须解决如何求解频谱中各频率点的频谱密度的问题。
5.5.1 某个频率处的DTFT频谱密度值
设x(n), n=0,1,2……,L-1是已加窗的信号,其频谱为

根据上面的公式,对于 中的任意值都可以计算出
来。利用抽样信号频谱的周期性,可以把区间
映射到 ,于是得到新的区间
。
例如 的频率分量在
处,于是 。因此,

即 是多项式X(z)在
处的抽样。这样,我们的注意力转向如何求下列多项式的值。
对下面的多项式,

我们可以利用Horner算法来多项式的值。其算法伪代码为:
对每个给定的复数z,执行下面的操作
X=0
For n=L-1 down to n=0 do:
X = Xn + z-1X
当循环结束时,X即为多项式X(z)的值。
下面是具体的代码实现。
#include <comlx.h>
complex dtft(int L, double* x,
double W)
{
complex z, X;
int n;
z = cexp(cmplx(0,-W))
X = cmplx(0,0)
for (n=L-1;n>=0;n--)
X = cadd(cmplx(x[n],0),cmul(z,X));
return X;
}
关于程序的说明:在上面的代码中,函数cexp(A)求复数A的指数,函数cadd(A,B)求复数A和B的和,函数cmul(A,B)求复数A和B的乘积。
|