hehairen 发表于 2007-10-24 20:34

信号经过FFT后,该怎样计算幅值和相位

我想用整周期截断的DFT来对信号进行处理,求得各谱线对应的幅值和相位,下面的信号经过FFT后,该怎样计算幅值和相位啊?还请各位高手指点啊啊
N=128;
n=0:N-1;
t=n/fs;
f0=10;%设定正弦信号频率
%生成正弦信号
x=sin(2*pi*f0*t);
figure(1);
subplot(231);
plot(t,x);%作正弦信号的时域波形
xlabel('t');
ylabel('y');
title('正弦信号y=2*pi*10t时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
figure(1);
subplot(232);
plot(f,mag);%做频谱图
axis();
xlabel('频率(Hz)');
ylabel('幅值');
title('正弦信号y=2*pi*10t幅频谱图N=128');
grid;

zhlong 发表于 2007-10-24 22:13

回复 #1 hehairen 的帖子

你的问题建议先搜索本版相关帖子学习一下。
可以“整周期采样”,“FFT幅值”等为关键词进行搜索!

hehairen 发表于 2007-10-25 09:13

不好意思

我搜索了相关的帖子,它们都是关于幅值显示的问题,而我想要把整周期采样后的信号,经FFT后,求得其中各阶次频率分量所对应的精确的“幅值”和“相位”,请问该怎样做啊?
谢谢啊

yangzj 发表于 2007-10-25 09:25

如果知道信号有几个整周期,要提取特定阶次的话,用DFT来做最简单方便。

hehairen 发表于 2007-10-25 09:41

谢谢啊

MATLAB里DFT用的不多啊,还请再给具体指点一下啊。。。。。。

yangzj 发表于 2007-10-25 10:02

例如说你采了10个周期的信号,那你要求第n阶的话,只要用DFT 求出第n*10条谱线的值就行了。

hehairen 发表于 2007-10-25 10:13

十分感谢您啊

我刚刚查了一下,MATLAB里好象没有相关的DFT命令啊,是否需要自己编程啊,还请提示一下,我向您表示由衷的感谢啊

yangzj 发表于 2007-10-25 10:45

xfn=x*exp(-j*2*pi*n'*k/N)/N;

其中N为采样点数;x为信号(N*1的行向量);n=0:N-1;k为要求的谱线号(行向量)

zhlong 发表于 2007-10-25 11:05

fs=1;
N=100;%频率分辨率为fs/N=0.01Hz,下面信号的频率0.05是0.01的整数倍,即为整周期采样
n=0:N-1;
t=n/fs;
f0=0.05;%设定余弦信号频率
x=cos(2*pi*f0*t);%生成正弦信号 %FFT是余弦类变换,最后得到的初始相位是余弦信号的初时相位,在这里为0。如果信号
figure(1);                                 %为x=sin(2*pi*f0*t);则初时相位应该是-90度而非0度。
subplot(211);
plot(t,x);%作余弦信号的时域波形
xlabel('t');
ylabel('y');
title('余弦信号 时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y)*2/N;%求幅值 乘上后面的2/N得到正确幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
subplot(212);
plot(f(1:N/2),mag(1:N/2));%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('余弦信号 幅频谱图');
grid;
angle(y(6))*180/pi %求信号初时相位。频率坐标f为,所以谱线y中第6根谱线和信号x对应。



相位近似为 0

[ 本帖最后由 zhlong 于 2007-10-25 11:15 编辑 ]

hehairen 发表于 2007-10-25 12:16

太感谢您了

您的程序清晰明了,可以作为整周期采样FFT后,求幅值和相位的经典例子,谢谢你啊,建议应该作为精华贴,经典啊

hzh 发表于 2007-11-20 10:10

信号整周期采样,经过FFT后,该怎样计算幅值和相位呢

fs=1;
N=100;%频率分辨率为fs/N=0.01Hz,下面信号的频率0.05是0.01的整数倍,即为整周期采样
n=0:N-1;
t=n/fs;
f0=0.05;%设定余弦信号频率
如果我的输入信号是x=cos(2*pi*f0*t+pi/3),它有一个初始相位,我是不是也可以用上面的方法来求信号的初始相位呢?

zhlong 发表于 2007-11-20 16:46

回复 #11 hzh 的帖子

一试便知

rockzone 发表于 2007-12-23 21:48

如果,信号频率不是频率分辨率的整数倍,会出现什么情况呢?

zhlong 发表于 2007-12-23 21:58

不能直接得到正确的频率和幅值,不过可以通过频谱校正得到比较准确的结果。

eguang8116 发表于 2008-4-2 15:12

那如果频率分辨率很小的话,是不是就可以不用通过频谱校正了呢?
页: [1] 2 3 4 5 6 7
查看完整版本: 信号经过FFT后,该怎样计算幅值和相位