24小时热门版块排行榜    

查看: 1618  |  回复: 6

like0508

新虫 (初入文坛)

[求助] 单个数列的傅里叶变换(FFT)

自己写的程序如下,是一个数列的傅里叶变换,运行后的图谱不是自己预期的,理论上在频域上,有12个等间距分布的强烈的峰值
x=-0.5:0.001:0.5;
y=zeros(1,1001);
y(1:100)=exp(i*0.85*2*pi);
y(101:200)=exp(i*0.91*2*pi);
y(201:300)=exp(i*0.12*2*pi);
y(401:400)=exp(i*0.92*2*pi);
y(401:500)=exp(i*0.63*2*pi);
y(501:600)=exp(i*0.1*2*pi);
y(601:700)=exp(i*0.28*2*pi);
y(701:800)=exp(i*0.55*2*pi);
y(801:900)=exp(i*0.96*2*pi);
y(901:1000)=exp(i*0.97*2*pi);
Y=fft(y);
Y(1)=[ ];
n=fix(length(Y)/2);
freq=[1:n]./length(Y);
plot(freq,abs(Y(1:n)))
单个数列的傅里叶变换(FFT)
傅里叶变换图.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
like0508: 金币+10, ★★★★★最佳答案, 谢谢 2013-06-07 10:38:56
csgt0: 金币+2, 谢谢 2013-06-09 10:55:49
y=zeros(1,1001);
y(1:100)=exp(i*0.85*2*pi);
y(101:200)=exp(i*0.91*2*pi);
y(201:300)=exp(i*0.12*2*pi);
y(401:400)=exp(i*0.92*2*pi);
y(401:500)=exp(i*0.63*2*pi);
y(501:600)=exp(i*0.1*2*pi);
y(601:700)=exp(i*0.28*2*pi);
y(701:800)=exp(i*0.55*2*pi);
y(801:900)=exp(i*0.96*2*pi);
y(901:1000)=exp(i*0.97*2*pi);
Y=fft(y);
Pyy = Y.* conj(Y) /length(Y);  %功率谱转换
n=fix(length(Y)/2);
f = 1000*(0:n)/length(Y);
plot(f,Pyy(1:n+1));axis([0 100 0 300])
理论上在频域上,有10个等间距分布的强烈的峰值吧
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
2楼2013-06-07 09:47:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

like0508

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by dbb627 at 2013-06-07 09:47:20
y=zeros(1,1001);
y(1:100)=exp(i*0.85*2*pi);
y(101:200)=exp(i*0.91*2*pi);
y(201:300)=exp(i*0.12*2*pi);
y(401:400)=exp(i*0.92*2*pi);
y(401:500)=exp(i*0.63*2*pi);
y(501:600)=exp(i*0.1*2*pi);
y(60 ...

你好,我刚运行了下你应助的程序,x轴左端有个很强的峰值 其他部分的峰值特别小,这个很大的峰值是什么原因产生的?是不是数据处理上有小问题?
3楼2013-06-07 09:59:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

你的不是也有吗,这个好像叫零频,具体你查资料看下。
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
4楼2013-06-07 10:30:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

like0508

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by dbb627 at 2013-06-07 10:30:11
你的不是也有吗,这个好像叫零频,具体你查资料看下。

嗯 我再查查资料
5楼2013-06-07 10:39:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)

引用回帖:
5楼: Originally posted by like0508 at 2013-06-07 10:39:44
嗯 我再查查资料...

先查看一下 y 函数,
转换到频域的话,大的峰值 的原因是因为你的 y 函数 主要分为三部分 :

y(401:500)=exp(1i*0.63*2*pi);
y(701:800)=exp(1i*0.55*2*pi);

y(1  :100)=exp(1i*0.85*2*pi);
y(101:200)=exp(1i*0.91*2*pi);
y(401:400)=exp(1i*0.92*2*pi);
y(801:900)=exp(1i*0.96*2*pi);
y(901:1000)=exp(1i*0.97*2*pi);

y(201:300)=exp(1i*0.12*2*pi);
y(501:600)=exp(1i*0.1*2*pi);
y(601:700)=exp(1i*0.28*2*pi);

也就不难理解转换到频域,为什么只有左边的峰值大,且总体只有三个值比较大
6楼2013-06-08 06:48:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)

★ ★
csgt0: 金币+2, 谢谢 2013-06-09 10:56:23
引用回帖:
5楼: Originally posted by like0508 at 2013-06-07 10:39:44
嗯 我再查查资料...

这是傅里叶变换的一个缺陷,转换到频域,它就失去信号在时域的定位
也就是说,你把它分成10部分,FFT 看不到10部分
它只能把10部分里面,按照频率重新划分为 大的 三部分

如果你要通过变换把这10个峰值定位的话,需要用小波变换
7楼2013-06-08 06:52:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 like0508 的主题更新
信息提示
请填处理意见