rocky_ding 发表于 2008-4-26 18:26

如何在程序中实现信号FFT后的实部和虚部的求解

如果给定一个信号比方说x=cos(2*pi*f*t+w)经过FFT后我想知道其实部和虚部,请问程序语言怎么实现?

[ 本帖最后由 eight 于 2008-4-28 18:27 编辑 ]

sigma665 发表于 2008-4-26 21:24

回复 楼主 的帖子

取实部real,虚部imag
是这个吗

rocky_ding 发表于 2008-4-26 21:55

如果一个余弦信号经过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);
y1=fft(x,N);%进行fft变换
p1=real(y1);
q1=imag(y1);
得到的p1和q1为什么只在2点有值?刚接触FFT,弱智问题还请不要见笑!
http://forum.vibunion.com/forum/images/linstyle_free1/attachimg.gif http://forum.vibunion.com/forum/attachment.php?aid=34072&noupdate=yes http://forum.vibunion.com/forum/images/attachicons/image.gif untitled1.jpg (14.47 KB)
p1
2008-4-26 20:56


那么如果我用同样的方法求得另一个函数的实部和虚部,记为P2,Q2的话,对他们进行计算,比方说要求得p1*p2,p1*q2.怎么老提示说内部矩阵要一致?难道经过real(x)以后出来的值还要求幅值?

antonylau 发表于 2008-4-26 22:34

cos函数只有一个频率阿
两个点是对称的,只看一个即可

rocky_ding 发表于 2008-4-27 10:12

我得到的图确实是2点对称的。如果我要求出在这2点的幅值怎么弄呢?

friendchj 发表于 2008-4-27 10:33

原帖由 rocky_ding 于 2008-4-27 10:12 发表 http://www.chinavib.com/forum/images/common/back.gif
我得到的图确实是2点对称的。如果我要求出在这2点的幅值怎么弄呢?
对3楼的改一下就ok了
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变换
y1=abs(y1); %求幅值
min_y1=min(y1);
max_y1=max(y1);
ind=find(y1>(min_y1+max_y1)/2); % 检测最大值的位置
a=y1(ind); % 最大值,即2点幅值
plot(n,y1,n(ind),y1(ind),'ro')

图中红色圆圈即为所求的幅值。

antonylau 发表于 2008-4-27 13:45

原帖由 friendchj 于 2008-4-27 10:33 发表 http://www.chinavib.com/forum/images/common/back.gif

对3楼的改一下就ok了
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);%进行 ...


为什么要找到y>最大和最小的平均呢?

rocky_ding 发表于 2008-4-27 15:12

6楼兄弟首先谢谢你的解释
我要取的是FFT以后实部和虚部的幅值!
这个问题别的朋友已经给我做处了回答:如果变换后实部和虚部分别记为p1,q1他们在5HZ处是有幅值的!
如果要取在5Hz处的数值,例如设为
Ram5=p1(6)   %5Hz的实部
Iam5=q1(6)   %5Hz的虚部
因为5Hz是在笫6根谱线上。
那么为什么在5HZ处有值,为什么5HZ对应第6跟谱线现在是我不明白的。请教。:@(

gh688 发表于 2008-4-27 16:01

原帖由 rocky_ding 于 2008-4-27 15:12 发表 http://www.chinavib.com/forum/images/common/back.gif
6楼兄弟首先谢谢你的解释
我要取的是FFT以后实部和虚部的幅值!
这个问题别的朋友已经给我做处了回答:如果变换后实部和虚部分别记为p1,q1他们在5HZ处是有幅值的!
如果要取在5Hz处的数值,例如设为
Ram5=p1(6)...
这个具体点说说吧,你画图时以6楼的plot(n,y1)为例子,n=0:N-1; y1是一个行向量,这样plot时候n=0 1 2 3 4 5分别对应y1的前六个元素,那n=5不就是对应y1(6)吗,另外这里6楼的图的横坐标用的是FFT采样点来表示的,单位不是HZ,要变成HZ还要乘个0.01(频率分辨率),所以不是你说的5HZ

friendchj 发表于 2008-4-27 19:36

原帖由 antonylau 于 2008-4-27 13:45 发表 http://www.chinavib.com/forum/images/common/back.gif



为什么要找到y>最大和最小的平均呢?
画图时和9楼的意思是一样的。
y>最大和最小的平均是为了寻找那两个频率点,最大和最小的平均只是我设的一个阈值,当然可以不是他,只要能把那两个点找出来就行。
页: [1]
查看完整版本: 如何在程序中实现信号FFT后的实部和虚部的求解