⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 ADI BF DSP的FFT汇编优化后的代码
💻 C
字号:
/*******************************************************************************
Copyright(c) 2000 - 2002 Analog Devices. All Rights Reserved.
Developed by Joint Development Software Application Team, IPDC, Bangalore, India
for Blackfin DSPs  ( Micro Signal Architecture 1.0 specification).

By using this module you agree to the terms of the Analog Devices License
Agreement for DSP Software. 
********************************************************************************
*  block data summing to total 600 blocks. These files works as reference output.
*
*  The files error1.dat, error2.dat..... error6.dat contains the error for each 
*  pixels for corresponding blocks. These files are generated when this test file
*  is run.
*/

#include <stdio.h>
#include <math.h>
#define NUMDATA 100

segment ("mydata1") fract16 in[64];
segment ("mydata3") fract16 temp[64];
segment ("mydata5") fract16 coeff[10];

main (void)
{
    int i, j, k;
    int flag = 1, overall =1;
    int error;
    int value;
    float pmse[64], omse;
    float pme[64], ome;

    FILE *ptr1, *ptr2, *ptr3;// *ptr4, *ptr5, *ptr6, *ptr7;
    
    coeff[0] = 0x5a82;           //  C4
    coeff[1] = 0x5a82;           //  C4
    coeff[2] = 0x30FC;           //cos(3pi/8)  C6 
    coeff[3] = 0x7642;           //cos(pi/8)   C2
    coeff[4] = 0x18F9;           //cos(7pi/16)
    coeff[5] = 0x7D8A;           //cos(pi/16)
    coeff[6] = 0x471D;           //cos(5pi/16)
    coeff[7] = 0x6A6E;           //cos(3pi/16)
    coeff[8] = 0x18F9;           //cos(7pi/16)
    coeff[9] = 0x7D8A;           //cos(pi/16)


//Property 1

  flag =1;

printf("\n\nTesting Property 1 of IEEE Std. 1180-1990 for IDCT Code:-\n\n");
printf("Processing Data file (dctout1.dat).......   ");

if((ptr1 = fopen("dctout1.dat", "r")) == NULL)
printf("Can not open file dctout1.dat\n");

if((ptr2 = fopen("refout1.dat", "r")) == NULL)
printf("Can not open file refout1.dat\n");

if((ptr3 = fopen("error1.dat", "w")) == NULL)
printf("Can not open file error1.dat\n");

for(k=0; k<NUMDATA; k++)
{

    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        in[i] = (fract16) value;
    }

    _r8x8invdct(in, coeff, temp);


    for(i=0; i<64; i++)
    {
        if(in[i]  > 255)
            in[i] = 255;

        if(in[i] < -256)
            in[i] = -256;
    }

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            fscanf(ptr2, "%d", &value);
            error = in[i*8+j] - value;

            fprintf(ptr3, "%d ", error);
    
            if(abs(error) > 1)
            flag = 0;   
        }
        fprintf(ptr3, "\n");
    }

}

    if(flag == 1)
        printf("Passed\n");
    else
    {
        overall = 0;
        printf("Failed\n");
    }
fclose(ptr1);
fclose(ptr2);
fclose(ptr3);


flag =1;
printf("Processing Data file (dctout2.dat).......   ");

if((ptr1 = fopen("dctout2.dat", "r")) == NULL)
printf("Can not open file dctout2.dat\n");

if((ptr2 = fopen("refout2.dat", "r")) == NULL)
printf("Can not open file refout2.dat\n");

if((ptr3 = fopen("error2.dat", "w")) == NULL)
printf("Can not open file error2.dat\n");

for(k=0; k<NUMDATA; k++)
{

    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        in[i] = (fract16) value;
    }

    _r8x8invdct(in, coeff, temp);


    for(i=0; i<64; i++)
    {
        if(in[i]  > 255)
            in[i] = 255;

        if(in[i] < -256)
            in[i] = -256;
    }

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            fscanf(ptr2, "%d", &value);
            error = in[i*8+j] - value;

            fprintf(ptr3, "%d ", error);

            if(abs(error) > 1)
            flag = 0;   
        }
        fprintf(ptr3, "\n");
    }

}

    if(flag == 1)
        printf("Passed\n");
    else
    {
        overall =0;
        printf("Failed\n");
    }
fclose(ptr1);
fclose(ptr2);
fclose(ptr3);


flag =1;
printf("Processing Data file (dctout3.dat).......   ");

if((ptr1 = fopen("dctout3.dat", "r")) == NULL)
printf("Can not open file dctout3.dat\n");

if((ptr2 = fopen("refout3.dat", "r")) == NULL)
printf("Can not open file refout3.dat\n");

if((ptr3 = fopen("error3.dat", "w")) == NULL)
printf("Can not open file error3.dat\n");

