声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1676|回复: 1

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

[复制链接]
发表于 2007-3-31 16:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我是初学者,做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=[0:1:N-1];

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=[0:1: (N-1)*M];
k=[0:1: (N-1)*M];
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 的频率,将会
把它的幅度显示出来.
不知对不对.,求助~非常感谢.

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2007-4-7 21:58 | 显示全部楼层
直接在matlab下用fft命令。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-16 06:33 , Processed in 0.053839 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表