24小时热门版块排行榜    

查看: 1764  |  回复: 9

ysjuuplj

银虫 (小有名气)

[求助] 求问FFT变换是怎么整的? 已有2人参与

我想把一个方程的时域解变换到频域,,我不会编程,求各位编一下图中这个问题简单的FFT程序,不胜感激
求问FFT变换是怎么整的?
1.jpg

[ Last edited by ysjuuplj on 2014-3-10 at 19:15 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

feixiaolin

荣誉版主 (文坛精英)

优秀版主

2楼2014-03-10 21:38:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ysjuuplj

银虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by feixiaolin at 2014-03-10 21:38:01
http://www.programfan.com/club/showtxt.asp?id=228343

求问版主,能不能劳驾帮编下这个小程序,我是程序盲,别人帮编过,但是没编出来,编出的结果和图中的曲线对不上,所以来小木虫上寻找热心的好人
3楼2014-03-11 18:40:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nagami

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
feixiaolin: 金币+50, reward 2014-03-14 08:58:49
按照你的思路,尝试了下,
对你的ODE,时间区间[0,60], 初值(0.0,0.0),然后OMEGA=[0.1:0.01:3]。
解ODE采用比RK方法精度更高的Bulirsch-Stoer方法,均采样1024个时域信号.,对输出的结果直接构造y2。
做实值FFT,然后求最大值。
求出的结果抖动很厉害,这个我也不知道(加大时间区间也是如此)。第一张图是原始数据,第二张是bezier曲线光滑所致。
这是C++写的,gnuplot绘制,Matlab应该更方便,不过我不熟悉Matlab,只能祝好运呵呵。
求问FFT变换是怎么整的?-1
11.png


求问FFT变换是怎么整的?-2
22.png

» 本帖已获得的红花(最新10朵)

女靠衣装;男靠金装
4楼2014-03-12 21:53:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

feixiaolin

荣誉版主 (文坛精英)

优秀版主

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
感谢参与,应助指数 +1
ysjuuplj: 金币+100, 虽然看不懂,但还是把分给你吧,我没用FFT,用另一种方法画出来了 2014-03-13 23:17:43
* 可以求出解析解

令 Y=InvRe[y]=exp(iz)= exp(iz),其中z=x(t)+iy(t);
InvRe[y] 代表复数化y

Y= exp(iz),则Y’= i*exp(iz), Y’’= - exp(iz)
原方程被复化,
- exp(iz) + exp(iz)+0.1* i*exp(iz)+0.2*exp(iz)* exp(-iz)* exp(iz)=exp(i*Ohmiga*t)
0.1* i*exp(iz)+0.2*exp(-2y)* exp(iz)=exp(i*Ohmiga*t)
0.1* i*exp(ix-y)+0.2*exp(-2y)* exp(ix-y)=exp(i*Ohmiga*t)
0.1* exp(i(*x+pi/2)-y)+0.2* exp(ix-3y)=exp(i*Ohmiga*t)
0.1* exp(-y)*exp(i(*x+pi/2))+0.2*exp(-3y)* exp(ix)=exp(i*Ohmiga*t)
取 a=0.1* exp(-y),  b=0.2* exp(-3y)
上式变为
a*[cos(x+pi/2)+i*sin(x+pi/2)]+b[cos(x)+i*sin(x)]= exp(i*Ohmiga*t)
[-a*sin(x)+b*cos(x)] + i*[a*cos(x)+b*sin(x)]= exp(i*Ohmiga*t)
推出
1) A^2+b^2=1,
[0.1* exp(-y)]^2 + [0.2* exp(-3y)]^2=1,   
y(t)= -0.531582 = constant
a=0.170262, b=0.985415
2) [a*cos(x)+b*sin(x)]/ [-a*sin(x)+b*cos(x)] =tan(Ohmiga*t)
[a+b*tan(x)]/ [-a*tan(x)+b] =tan(Ohmiga*t)


最后,y(t)= Re[Y]=exp(-y)cos(x)=1.70162*cos(x)

» 本帖已获得的红花(最新10朵)

5楼2014-03-13 08:29:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ysjuuplj

银虫 (小有名气)

送红花一朵
引用回帖:
4楼: Originally posted by nagami at 2014-03-12 21:53:40
按照你的思路,尝试了下,
对你的ODE,时间区间, 初值(0.0,0.0),然后OMEGA=。
解ODE采用比RK方法精度更高的Bulirsch-Stoer方法,均采样1024个时域信号.,对输出的结果直接构造y2。
做实值FFT,然后求最大值。 ...

