问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁有用delphi编写的FFT程序,急用!!!

发布网友 发布时间:2022-07-27 00:48

我来回答

2个回答

热心网友 时间:2023-10-23 19:10

unit FFT;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, VarCmplx;

type
//自定义复数类型
TComplexData = record
vReal,vImaginary: Double;
end;

TComplexDataArray = array of TComplexData; //实数数组
TExtendedArray = array of Extended; //复数数组

procere DoFFT(TD:TExtendedArray; var FD:TExtendedArray; r:Integer);

implementation

//复数相加
function ComplexAdd(c1,c2:TComplexData):TComplexData;
begin
result.vReal:=c1.vReal+c2.vReal;
result.vImaginary:=c1.vImaginary+c2.vImaginary;
end;

//复数相减
function ComplexMinus(c1,c2:TComplexData):TComplexData;
begin
result.vReal:=c1.vReal-c2.vReal;
result.vImaginary:=c1.vImaginary-c2.vImaginary;
end;

//复数相乘
function ComplexMultiply(c1,c2:TComplexData):TComplexData;
begin
result.vReal:=c1.vReal*c2.vReal-c1.vImaginary*c2.vImaginary;
result.vImaginary:=c1.vReal*c2.vImaginary+c1.vImaginary*c2.vReal;
end;

//复数数组互换
procere ComplexArrayWrap(var a1,a2:TComplexDataArray);
var
a:TComplexDataArray;
begin
a:=a1;
a1:=a2;
a2:=a;
Setlength(a,0);
end;

procere DoFFT(TD:TExtendedArray; var FD:TExtendedArray; r:Integer);
var
count : Longint; //傅立叶变换点数
i,j,k : Integer; //循环变量
bfsize,p : Integer; //中间变量
angle : Double; //角度
W,X1,X2 : TComplexDataArray;
begin
count:= 1 shl r; //傅立叶变换点数

// 分配运算所需存储器
SetLength(W, count div 2);
SetLength(X1,count);
SetLength(X2,count);

// 计算加权系数
for i:=0 to count div 2 -1 do
begin
angle := -i * PI * 2 / count;

W[i].vReal := cos(angle);
W[i].vImaginary := sin(angle);
end;

// 将时域点写入X1
for i:=0 to count-1 do
begin
X1[i].vReal:=TD[i];
X1[i].vImaginary:=0;
end;

// 采用蝶形算法进行快速傅立叶变换
for k:=0 to r-1 do
begin
for j:=0 to (1 shl k)-1 do
begin
bfsize:= 1 shl (r-k);
for i:=0 to bfsize div 2 -1 do
begin
p := j * bfsize;
X2[i+p]:=ComplexAdd(X1[i+p],X1[i+p+bfsize div 2]);
X2[i+p+bfsize div 2]:=ComplexMultiply(
ComplexMinus(X1[i+p],X1[i+p+ bfsize div 2]),
W[i*(1 shl k)]);
end;
end;
ComplexArrayWrap(X1,X2);
end;

// 重新排序
Setlength(Fd,count div 2);
for j:=0 to count div 2 - 1 do
begin
p := 0;
for i:=0 to r-1 do
begin
if (j and (1 shl i))>0 then
p:=p+(1 shl (r-i-1));
end;
FD[j]:=X1[p].vReal;
end;

// 释放内存
Setlength(W,0);
Setlength(X1,0);
Setlength(X2,0);
end;

end.

热心网友 时间:2023-10-23 19:11

我没有
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
打印机硒鼓安装方法及步骤 如何安装新硒鼓? 我现在很困惑该不该和女友继续发展下去 电脑上字体怎么安装方法简单易行的字体安装步骤及技巧 网页字体显示不出.怎么办? 如何添加电脑上没有的字体解决电脑字体限制增加字体选择多样性_百度知 ... 不有效字体文件 电脑字体识别不了 梦见身上煤炭黑的长辈给我钥匙的预兆 株洲最值得一去的古镇 右边头疼,特别是右边耳朵过来一点,就是后脑勺的右上方特别是手按在那里,特别痛,怎么回事?急求 为什么会出现头痛,一阵一阵的痛,就在耳朵上方的地方? 右边头疼,特别是右边耳朵过来一点,就是后脑勺的右上方那里特别痛,是怎么回事? 右侧头疼,耳朵上方什么原因,及治疗方法 急 怎么删掉电脑主题 怎么看蛋挞是否烤熟了 看蛋挞是否烤熟了的方法 村官和公务员整体来说哪个比较好考,考内容区别大不, 微星B450M BAZOOKA PLUS和华硕PRIME B450-PLUS 哪个板子好 想买开个微星B150M BAZOOKA PLUS主板,这个带m.2接口么 入了块i5 8400散片,主板选个B360M BAZOOKA PLUS可以么? 为什么我蒸的包子汤油都渗到皮里面了?发面包子成了死面的了?有了解的大神给小弟支个招!谢谢了!!! 包子皮渗油是怎么回事? 包子皮蒸好了有油渗出是咋回事 为什么我包的包子汤汁会流出来 为什么我包的包子会漏汤 包子皮渗汁的原因 怀化市体育馆 求林志炫2017歌手的御龙铭千古live的mp3下载 刚刚开机就屏幕失灵,之前没有任何是损坏? 电脑开机就屏幕就开始闪!是什么原因!请教高手! 笑傲江湖是谁写的啊?金庸还是古龙? 《笑傲江湖》pdf下载在线阅读全文,求百度网盘云资源 在情深深雨蒙蒙里那一集陆家女儿被毁清白 LINK@sheraton是什么意思中文? 0.6主线可以钓多大鱼 我的未来是当一名天文学家作文 我的梦想是做一个天文学家---作文 怎样能让蒜头膨大?有什么好的办法? 九型人格第五型 乐嘉性格色彩蓝色 MBTI是INFJ DISC是SC PDP是考拉型猫头鹰型 气质 在哪本名著中有位钓鱼不服输的老人 物料提升机能用限位开关控制吗? 楷书用什么字体落款 楷书作品用楷书落款行吗? windows 7运行时桌面背景图片突然没了!变成黑的了!怎么办啊! 江永香柚节是什么时候? 香柚的介绍 山东省圆通快递和申通快递发省内需要多少钱邮费?聊城到临沂 通信电源蓄电池组接入熔断丝时为什么会爆火花 通信机房电池组的均充和浮充分别是怎么实现的 移动硬盘的用途是什么?