Je teste la bibliothèque en utilisant simplement une transformée en cosinus discrète.Utilisation de la bibliothèque fftw3 pour le dct
#include <fftw3.h>
void dump_vector(int n, double* vec) {
for(int i = 0; i < n; i++)
printf("%f ", vec[i]);
printf("\n");
}
int main()
{
double a[] = {0.5, 0.6, 0.7, 0.8};
double b[] = {0, 0, 0, 0};
printf("Original vector\n");
dump_vector(4, a);
fftw_plan plan = fftw_plan_r2r_1d(4, a, a, FFTW_REDFT10, FFTW_ESTIMATE);
fftw_execute(plan);
printf("DCT\n");
dump_vector(4, a);
fftw_plan plani = fftw_plan_r2r_1d(4, a, a, FFTW_REDFT10, FFTW_ESTIMATE);
fftw_execute(plani);
printf("IDCT\n");
dump_vector(4, a);
return 0;
}
j'espère obtenir le même a
, ou peut-être une approximation, mais mon ouput est la suivante:
Original vector
0.500000 0.600000 0.700000 0.800000
DCT
5.200000 -0.630864 0.000000 -0.044834
IDCT
9.048603 9.208347 8.182682 5.179908
On dirait que dans les deux cas, vous effectuez la transformation en avant, non inverse. Vous avez besoin de 'REDFT01' pour le second cas, si j'ai lu le document correctement –
Oui, je l'ai édité. Merci – FacundoGFlores
Eh bien, ne modifiez pas comme les réponses sont sur l'original. Mais de toute façon, maintenant il semble que la chose à l'échelle (facteur 8 comme je vois) –