for(k=0; k<NUMDATA; k++)
{

    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        in[i] = (fract16) value;
    }

    _r8x8invdct(in, coeff, temp);


    for(i=0; i<64; i++)
    {
        if(in[i]  > 255)
            in[i] = 255;

        if(in[i] < -256)
            in[i] = -256;
    }

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            fscanf(ptr2, "%d", &value);
            error = in[i*8+j] - value;

            fprintf(ptr3, "%d ", error);

            if(abs(error) > 1)
            flag = 0;   
        }
        fprintf(ptr3, "\n");
    }

}

    if(flag == 1)
        printf("Passed\n");
    else
    {
        overall =0;
        printf("Failed\n");
    }
fclose(ptr1);
fclose(ptr2);
fclose(ptr3);


flag =1;
printf("Processing Data file (dctout4.dat).......   ");

if((ptr1 = fopen("dctout4.dat", "r")) == NULL)
printf("Can not open file dctout4.dat\n");

if((ptr2 = fopen("refout4.dat", "r")) == NULL)
printf("Can not open file refout4.dat\n");

if((ptr3 = fopen("error4.dat", "w")) == NULL)
printf("Can not open file error4.dat\n");

for(k=0; k<NUMDATA; k++)
{

    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        in[i] = (fract16) value;
    }

    _r8x8invdct(in, coeff, temp);


    for(i=0; i<64; i++)
    {
        if(in[i]  > 255)
            in[i] = 255;

        if(in[i] < -256)
            in[i] = -256;
    }

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            fscanf(ptr2, "%d", &value);
            error = in[i*8+j] - value;

            fprintf(ptr3, "%d ", error);

            if(abs(error) > 1)
            flag = 0;   
        }
        fprintf(ptr3, "\n");
    }

}

    if(flag == 1)
        printf("Passed\n");
    else
    {
        overall =0;
        printf("Failed\n");
    }
fclose(ptr1);
fclose(ptr2);
fclose(ptr3);



flag =1;
printf("Processing Data file (dctout5.dat).......   ");

if((ptr1 = fopen("dctout5.dat", "r")) == NULL)
printf("Can not open file dctout5.dat\n");

if((ptr2 = fopen("refout5.dat", "r")) == NULL)
printf("Can not open file refout5.dat\n");

if((ptr3 = fopen("error5.dat", "w")) == NULL)
printf("Can not open file error5.dat\n");

for(k=0; k<NUMDATA; k++)
{

    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        in[i] = (fract16) value;
    }

    _r8x8invdct(in, coeff, temp);


    for(i=0; i<64; i++)
    {
        if(in[i]  > 255)
            in[i] = 255;

        if(in[i] < -256)
            in[i] = -256;
    }

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            fscanf(ptr2, "%d", &value);
            error = in[i*8+j] - value;

            fprintf(ptr3, "%d ", error);

            if(abs(error) > 1)
            flag = 0;   
        }
        fprintf(ptr3, "\n");
    }

}

    if(flag == 1)
        printf("Passed\n");
    else
    {
        overall =0;
        printf("Failed\n");
    }
fclose(ptr1);
fclose(ptr2);
fclose(ptr3);


flag =1;
printf("Processing Data file (dctout6.dat).......   ");

if((ptr1 = fopen("dctout6.dat", "r")) == NULL)
printf("Can not open file dctout6.dat\n");

if((ptr2 = fopen("refout6.dat", "r")) == NULL)
printf("Can not open file refout6.dat\n");

if((ptr3 = fopen("error6.dat", "w")) == NULL)
printf("Can not open file error6.dat\n");

for(k=0; k<NUMDATA; k++)
{

    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        in[i] = (fract16) value;
    }

    _r8x8invdct(in, coeff, temp);


    for(i=0; i<64; i++)
    {
        if(in[i]  > 255)
            in[i] = 255;

        if(in[i] < -256)
            in[i] = -256;
    }

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            fscanf(ptr2, "%d", &value);
            error = in[i*8+j] - value;

            fprintf(ptr3, "%d ", error);

            if(abs(error) > 1)
            flag = 0;   
        }
        fprintf(ptr3, "\n");
    }

}

    if(flag == 1)
        printf("Passed\n");
    else
    {
        overall =0;
        printf("Failed\n");
    }
fclose(ptr1);
fclose(ptr2);
fclose(ptr3);

    if(overall == 1)
        printf("\nPROPERTY 1 IS PASSED \n");
    else
        printf("\nPROPERTY 1 IS FAILED \n");




//Property 2

    flag =1;

printf("\n\nTesting Property 2 of IEEE Std. 1180-1990 for IDCT Code:- \n");
printf("----------------------------------------------------------\n\n");

omse = 0.0;
for(i=0; i<64; i++)
pmse[i]  = 0.0;


if((ptr1 = fopen("error1.dat", "r")) == NULL)
printf("Can not open file error1.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        value = value * value;
        pmse[i] = pmse[i] + value;
    }

}
fclose(ptr1);


if((ptr1 = fopen("error2.dat", "r")) == NULL)
printf("Can not open file error2.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        value = value * value;
        pmse[i] = pmse[i] + value;
    }

}
fclose(ptr1);


