用VB6实现快速傅里叶变换FFT算法

上传人:汽*** 文档编号:489889263 上传时间:2023-11-27 格式:DOC 页数:5 大小:279.01KB
返回 下载 相关 举报
用VB6实现快速傅里叶变换FFT算法_第1页
第1页 / 共5页
用VB6实现快速傅里叶变换FFT算法_第2页
第2页 / 共5页
用VB6实现快速傅里叶变换FFT算法_第3页
第3页 / 共5页
用VB6实现快速傅里叶变换FFT算法_第4页
第4页 / 共5页
用VB6实现快速傅里叶变换FFT算法_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《用VB6实现快速傅里叶变换FFT算法》由会员分享,可在线阅读,更多相关《用VB6实现快速傅里叶变换FFT算法(5页珍藏版)》请在金锄头文库上搜索。

1、用VB6实现快速傅里叶FFT算法设原始数据在Xr()中,实现FFT算法分两个步骤,首先是实现倒序,例如Xr(0)Xr(15)的序列要变成:Xr(0),Xr(8),Xr(4),Xr(12),Xr(2),Xr(10),Xr(6),Xr(14),Xr(1),Xr(9),Xr(5),Xr(13),Xr(3),Xr(11),Xr(7),Xr(15),0,8,4,12有什么规律吗,比如第三个数2,二进制是0010,反序的写法是0100,这就是十进制的4。实现倒序之后,要做蝶形运算(二基),不说原理了,写VB代码。位序倒置代码Sub 倒序(X_() As Double)Dim N As Integer, I

2、 As Long, J As Long, mn As Long, LH As Long, T As Double, k As Long 位序倒置N = UBound(X_) 求数组大小,其值必须是2的幂LH = N / 2J = N / 2For I = 1 To N - 2 If I J Then Exit Do 高位是1吗? J = J - k 是的,高位置0 k = k / 2 准备次高位的权Loop Until k = 0 次高位的权若非0,则检查新的次高位 J = J + k 否则若最高位是0,则置1NextEnd Sub蝶形算法代码Sub 蝶形算法(Xr() As Double)D

3、im L As Long, LE As Long, LE1 As Long, N As Long, R As Long, P As Long, Q As Long, M As ByteDim Wr As Double, Wi As Double, W1r As Double, W1i As Double, Tr As Double, Ti As DoubleDim Pi As Double, T As DoubleDim Xi()N = UBound(Xr) 求数组大小,其值必须是2的幂M = 0L = 2Do L = L + L M = M + 1Loop Until L NN = L /

4、2ReDim Xi(N - 1)L = 1Do LE = 2 L LE1 = LE / 2 Wr = 1 Wi = 0 T = Pi / LE1 W1r = Cos(T) W1i = -Sin(T) R = 0 Do P = R Do Q = P + LE1 Tr = Xr(Q) * Wr - Xi(Q) * Wi Ti = Xr(Q) * Wi + Xi(Q) * Wr Xr(Q) = Xr(P) - Tr Xi(Q) = Xi(P) - Ti Xr(P) = Xr(P) + Tr Xi(P) = Xi(P) + Ti P = P + LE Loop Until P N - 1 Wr = Wr * W1r - Wi * W1i Wi = Wr * W1i + Wi * W1r R = R + 1 Loop Until R LE1 - 1 L = L + 1Loop Until L MFor I = 0 To N - 1 仅输出模 Xr(I) = Sqr(Xr(I) 2 + Xi(I) 2)NextEnd Sub检验的时候可以这样:Sub 检验()Dim Y(63) As DoubleFor I = 0 To 64Y(I) = Sin(2 * 3.1415926 * I / 16)Next倒序 Y()蝶形算法 Y()现在结果在Y()中。End Sub算法原理的有关资料图片附后。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 汽车技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号