Uma implementação radix-4 é mais rápida que uma FFT radix-2 equivalente e bem codificada? E se sim, por que seria mais rápido?
Depende. Teoricamente, você pode salvar algumas multiplicações com um radix-4, pois o radix-4 tem 1/4 do número de borboletas e 3 mpy + 8 adições por borboleta (se estruturado corretamente) e o radix 2 tem 1 mpy + 2 adições por borboleta .
Portanto, em termos de multiplicação, é um pouco melhor, no entanto, existe uma complexidade maior em termos de estrutura de código, tratamento de exceções, gerenciamento de coeficientes, gerenciamento de registros, endereçamento de dígitos reversos, etc.
Portanto, é apenas uma vantagem se o número de mpy for o fator limitante que, para a maioria dos hardwares atualmente, não é o caso.
uma maneira simples de olhar para uma FFT radix-4 é pensar em uma borboleta radix-4 como contendo 4 borboletas radix-2; 2 borboletas em uma passagem e 2 borboletas na passagem seguinte. e os fatores twiddle são os mesmos, exceto que o complexo fator twiddle para as borboletas está desligado por uma diferença de fase de . mas tudo isso significa trocar por e trocar alguns sinais de mais e menos. portanto, o seu radix-4 FFT alg só precisa ler os 4 valores complexos uma vez, carregar no complexo uma vez, fazer um monte de aritmética e armazenar os 4 resultados uma vez. você faz uma passagem radix-4 e realiza a mesma tarefa que duas passagens radix-2. sen(⋅)cos(⋅)
o número líquido de multiplicações e adições que acho iguais, mas a borboleta radix-4 pode ser feita no banco de registros do processador (acho que existem cerca de 16 registros diferentes de ponto flutuante e você precisa de 8 para as partes real e imag dos 4 valores, 2 registros para as manobras de pecado e cosseno e talvez algum outro registro ou dois para raspar). isso é mais rápido do que fazê-lo na memória.
Na raiz 2, o número de amostras é em termos de potência de 2, mas na raiz 4, o número de amostras pertencentes é uma potência de 4.