if((ptr1 = fopen("error3.dat", "r")) == NULL)
printf("Can not open file error3.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        value = value * value;
        pmse[i] = pmse[i] + value;
    }

}
fclose(ptr1);



if((ptr1 = fopen("error4.dat", "r")) == NULL)
printf("Can not open file error4.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        value = value * value;
        pmse[i] = pmse[i] + value;
    }

}
fclose(ptr1);



if((ptr1 = fopen("error5.dat", "r")) == NULL)
printf("Can not open file error5.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        value = value * value;
        pmse[i] = pmse[i] + value;
    }

}
fclose(ptr1);



if((ptr1 = fopen("error6.dat", "r")) == NULL)
printf("Can not open file error6.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        value = value * value;
        pmse[i] = pmse[i] + value;
    }

}
fclose(ptr1);



for(i=0; i<64; i++)
{
   omse = omse + pmse[i];
   pmse[i] = pmse[i] / (6 * NUMDATA);

   if(pmse[i] > 0.06)
       flag = 0;
}

printf("Mean Square Error Per Pixel Location: \n\n");

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            printf("%f, ", pmse[i*8+j]);
        }
        printf("\n");
    }



    if(flag == 1)
        printf("\n\nPROPERTY 2 IS PASSED \n");
    else
        printf("\n\nPROPERTY 2 IS FAILED \n");



//Property 3

    flag =1;

printf("\n\nTesting Property 3 of IEEE Std. 1180-1990 for IDCT Code:- \n");
printf("----------------------------------------------------------\n\n");

    omse = omse / (6 * NUMDATA * 64);

    if(omse > 0.02)
        flag = 0;

    printf("\nOver all Mean Square Error = %f \n", omse);


    if(flag == 1)
        printf("\n\nPROPERTY 3 IS PASSED \n\n");
    else
        printf("\n\nPROPERTY 3 IS FAILED \n\n");



//Property 4

    flag =1;

printf("\n\nTesting Property 4 of IEEE Std. 1180-1990 for IDCT Code:- \n");
printf("----------------------------------------------------------\n\n");

ome = 0.0;
for(i=0; i<64; i++)
pme[i]  = 0.0;


if((ptr1 = fopen("error1.dat", "r")) == NULL)
printf("Can not open file error1.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        pme[i] = pme[i] + value;
    }

}
fclose(ptr1);


if((ptr1 = fopen("error2.dat", "r")) == NULL)
printf("Can not open file error2.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        pme[i] = pme[i] + value;
    }

}
fclose(ptr1);


if((ptr1 = fopen("error3.dat", "r")) == NULL)
printf("Can not open file error3.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        pme[i] = pme[i] + value;
    }

}
fclose(ptr1);



if((ptr1 = fopen("error4.dat", "r")) == NULL)
printf("Can not open file error4.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        pme[i] = pme[i] + value;
    }

}
fclose(ptr1);



if((ptr1 = fopen("error5.dat", "r")) == NULL)
printf("Can not open file error5.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        pme[i] = pme[i] + value;
    }

}
fclose(ptr1);


if((ptr1 = fopen("error6.dat", "r")) == NULL)
printf("Can not open file error6.dat\n");

for(k=0; k<NUMDATA; k++)
{
    for(i=0; i<64; i++)
    {
        fscanf(ptr1, "%d", &value);
        pme[i] = pme[i] + value;
    }

}
fclose(ptr1);


for(i=0; i<64; i++)
{
   ome = ome + pme[i];
   pme[i] = pme[i] / (6 * NUMDATA);

   if(fabs(pme[i]) > 0.015)
       flag = 0;
}

printf("Mean Error Per Pixel Location: \n\n");

    for(i=0; i<8; i++)
    {
        for(j=0; j<8; j++)
        {
            printf("%f, ", pme[i*8+j]);
        }
        printf("\n");
    }



    if(flag == 1)
        printf("\n\nPROPERTY 4 IS PASSED \n");
    else
        printf("\n\nPROPERTY 4 IS FAILED \n");


//Property 5

    flag =1;

printf("\n\nTesting Property 5 of IEEE Std. 1180-1990 for IDCT Code:- \n");
printf("----------------------------------------------------------\n\n");

    ome = ome / (6 * NUMDATA * 64);

    if(fabs(ome) > 0.0015)
        flag = 0;

    printf("\nOver all Mean Error = %f \n", ome);


    if(flag == 1)
        printf("\n\nPROPERTY 5 IS PASSED \n\n");
    else
        printf("\n\nPROPERTY 5 IS FAILED \n\n");





//Property 6

    flag =1;

printf("\n\nTesting Property 6 of IEEE Std. 1180-1990 for IDCT Code:- \n");
printf("----------------------------------------------------------\n\n");

    for(i=0; i<64; i++)
        in[i] = 0;

    _r8x8invdct(in, coeff, temp);

    for(i=0; i<64; i++)
    {
        if(in[i] != 0)
            flag = 0;
    }

    if(flag == 1)
        printf("\nPROPERTY 6 IS PASSED \n");
    else
        printf("\nPROPERTY 6 IS FAILED \n");


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -