Necesito una Convolución 1D contra 2 grandes matrices. Estoy usando este código en C#, pero lleva mucho tiempo ejecutarlo.1D Convolución rápida sin FFT
Lo sé, lo sé! Las convoluciones de FFT son muy rápidas. Pero en este proyecto NO PUEDO usarlo. Es una limitación del proyecto no usar FFT (no pregunte por qué: /).
Este es mi código en C# (portado de Matlab, por cierto):
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];
}
}
tanto, cualquier persona sabe cualquier algoritmo de convolución rápida widthout FFT?
Aunque ha dicho que no debe preguntar, ¿por qué no puede usar la FFT? Si esto es para un proyecto de clase donde está explícitamente prohibido, probablemente debería etiquetar esto como tarea. – templatetypedef
¿Puede C# llamar a CUDA? De ser así, podría usar instrucciones paralelas, lo que acelera considerablemente las complicaciones ingenuas. O podrías usar la transformada de Winograd o algo así (no la FFT clásica de Cooley-Tukey, si eso está lo suficientemente lejos como para satisfacer tu regla de "no FFT"). O si sabe algo sobre la entrada o el filtro (como solo ciertas frecuencias están presentes o algo así), puede usar ese conocimiento. Tendrás que ser más específico acerca de tus limitaciones y de cualquier conocimiento externo que puedas tener. – mtrw