信号经过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;
回复 #1 hehairen 的帖子
你的问题建议先搜索本版相关帖子学习一下。可以“整周期采样”,“FFT幅值”等为关键词进行搜索!
不好意思
我搜索了相关的帖子,它们都是关于幅值显示的问题,而我想要把整周期采样后的信号,经FFT后,求得其中各阶次频率分量所对应的精确的“幅值”和“相位”,请问该怎样做啊?谢谢啊 如果知道信号有几个整周期,要提取特定阶次的话,用DFT来做最简单方便。
谢谢啊
MATLAB里DFT用的不多啊,还请再给具体指点一下啊。。。。。。 例如说你采了10个周期的信号,那你要求第n阶的话,只要用DFT 求出第n*10条谱线的值就行了。十分感谢您啊
我刚刚查了一下,MATLAB里好象没有相关的DFT命令啊,是否需要自己编程啊,还请提示一下,我向您表示由衷的感谢啊 xfn=x*exp(-j*2*pi*n'*k/N)/N;其中N为采样点数;x为信号(N*1的行向量);n=0:N-1;k为要求的谱线号(行向量) 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 编辑 ]
太感谢您了
您的程序清晰明了,可以作为整周期采样FFT后,求幅值和相位的经典例子,谢谢你啊,建议应该作为精华贴,经典啊信号整周期采样,经过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),它有一个初始相位,我是不是也可以用上面的方法来求信号的初始相位呢?