- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 FFTW3 guru interface .但是,文档中的描述使我更加困惑而不是清晰。我想为 3 个标量复数 FFT 创建一个计划,每个长度 n
,它们应该在内存中一个接一个地对齐(交错数组)。我不明白这是否意味着 rank == 3
或 howmany_rank == 3
。我也不知道,数组 fftw_iodim *dims
和 const fftw_iodim *howmany_dims
需要具有哪个值。
同时 this stackexchange post似乎有一个很好的答案,它使用与文档相同的术语并且不会“在我的脑海中创建一个图像”关于 FFT 如何在内存中针对不同的 rank
和不同的 howmany_rank
s。也就是说,答案对我要查找的内容没有帮助。
供引用,这是计划分配函数的定义:
fftw_plan fftw_plan_guru_dft(
int rank, const fftw_iodim *dims,
int howmany_rank, const fftw_iodim *howmany_dims,
fftw_complex *in, fftw_complex *out,
int sign, unsigned flags);
请注意,使用“标准界面”是不可能的,因为稍后我必须切换到 guru64
(64 位)界面。
最佳答案
fftw_plan fftw_plan_guru_dft()
允许定义 1D-2D-3D-4D... DFT(rank
=1,2,3,4...)应用多次使用位于 1D、2D、3D、4D... 网格上的起点(howmany_rank
=1,2,3,4....
参数 rank
指定应用 DFT 的维数。这些维度的扩展和布局由参数 *dims
指定。执行DFT变换后,这些维度的索引对应于频率。这些参数定义了要应用的多维 DFT。
参数 howmany_rank
和 howmany_dims
指定多次应用上面定义的多维变换的起点。起点可以位于由 extends 和 strides 描述的多维数组上。参数 howmany_rank
描述起点数组的维数。
让我们考虑一个具有 3 个标量分量 u、v、w 的场,在横坐标 x_i=iL/N 的规则间隔点的直线上采样。该字段作为维度 (N,3) 的交错连续二维数组存储在内存中:
u(x_0) v(x_0) w(x_0) u(x_1) v(x_1) w(x_1) u(x_2) v(x_2) w(x_2)... u(x_N-1) v(x_N-1) w(x_N-1)
将在空间坐标 x 上执行一维 DFT。因此,rank
等于 1。每个 1D DFT 的长度为 N,并且两个连续项(u_(x_0)
和 u( x_1)
) 为 3。因此,dims[0].n=N
、dims[0].is=3
和 dims[0 ].os=3
。 is
用于输入步幅,os
用于输出步幅。
一维 DFT 将执行多次,每个组件执行一次。由于这些 DFT 的起点 u(x_0)
、v(x_0)
和 w(x_0)
是规则间隔的,因此这些位置起点定义一个维度为 1 的数组。因此 howmany_rank=1
。此外,由于有 3 个连续的起点,起点数组的布局定义为 howmany_dims[0].n=3
, howmany_dims[0].is=1
和 howmany_dims[0].os=1
。
我对 How to use fftw Guru interface 的回答中提供的示例代码(很抱歉,它没有帮助你!)可以很容易地改编为:
#include<stdlib.h>
#include<complex.h>
#include<math.h>
#include<fftw3.h>
int main(void){
fftw_plan p;
unsigned long int N = 10;
unsigned long int DOF = 3;
fftw_complex *in=fftw_malloc(N*DOF*sizeof(fftw_complex));
if(in==NULL){fprintf(stderr,"malloc failed\n");exit(1);}
fftw_complex *out=fftw_malloc(N*DOF*sizeof(fftw_complex));
if(out==NULL){fprintf(stderr,"malloc failed\n");exit(1);}
unsigned int i;
int rank=1;
fftw_iodim64 *dims=malloc(rank*sizeof(fftw_iodim64));
if(dims==NULL){fprintf(stderr,"malloc failed\n");exit(1);}
dims[0].n=N;
dims[0].is=DOF;
dims[0].os=DOF;
int howmany_rank=1;
fftw_iodim64 *howmany_dims=malloc(howmany_rank*sizeof(fftw_iodim64));
if(howmany_dims==NULL){fprintf(stderr,"malloc failed\n");exit(1);}
howmany_dims[0].n=DOF;
howmany_dims[0].is=1;
howmany_dims[0].os=1;
printf("sizeof fftw complex %ld\n",sizeof(fftw_complex));
printf("sizeof fftw_iodim64 %ld\n",sizeof(fftw_iodim64));
printf("creating the plan\n");
p=fftw_plan_guru64_dft(rank, dims,howmany_rank, howmany_dims,in, out,FFTW_FORWARD, FFTW_ESTIMATE);
if (p==NULL){fprintf(stderr,"plan creation failed\n");exit(1);}
printf("created the plan\n");
for(i=0;i<N;i++){
in[i*DOF]=30.+12.*sin(2*3.1415926535*i/((double)N));
in[i*DOF+1]=42.0;
in[i*DOF+2]=1.0;
}
fftw_execute(p);
for (i = 0; i < N; i++){
printf("result: %d || %g %gI | %g %gI | %g %gI\n", i, creal(out[i*DOF]), cimag(out[i*DOF]),creal(out[i*DOF+1]), cimag(out[i*DOF+1]),creal(out[i*DOF+2]), cimag(out[i*DOF+2]));
}
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);
free(dims);
free(howmany_dims);
return(0);
}
并由gcc main.c -o main -lfftw3 -lm -Wall
编译。
关于c++ - 关于 FFTW3 大师界面 : 3 simultaneous complex FFTs 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513592/
此函数返回一个 2 元组,其中包含列表的最小值和最大值: import Control.Arrow ((***), (>>>), (&&&)) import Data.Semigroup (getMi
我有两个 Java 进程,Processor 和 Simulator。 模拟器每5秒向File X写入规定的数据记录(10行文本)。 处理器不断读取该文件,等待 token 指示有效记录。代码是这样的
我有两个不同的应用程序必须协同工作。进程 1 作为时间源,进程 2 根据进程 1 提供的时间源执行操作。我需要运行进程 2 的多个副本。目标是让一个时间源进程同时向 5-10 个其他进程发出信号时间,
在我的 Backbone.js 应用程序中,我有以下模型和 View : var Operation = Backbone.Model.extend({ defaults: function(
请大家帮忙,这很重要。 我需要在不到 5 分钟的时间内下载大约 2000 张图像。所以我决定进行并行图片下载。 如果有人可以建议我进行并行下载的更好方法或告诉我哪里出错了,我将不胜感激。 在错误日志中
当我阅读 Clojure 代码(比如来自 GitHub 上的各个项目)时,有一些东西我不太理解:在 :require 表达式中,你应该使用 :as 当您仅使用您使用 :refer 引用的函数时?另外,
我在多个客户端连接的客户端服务器聊天程序的客户端实现上遇到问题。问题是我遇到的问题是我应该如何同时发送(聊天消息到另一个客户端)和接收(来自另一个客户端的聊天消息)?发生的情况是我总是发送数据但从不读
我有两个列表: List listA1 = GetFirstList(); List listA2 = GetSecondList(); 和A类定义 class A { public int
我使用了两个图像(img_heart_1 和 img_heart_2)。我有两种动画,一种是平移动画,另一种是缩放 text_anim.xml: animi(Animation),bounce_up.
考虑我有一个如下所示的运行方法,我正在尝试为 MyThread 创建四个线程。语句 1 到 3 可以由线程同时运行,也可以不同地运行。但是我想让Statement 4同时被线程执行。我可以在语句 4
对于新因素感到抱歉,但我正在阅读有关 mysql 的“太多连接”。 http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html m
我正在尝试自定义约束 菜单栏类: import UIKit class ManuBar: UIView { override init(frame: CGRect) { sup
我正在使用尚未为 Swift 4 做好准备的第 3 方库,即打破独占内存访问规则 ( SE-0176)。 因此,我的控制台充满了这些警告: Simultaneous accesses to 0xb1a
我需要调用一堆 *.exe,这样我就可以调用一个记事本文件,其中存储了所有要调用的 *.exe 的所有完整路径,并使用该记事本文件(可以编辑)我想创建一个调用列表的父 exe,其中存在所有子 *.ex
我正在尝试制作一个具有单个服务器和多个客户端场景的客户端服务器聊天应用程序。我的服务器正在工作,但我无法让客户端工作。我正在使用 select() 函数来选择我应该 recv() 还是 send()。
我正在尝试为类似 Pokemon 的游戏编写一个 AI,除了所有的 Action 都事先为两个玩家所知(所有玩家都可以看到)。我已经记录了我需要的所有信息,例如伤害、准确度、暴击率等。 我以为我的目标
假设账户ABC(fund:1000) 发生一笔6000 的取款交易,同时从ATM 取款8000。那么交易将如何管理。数据库是否只打开一个连接并且不允许新连接到同一帐户?? .... 在这种情况下,当交
我一直在尝试将视频(来自我的网络摄像头)同时输出到文件('out.mkv')和管道: 文件获取过滤帧,管道:获取未过滤的原始视频。 我的帧速率是 30 fps。但是,我的文件输出中的帧速率要低得多。
我们需要在一台PC上驱动8到12个显示器,所有显示器都呈现单个3D场景图的不同 View ,因此必须使用多个图形卡。我们目前正在dx9上运行,因此希望移至dx11,以期使此操作变得更容易。 初步调查似
我想以编程方式同时不在XML文件中显示两个动画,它应该 ROTATE和TRANSLATE 我怎样才能做到这一点? 请以某种方式建议我?????? 这是ma代码:> ImageView snowImg1
我是一名优秀的程序员,十分优秀!