如何在MATLAB中实现信号FFT后的实部和虚部的求解?
信号经过FFT后是一个复数的形式,那么它的实部和虚部的求解怎么用程序实现呢?
请高手指点下,谢谢! 求出fft后,取出实部或者虚部,就这么直接 程序的实现呢?
我意思是语句怎么写? real------------实部
imag-----------虚部 如果一个余弦信号经过FFT以后得到的实部和虚部是一个时间t的函数么?
例如
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);
y1=fft(x,N);%进行fft变换
p1=real(y1);
q1=imag(y1);
得到的p1和q1为什么只在2点有值?刚接触FFT,弱智问题还请不要见笑!
一个余弦信号经过FFT以后得到的实部和虚部不是一个时间t的函数了,只是频率的函数,所以只在5Hz处有值,另一个是负频率-5Hz的值。 那么如果我用同样的方法求得另一个函数的实部和虚部,记为P2,Q2的话,对他们进行计算,比方说要求得p1*p2,p1*q2.怎么老提示说内部矩阵要一致?难道经过real(x)以后出来的值还要求幅值? 本帖最后由 wdhd 于 2016-9-9 14:09 编辑
原帖由 rocky_ding 于 2008-4-26 21:52 发表
那么如果我用同样的方法求得另一个函数的实部和虚部,记为P2,Q2的话,对他们进行计算,比方说要求得p1*p2,p1*q2.怎么老提示说内部矩阵要一致?难道经过real(x)以后出来的值还要求幅值?
你的p1和p2都是一些行向量,你用*这个乘法当然不行了,如果你要各个点相乘用.*就可以了. 不是要各个点相乘,如果像songzy41老师说的那样在+-5hz处有值的话,我怎么能取出在这2点处的值? 8 楼gh688说得对的,在楼主的程序中,p1和q1都是行向量。如果要取在5Hz处的数值,例如设为
Ram5=p1(6) %5Hz的实部
Iam5=q1(6) %5Hz的虚部
因为5Hz是在笫6根谱线上。 谢谢8楼的和songzy41老师,程序结果出来了!
可是我所采用的方法算出来是有误差的。我想问问频率和谱线是怎么个对应关系呢?
如果有程序
fs=1;
N=100;n=0:N-1;
t=n/fs;
f0=0.05;
x=cos(2*pi*f0*t+pi/3);
y1=fft(x,N);
ang1=angle(y1(6))*180/pi
求其相位的时候问什么是y1(6)呢?怎么个对应关系?
谢谢! 本帖最后由 wdhd 于 2016-9-9 14:09 编辑
原帖由 rocky_ding 于 2008-4-27 10:50 发表
求其相位的时候为什么是y1(6)呢?怎么个对应关系?
楼主不明白频率坐标的标度,请参看一下帖子中有关频率坐标标度和编程:
http://www.chinavib.com/forum/thread-62683-1-1.html fs=1;
N=100;n=0:N-1;
t=n/fs;
f0=0.05;
x=cos(2*pi*f0*t+pi/3);
y1=fft(x,N);
ang1=angle(y1(6))*180/pi
这个程序中f0是设定的余弦信号的频率是0.05.如果我把信号频率设为250HZ(对应5次谐波)和350HZ(对应7次谐波),如果再去y1(6)和p1(6)应该就是错的了!那么取多少呢? "如果我把信号频率设为250HZ(对应5次谐波)和350HZ(对应7次谐波)"
那你的采样频率就应该改一下了,具体改法看一下以前的贴子吧! 本帖最后由 wdhd 于 2016-9-9 14:09 编辑
原帖由 rocky_ding 于 2008-4-27 16:28 发表
fs=1;
N=100;n=0:N-1;
t=n/fs;
f0=0.05;
x=cos(2*pi*f0*t+pi/3);
y1=fft(x,N);
ang1=angle(y1(6))*180/pi
这个程序中f0是设定的余弦信号的频率是0.05.如果我把信号频率设为250HZ(对应5次谐波)和350HZ(对应 ...
1你说得采样频率和谱线的关系是这样的,频率分辨率f=fs/N,N为采样点数,也就是说你的FFT的横坐标可以用采样点数n=0:N-1来表示也可以用频率来表示,如果用频率表示的话考虑到上述关系,所以n=0:N-1要乘个频率分辨率f。另外你所说的谱线其实就是我说的采样点
2你信号频率改变成250HZ后你的采样频率至少要满足采样定理吧,另外采样点数也是可以变化的,你可以多采几个啊
3你要求的相位问题我一直没搞明白,y1既然是个向量你想求峰值点的相位那你就找到峰值点横坐标对应的位置然后这个位置的相位不就是峰值的相位了,找不到的话用一下find函数不就可以了吗
4如果你采样频率改变的话最好要是整周期采样,也就是你的信号频率例如250HZ要是频率分辨率f的整数倍,否则峰值和相位之间会有误差.
这些东西在搜索里面都能找到,我在matlab版快中已经给你说了一次,你的信息我看到了在这里回复你了
页:
[1]