📄 main.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 + -