aretu 发表于 2007-3-31 16:10

做了一个 DFT变换求幅度谱的程序,怎么老不对呢,求帮助

我是初学者,做DFT,总搞不对
x(n)是多个谐波信号之和

x(n)=A1*cos(w1*n+α1)+A2*cos(w2*n+α2)+A3*cos(w3*n+α3)

其中:Ai,wi,αi都是已知,且自己设计其数值的.
用DFT对x(n)做谱估计,并画出其幅度谱的图.
N=16;
频率采样间隔为2π/(N*M)   M=2

我的思路是(不知道对不对):
取x(0),x(1).....x(15) 代入上式得到16个离散数
然后用离散DFT变换公式
X(k)= ∑ x(n)*exp[-j*2π*n*k/N)]
∑是对n=0到n=N-1求和.

因为这里的采样频率间隔是2π/N*M,上面的公式中的N全部替换成N*M,
因为x(0)....x(15)只有N项所以吧x(16)........x(N*M-1)赋值为0;
即得到DFT公式:
X(k)= ∑ x(n)*exp[-j*2π*n*k/(N*M)]
∑是对n=0到n=N*M-1求和.
得到DFT的变换X(K)   
然后plot(X(K))

程序如下:
function fz
N=16;                                                    %设置初值
M=2;
A1=6;
A2=9.8;
A3=14.6;
W1=0.427*pi;
W2=W1+pi/18;
W3=W1+pi/12;
Q1=pi/6;
Q2=0.27*pi;
Q3=0.12*pi;

n=;

x=A1*cos(W1*n+Q1)+A2*cos(W2*n+Q2)+A3*cos(W3*n+Q3);

for i=N:N*M-1                                                %补x(N)...x(N*M-1)项为0
    x(i)=0;
end

WN=exp(-j*2*pi/N*M);                                 %做DFT
i=;
k=;
ik=i'*k;
y=x*(WN.^ik)   

plot(abs(y));

按道理我的x(n)里面只有3个w,是不是,经过DFT后只有3个幅度谱的谱峰,
是我的程序有问题还是我对DFT的理解有问题,
我对DFT的理解是,在X(k)= ∑ x(n)*exp[-j*2π*n*k/N)]式子中,
是对x(n)的频谱分成2π/N份对其采样,然后得到相应的
2π*k/N (k=0......N-1) 频谱幅度,若是原x(n)中包含有2π*k/N 的频率,将会
把它的幅度显示出来.
不知对不对.,求助~非常感谢.

thunderhq 发表于 2007-4-7 21:58

直接在matlab下用fft命令。
页: [1]
查看完整版本: 做了一个 DFT变换求幅度谱的程序,怎么老不对呢,求帮助