我需要對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