结果不一样,但还是谢谢你花时间做的
6楼2014-03-13 11:48:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ysjuuplj

银虫 (小有名气)

送红花一朵
引用回帖:
5楼: Originally posted by feixiaolin at 2014-03-13 08:29:22
* 可以求出解析解

令 Y=InvRe=exp(iz)= exp(iz),其中z=x(t)+iy(t);
InvRe 代表复数化y

Y= exp(iz),则Y’= i*exp(iz), Y’’= - exp(iz)
原方程被复化,
- exp(iz) + exp(iz)+0.1* i*exp(iz)+0.2*exp(iz) ...

(Y‘)^3应该是 [iexp(iz)]*[iexp(iz)]*[iexp(iz)]
而不是exp(iz)* exp(-iz)* exp(iz)吧?  怎么会有exp(-iz)呢
另外sin(wt)=[exp(iwt)-exp(-iwt)]/2i  而不等于exp(iwt)
7楼2014-03-13 11:54:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nagami

木虫 (正式写手)

引用回帖:
6楼: Originally posted by ysjuuplj at 2014-03-13 11:48:53
结果不一样,但还是谢谢你花时间做的...

那正确的结果是什么样子的
女靠衣装;男靠金装
8楼2014-03-13 12:02:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ysjuuplj

银虫 (小有名气)

引用回帖:
8楼: Originally posted by nagami at 2014-03-13 12:02:47
那正确的结果是什么样子的...

正确结果就是1楼图中大圆点那条线,我不会C++ ,只会点matlab
9楼2014-03-13 14:11:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

feixiaolin

荣誉版主 (文坛精英)

优秀版主

引用回帖:
7楼: Originally posted by ysjuuplj at 2014-03-13 11:54:04
(Y‘)^3应该是 **
而不是exp(iz)* exp(-iz)* exp(iz)吧?  怎么会有exp(-iz)呢
另外sin(wt)=/2i  而不等于exp(iwt)...

(Y‘)^3<>Re{ [iexp(iz)]*[iexp(iz)]*[iexp(iz)] }
应该是  sin(wt)=Re[-i*exp(iwt)]
InvRe[y] 代表复数化y;所谓的相量分析
Y= exp(iz),则Y’= i*exp(iz), Y’’= - exp(iz),InvRe[sin(Ohmiga*t)]= -i*exp(i*Ohmiga*t)
原方程被复化,
- exp(iz) + exp(iz)+0.1* i*exp(iz)+0.2*exp(iz)* exp(-iz)* exp(iz)=-i*exp(i*Ohmiga*t)
0.1* i*exp(iz)+0.2*exp(-2y)* exp(iz)= -i*exp(i*Ohmiga*t)
0.1* i*exp(ix-y)+0.2*exp(-2y)* exp(ix-y)= -i*exp(i*Ohmiga*t)
0.1* exp(i(*x+pi/2)-y)+0.2* exp(ix-3y)= -i*exp(i*Ohmiga*t)
0.1* exp(-y)*exp(i(*x+pi/2))+0.2*exp(-3y)* exp(ix)=exp(i*(Ohmiga*t-pi/2))
取 a=0.1* exp(-y),  b=0.2* exp(-3y)
上式变为
a*[cos(x+pi/2)+i*sin(x+pi/2)]+b[cos(x)+i*sin(x)]= exp(i*(Ohmiga*t-pi/2))
[-a*sin(x)+b*cos(x)] + i*[a*cos(x)+b*sin(x)]= exp(i*(Ohmiga*t-pi/2))
推出
1) A^2+b^2=1,
[0.1* exp(-y)]^2 + [0.2* exp(-3y)]^2=1,   
y(t)= -0.531582 = constant
a=0.170262, b=0.985415
2) [a*cos(x)+b*sin(x)]/ [-a*sin(x)+b*cos(x)] =-ctan(Ohmiga*t)
[a+b*tan(x)]/ [-a*tan(x)+b] =-ctan(Ohmiga*t)
tan(x)= [b* ctan(Ohmiga*t)+a]/ [a* ctan(Ohmiga*t)-b]

最后,y(t)= Re[Y]=exp(-y)cos(x)=1.70162*cos(x)
=1.70162/sqrt{1+[b* ctan(Ohmiga*t)+a]^2/ [a* ctan(Ohmiga*t)-b]^2}

[ Last edited by feixiaolin on 2014-3-14 at 09:39 ]
10楼2014-03-13 14:27:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ysjuuplj 的主题更新
信息提示
请填处理意见