FFT海水学习笔记

学习笔记 

FFT海水学习笔记_第1张图片

信号分析 原理 

FFT海水学习笔记_第2张图片

DFT:                                        IDFT:

       

F(μ)为转换后的频域函数,μ为频率,f(x)为时域函数

用欧拉公式展开得

FFT海水学习笔记_第3张图片

https://www.bilibili.com/video/av49238862  欧拉公式的理解

http://k.sina.com.cn/article_6367168142_17b83468e001004j89.html?sudaref=graph.qq.com&display=0&retcode=0  傅里叶变换

根据三角函数的正交性,三角函数系中任何俩个不同函数的乘积在他们的公共周期内的积分等于0。所以可以利用这个性质在求某一个频率分量的振幅时把其他的频率过滤掉。

首先构造检波器A:f标准正弦信号

FFT海水学习笔记_第4张图片

输出为和频率f有关的一个量,这个量等于带变换信号中f分量与标准正弦信号f的乘积的积分。但不能保证其输出不为0时待变换信号中就一定含有f分量。因为正弦波具有,相位差为90°(正交)时,一个周期内的乘积的积分为0。相位相同时,积分值达到最大为俩者的有效值的乘积。相位相反时,积分达到最小,为俩者的有效值的乘积取反。如果带变换信号中的f分量的初始相位与标准正弦信号f的相位刚好差90°(270°),那么输出也为0。

所以构造检波器B:f标准余弦信号

FFT海水学习笔记_第5张图片

如果带变换信号中包含f分量,那么检波器A和B中至少有一个输出不为0。A和B输出的信号的幅值的方和根就等于f分量的幅值。

傅里叶变换是一种信号分析的方法,其选择把信号分解为正弦波的组合,选择正弦波的好处在于正弦波输入至任何线性系统,输出的还是正弦波改变的仅是幅值和相位,而线性系统具备多个正弦波叠加后输入,输出是所有正弦波独立输入时对应输出的叠加。

所以DFT公式的理解就如上俩图所示,最后得到的复数的模就是想求的频率的振幅。

海洋公式

所以复杂海面的生成就需要先生成频谱,再通过IDFT得到多种波叠加出来的复杂海面,所以核心就在于频谱的生成。

海洋高度IDFT公式:

为水平方向坐标

为频域坐标,kx kz均为频率,t为时间

为频谱

表示固定z,只让x变化时频率为kx,固定x,只让z变化时频率为kz

FFT海水学习笔记_第6张图片

FFT海水学习笔记_第7张图片

FFT海水学习笔记_第8张图片

相当于N为64时就有64²=4096个离散频率点

频谱公式:

方向波谱:

海洋水平偏移公式:

这个式子会在之后的浮沫计算出现,具体方向的偏移将公式拆开即可

FFT海水学习笔记_第9张图片

Ocean Surface Simulation NV的流程图

FFT海水学习笔记_第10张图片

FFT海水学习笔记_第11张图片

法线:

精确的法线计算应该是根据高度求空间梯度,再根据向量关系计算得出,需要进行FFT

FFT海水学习笔记_第12张图片

推导:

FFT海水学习笔记_第13张图片

FFT海水学习笔记_第14张图片

而不是很精确的法线也可以用查分来求

FFT海水学习笔记_第15张图片

计算M0处的法线,需要计算切向量Tx Ty做叉乘,切向量由曲面方程求偏导求得。而对于离散的点,直接取M0俩侧的点差值即可。

偏导数反映的是函数沿坐标轴方向的变化率

梯度为一个向量,其方向为函数在这点的方向导数取得最大值的方向,它的模等于方向导数的最大值

浪尖泡沫区域:

FFT海水学习笔记_第16张图片

FFT海水学习笔记_第17张图片

FFT海水学习笔记_第18张图片

刺穿时,局部发生翻转,数学上的表现为面元有向面积为负值。

求面源有向面积则需要用到二重积分换元法+雅克比矩阵

FFT海水学习笔记_第19张图片

如何理解雅克比矩阵:https://www.zhihu.com/question/22586361/answer/77898641

雅克比矩阵转雅克比行列式推导,x为叉乘,叉乘的几何意义是俩向量构成的平行四边形的面积

FFT海水学习笔记_第20张图片

FFT海水学习笔记_第21张图片

J<0表示生成泡沫的区域,λ为挤压程度。

FFT IFFT

由于直接计算效率非常之底,所以需要引入FFT(快速傅里叶变换) IFFT(快速傅里叶逆变换)

先回到海洋高度IDFT公式

