//-*-C++-*-//由autodoc自动生成//====~====头文件src/fht/fht-default.h:==========//默认FHT实现:内联void fht(double*f,ulong ldn);内联void fht(复数*f,ulong ldn);内联void fht0(双*f,ulong ldn);inline void fht0(复数*f,ulong ldn);//====~====头文件src/fht/fht.h:==========//参数的一般格式:(double*f,ulong ldn)//f:=指向数据数组的指针,//ldn:=数组长度的基2对数(长度n=2**n)////例程some_func0(…)(注意“0”)//预期输入数据具有上半个零(“填充零”数据)。////不带常量修饰符的数组中的数据通常会被修改。////行末的注释“aux”表示//被其他例程调用,可能无法直接使用//对于图书馆的用户//-----SRCFILE=src/fht/fhtdit.cc:-----//调谐参数://定义使用三角递归://(可能会丢失一些精度,请参见下文)//#定义USE_TRIG_REC//我的机器上有“long double”类型的轻微速度损失,//“双”型速度增益小。//调谐参数:#定义INITIAL_RADIX_16 1//0或1(默认值)//#如果(INITIAL_RADIX_16==1)//#警告“供参考:在fht_dit(double*,ulong)中设置INITIAL_RADIX_16”#其他#警告“fht_dit(double*,ulong)中未设置INITIAL_RADIX_16”#结尾void fht_dit_core(双*f,ulong ldn);//辅助//时间抽取(DIT)FHT。//输入数据必须为revbin_permuted顺序。//ldn:=数组长度的以2为底的对数。无效fht_dit(双*f,ulong ldn);//快速哈特利变换。//时间分割基抽取(DIT)算法。//ldn:=数组长度的以2为底的对数。//-----SRCFILE=src/fht/fhtdif.cc:-----//调谐参数://定义使用三角递归://(可能会丢失一些精度,请参见下文)//#定义USE_TRIG_REC//我的机器上有“long double”类型的轻微速度损失,//“双”型速度增益小。//#如果定义USE_TRIG_REC//#警告'fht(double*,ulong)uses trig recursion'#结尾//调谐参数:#定义FINAL_RADIX_16 1//0或1(默认值)//#如果(FINAL_RADIX_16==1)//#警告“供参考:FINAL_RADIX_16设置为fht_dif(double*,ulong)”#其他#警告“FINAL_RADIX_16在fht_dif(double*,ulong)中未设置”#结尾void fht_dif_core(双*f,ulong ldn);//辅助//频率(DIF)FHT的抽取。//输出数据按revbin_permuted顺序。//ldn:=数组长度的以2为底的对数。void fht_dif(双*f,ulong ldn);//快速Hartley变换//频率分裂基抽取(DIF)算法。//ldn:=数组长度的以2为底的对数。//-----SRCFILE=src/fht/cfhtdit.cc:-----//调谐参数://定义使用三角递归://(可能会丢失一些精度,请参见下文)//#定义USE_TRIG_REC//我的机器上有“long double”类型的轻微速度损失,//“双”型速度增益小。//调谐参数:#定义INITIAL_RADIX_16 1//0或1(默认值)//#如果(INITIAL_RADIX_16==1)//#警告“供参考:在fht_dit(double*,ulong)中设置INITIAL_RADIX_16”#其他#警告“fht_dit(Complex*,ulong)中未设置INITIAL_RADIX_16”#结尾void fht_dit_core(复杂*f,ulong ldn);//辅助//时间抽取(DIT)FHT。//输入数据必须为revbin_permuted顺序。//ldn:=数组长度的以2为底的对数。void fht_dit(复数*f,ulong ldn);//快速哈特利变换。//时间分割基抽取(DIT)算法。//ldn:=数组长度的以2为底的对数。//-----SRCFILE=src/fht/cfhtdif.cc:-----//调谐参数://定义使用三角递归://(可能会丢失一些精度,请参见下文)//#定义USE_TRIG_REC//我的机器上有“long double”类型的轻微速度损失,//“双”型速度增益小。//#如果定义USE_TRIG_REC//#警告'fht(double*,ulong)uses trig recursion'#结尾//调谐参数:#定义FINAL_RADIX_16 1//0或1(默认值)//#如果(FINAL_RADIX_16==1)//#警告“供参考:FINAL_RADIX_16设置为fht_dif(double*,ulong)”#其他#警告“在fht_dif(复杂*,ulong)中未设置FINAL_RADIX_16”#结尾void fht_dif_core(复数*f,ulong ldn);//辅助//频率抽取(DIF)FHT。//输出数据按revbin_permuted顺序。//ldn:=数组长度的以2为底的对数。void fht_dif(复数*f,ulong ldn);//快速哈特利变换//频率分裂基抽取(DIF)算法。//ldn:=数组长度的以2为底的对数。//-----SRCFILE=src/fht/fht0.cc:-----//调谐参数:#如果定义USE_TRIG_REC//#警告“FYI:fht0(double*,ulong)使用三角递归”#结尾//调谐参数:#定义INITIAL_RADIX_16 1//0或1(默认值)//#如果(INITIAL_RADIX_16==1)//#警告“供参考:INITIAL_RADIX_16设置为fht0(double*,ulong)”#其他#警告“在fht0(double*,ulong)中未设置INITIAL_RADIX_16”#结尾无效fht0_dit(双*f,ulong ldn);//快速哈特利变换//零填充数据的版本://fr[k],fi[k]==0,对于k=n/2。。。n-1个//ldn:=数组长度的以2为底的对数。//时间分割基抽取(DIT)算法。//-----SRCFILE=src/fht/cfht0.cc:-----//调谐参数:#如果定义USE_TRIG_REC//#警告“FYI:fht0(double*,ulong)使用三角递归”#结尾//调谐参数:#定义INITIAL_RADIX_16 1//0或1(默认值)//#如果(INITIAL_RADIX_16==1)//#警告“供参考:INITIAL_RADIX_16设置为fht0(double*,ulong)”#其他#警告“在fht0(Complex*,ulong)中未设置INITIAL_RADIX_16”#结尾void fht0_dit(复数*f,ulong ldn);//快速哈特利变换//零填充数据的版本://fr[k],fi[k]==0,对于k=n/2。。。n-1个//ldn:=数组长度的以2为底的对数。//时间分割基数抽取(DIT)算法。//-----SRCFILE=src/fht/fhtdit2.cc:-----void fht_deph_first_dt2(双*f,ulong ldn);//半径-2时间抽取(DIT)FHT。//深度-第一个版本。//与平时相比//-进行更多的三角计算//-是(远)更好的本地内存无效fht_dit2(双*f,ulong ldn);//半径-2时间抽取(DIT)FHT。//-----SRCFILE=src/fht/fhtdif2.cc:-----无效fht_depth_first_dif2(双*f,ulong ldn);//半径-2频率抽取(DIF)FHT//深度-第一个版本。//与通常的FHT相比//-进行更多的三角计算//-是(远)更好的本地内存无效fht_dif2(双*f,ulong ldn);//半径-2频率抽取(DIF)FHT//--------光谱://-----SRCFILE=src/fht/fhtspect.cc:-----void fht_spectrum(双*f,ulong ldn,int phasesq/*=0*/);//使用FHT计算功率谱//ldn:=数组长度的以2为底的对数//相位sq!=0请求计算相位//相位[i]以f[n-i]为单位(i=1…n/2-1)//相位[0]==0,相位[2]==0//输出未规范化//====~====头文件src/fht/fht2d.h:==========//--------二维变换://-----SRCFILE=src/fht/skipfht.cc:-----void skip_fht(双*f,ulong n,ulongd,双*w);//计算n个元素的快速哈特利变换(FHT)//[0],[d],[2d],[3d],。。。,[(n-1)*d]void skip_fht0(双*f,ulong n,ulon d,双*w);//计算n个元素的快速哈特利变换(FHT)//[0],[d],[2d],[3d],。。。,[(n-1)*d]//其中第二个have为零。//-----SRCFILE=src/fht/twodimfht.cc:-----void row_column_fht(双*f,ulong-nr,ulong-nc);//辅助//行和列上的FHT。//这不是二维FHT。//nr:=行数//nc:=列数void y转换(double*f,ulong-nr,ulong-nc);//辅助//将行-列-FHT转换为二维FHT。//自反转。//nr:=行数//nc:=列数void twodim_fht(double*f,ulong-nr,ulong-nc);//二维快速哈特利变换(FHT)//nr:=行数//nc:=列数//====~====头文件src/fht/fhtloc2.h:==========void fht_loc_dif2_core(类型*f,ulong ldn);//快速哈特利变换(FHT)。//频率递归抽取(DIF)算法。//对于较大的阵列,性能极佳。void fht_loc_dit2_core(类型*f,ulong ldn);//快速哈特利变换(FHT)。//递归时间抽取(DIT)算法。//对于较大的阵列,性能极佳。//内联提供默认实现:inline void fht_loc(类型*f,ulong ldn);inline void fht0_loc(类型*f,ulong ldn);//====~====标题文件src/fht/hartleyshift.h:==========inline void hartley_shift_05_v1(类型*f,ulong n);//哈特利变换模拟到fourier_shift(f,n,0.5)//n:=数组长度//用于负循环卷积和递归FHT。//自反转。inline void hartley_shift_05_v1rec(类型*f,ulong n);//与hartley_shift_05_v1()相同,但使用三角递归。内联void hartley_shift_05_v2(类型*f,ulong n);//优化版本,n必须是2的幂。内联void hartley_shift_05_v2rec(类型*f,ulong n);//优化版本,n必须是2的幂。//与hartley_shift_05_v2()相同,但使用三角递归。//内联提供默认实现:inline void hartley_shift_05(类型*a,ulong n);//====~====头文件src/fht/shortfhtdifcore.h:==========inline void fht_dif_core_2(类型*f);//长度为2的展开版本inline void fht_dif_core_4(类型*f);//长度为4的展开版本inline void fht_dif_core_8(类型*f);//长度为8的展开版本inline void fht_dif_core_16(类型*f);//长度为16的展开式inline void fht_dif_core_32(类型*f);//长度为32的展开式inline void fht_dif_core_64(类型*f);//长度为64的展开版本inline void fht_dif_core_leq_64(类型*f,ulong n);//{2,4,8,16,32,64}中必须有n\//====~====头文件src/fht/shortfhtditcore.h:==========inline void fht_dit_core_2(类型*f);//长度为2的展开版本inline void fht_dit_core_4(类型*f);//长度为4的展开版本inline void fht_dit_core_8(类型*f);//长度为8的展开版本inline void fht_dit_core_16(类型*f);//长度为16的展开式inline void fht_dit_core_32(类型*f);//长度为32的展开式inline void fht_dit_core_64(类型*f);//长度为64的展开版本inline void fht_dit_core_leq_64(类型*f,ulong n);//{2,4,8,16,32,64}中必须有n\//====~====头文件src/fht/slowht.h:==========//--------慢速算法://-----SRCFILE=src/fht/slowht.cc:-----void slow_ht(双*f,ulong n);//(慢)哈特利变换。void slow_ht(复数*f,ulong n);//(慢)哈特利变换。void slow_row_column_ht(双*f,ulong-nr,ulong-nc);void slow_twodim_ht(double*f,ulong-nr,ulong-nc);//(慢)二维Hartley变换。//-----SRCFILE=src/fht/recfht2.cc:-----静态void recursive_fht_dit2_core(const double*a,ulong n,double*x);void recursive_fht_dit2(双*a,ulong ldn);//效率很低,只是为了证明//递归快速Hartley变换静态void recursive_fht_dif2_core(const double*a,ulong n,double*x);void recursive_fht_dif2(双*a,ulong ldn);//效率很低,只是为了证明//递归快速Hartley变换