各位版主,你们好。 在此冒昧的问个比较没有技术含量的问题,
CUDA SDK中有个simpleCUFFT的例子,就是用CUFFT实现快速的一维卷积这个例子,其中有个“整理数据的函数”
int PadData(…)
{…}
我不明白为什么要这样做,根据什么原理得到的?
谢谢各位版主指点。
LZ您好:
在FFT中,pad一般有两种含义,一种是为了数据对齐而添加的占位用的空的存储空间,这种pad不参与FFT计算;另一种是FFT理论中的对信号序列补零,以增加变换的序列长度的做法。
前者与FFT理论无关,仅是实现中的细节。
后者与FFT理论有关,常见于两种情况:1)通过pad 0值,使得信号序列长度增加,此时FFT变换的点数也随之增加,可以获得更好的计算分辨率,减少频谱泄露。2)使用FFT计算卷积的时候,因为FFT是隐含周期性的,所以直接在频域相乘再变换回时域得到的是循环卷积(原信号进行周期延拓后的周期信号的卷积),如果要使用FFT得到的循环卷积来计算原信号的线性卷积,那么需要对原信号pad 一定长度的0值,pad的长度与滤波器时域表达有关。
简单看了一下simple cufft的paddata()的代码,预计是上述第二种情况的第二点,补零以使用FFT计算线性卷积。
以及,这并非是一个cdua的问题,这实际上是FFT理论的问题。
欢迎您周末来访,祝您好运~
谢谢版主。。。