FFT推导:

海洋高度公式

展开

所以计算复杂度为O(N²M²)

引入FFT IFFT

FFT海水学习笔记_第22张图片

波高方程转为

将一个二维IDFT转为俩个一维的IDFT

FFT海水学习笔记_第23张图片

FFT海水学习笔记_第24张图片

FFT海水学习笔记_第25张图片

FFT海水学习笔记_第26张图片

到这一步不看,其实就已经将公式转化为了标准的IDFT形式

FFT海水学习笔记_第27张图片

FFT海水学习笔记_第28张图片

将F(u,m’,t)进行奇偶划分

FFT海水学习笔记_第29张图片

FFT海水学习笔记_第30张图片

所以将N设为2的整数次幂的话,就可以一直像这样向下拆

FFT海水学习笔记_第31张图片

用蝶形图表示

FFT海水学习笔记_第32张图片

FFT海水学习笔记_第33张图片

继续将G和H进行奇偶拆分,一直拆到最后一组只有俩个的时候,比如这里的A B C D,已经可以直接求出他们与的关系

FFT海水学习笔记_第34张图片

FFT海水学习笔记_第35张图片

最后就可以得到一个蝶形变换图

FFT海水学习笔记_第36张图片

FFT海水学习笔记_第37张图片

上图的蝶形图,左侧的输入是倒序输入,右侧的输出是顺序输出。GPU一般使用Stockham FFT解决序号重映射问题。

Stockham FFT

https://zhuanlan.zhihu.com/p/208511211

FFT海水学习笔记_第38张图片

FFT海水学习笔记_第39张图片

FFT海水学习笔记_第40张图片

FFT海水学习笔记_第41张图片

FFT海水学习笔记_第42张图片

这里m是从1开始,所以是m-1,其他一样

所以可以看到,最后还是会回到

的计算,算法原理没变,但由于使用了n' m'表示n m,所以要转换为对应的表示,其推导:

https://www.keithlantz.net/2011/10/ocean-simulation-part-one-using-the-discrete-fourier-transform/

频谱推导

FFT海水学习笔记_第43张图片

w(k)推导

FFT海水学习笔记_第44张图片

方向波谱推导

FFT海水学习笔记_第45张图片

GPU Gem3 37章提到:

对非正态分布进行采样的主要方法是,首先生成均匀分布的随机数。然后使用一个转换把均匀分布的随机数转换为需要的非均匀分布的样本。

Xorshift均匀随机数

https://www.reedbeta.com/blog/quick-and-easy-gpu-random-numbers-in-d3d11/#wide-and-deep

Box-Muller转换高斯随机数

高斯随机数的生成  均匀到高斯的转换Box-Muller

FFT海水学习笔记_第46张图片

对于GPU来说有很大的优势,它没有分支或循环,只存在一条单一的代码流程。利用了GPU直线型代码和大量数学负载计算的长处,正余弦在GPU中计算很快。

最终效果:

FFT海水学习笔记_第47张图片

补充:

盗贼之海中浮沫区域的计算 https://dl.acm.org/doi/10.1145/3214745.3214820

FFT海水学习笔记_第48张图片  FFT海水学习笔记_第49张图片

对雅克比矩阵进行偏移以获得更大的区域

FFT海水学习笔记_第50张图片

+渐进模糊                                                               +LOD浮沫图

FFT海水学习笔记_第51张图片  FFT海水学习笔记_第52张图片

参考资料:

https://zhuanlan.zhihu.com/p/95482541

https://zhuanlan.zhihu.com/p/64414956

傅里叶

http://k.sina.com.cn/article_6367168142_17b83468e001004j89.html?sudaref=graph.qq.com&display=0&retcode=0

欧拉公式

https://www.bilibili.com/video/av49238862 

雅克比行列式 二重积分

https://www.bilibili.com/video/BV1Sb41187NZ?from=search&seid=14933653521092748320

如何理解雅克比矩阵

https://www.zhihu.com/question/22586361

雅克比矩阵雅克比行列式转换

https://www.zhihu.com/question/274450639

海洋高度公式推导

https://www.keithlantz.net/2011/10/ocean-simulation-part-one-using-the-discrete-fourier-transform/

Stockham FFT蝶形变换

https://zhuanlan.zhihu.com/p/208511211

Xorshift均匀随机数

https://www.reedbeta.com/blog/quick-and-easy-gpu-random-numbers-in-d3d11/#wide-and-deep

GPU Gem37章  Box-Muller转换高斯随机数

你可能感兴趣的:(学习笔记,线性代数)