我需要对2个大数组进行一维卷积。我在C#中使用这段代码,但它需要很长时间才能运行。1D无FFT快速卷积
我知道,我知道! FFT卷积非常快。但在这个项目中,我无法使用它。 这是该项目不使用FFT的一个约束(请不要问为什么:/)。
这是我在C#代码(从MATLAB移植,顺便说一句):
var result = new double[input.Length + filter.Length - 1];
for (var i = 0; i < input.Length; i++)
{
for (var j = 0; j < filter.Length; j++)
{
result[i + j] += input[i] * filter[j];
}
}
所以任何人都知道任何快速卷积算法WIDTHOUT FFT?
虽然你说过不要问,为什么你不能使用FFT?如果这是针对明确禁止的类项目,则应该将其标记为家庭作业。 – templatetypedef
C#可以调用CUDA吗?如果可以的话,你可以使用并行指令,这相当大地加速了幼稚卷积。或者你可以使用Winograd变换或其他东西(不是Cooley-Tukey经典FFT,如果这足够满足你的“不FFT”规则)。或者,如果您知道输入或滤波器的某些信息(例如只有某些频率存在或某种情况),则可以使用该知识。你将不得不更加具体地了解你的限制以及你可能拥有的任何外部知识。 – mtrw