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

📄 one_d.float.c

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的各种滤波器源码
💻 C
字号:
/* #include <ops/custom_defs.h>	*/
/* #include "tc.h"	*/
#include <math.h>

#define   M_SQRT1_2       0.70710678118654752440
#define   M_PI    3.14159265358979323846

#define	s2	sqrt(2.)

#define	_(a, b)	s2*(a), s2*(b)

#define	MASK1	_(cos(2*M_PI/16.)-cos(6*M_PI/16.), -cos(6*M_PI/16.)-cos(2*M_PI/16.))
#define	MASK2	_(cos(6*M_PI/16.)+cos(2*M_PI/16.),  cos(2*M_PI/16.)-cos(6*M_PI/16.))
#define	MASK3	_(1, 1)
#define	MASK4	_(1, -1)

#define	D0	_(cos(3*M_PI/16.)-cos(5*M_PI/16.), cos(M_PI/16.)+cos(7*M_PI/16.))
#define	D1	_(cos(7*M_PI/16.)-cos(M_PI/16.),-cos(3*M_PI/16.)-cos(5*M_PI/16.))
#define	D2	_(cos(M_PI/16.)-cos(7.*M_PI/16.), cos(3.*M_PI/16.)-cos(5.*M_PI/16.))
#define	D3	_(-cos(3.*M_PI/16.)-cos(5.*M_PI/16.), cos(M_PI/16.)+cos(7.*M_PI/16.))
#define D4	_(cos(M_PI/16.)+cos(7.*M_PI/16.), -cos(3.*M_PI/16.)-cos(5.*M_PI/16.))
#define	D5	_(-cos(3.*M_PI/16.)+cos(5.*M_PI/16.), cos(7.*M_PI/16.)-cos(M_PI/16.))
#define	D6	_(cos(3.*M_PI/16.)+cos(5.*M_PI/16.), -cos(7.*M_PI/16.)+cos(M_PI/16.))
#define	D7	_(cos(M_PI/16.)+cos(7.*M_PI/16.), cos(3.*M_PI/16.)-cos(5.*M_PI/16.))

#define C0 _(- (cos(3.*M_PI/16.) + sin(3.*M_PI/16.)), cos(M_PI/16.) + sin(   M_PI/16.))
#define C1 _(cos(3.*M_PI/16.) - sin(3.*M_PI/16.), sin(   M_PI/16.) - cos(   M_PI/16.))
#define C2 _(- sqrt(2.) * sin(3.*M_PI/16.), - sqrt(2.) * cos(   M_PI/16.))
#define C3 _(  sqrt(2.) * cos(3.*M_PI/16.), - sqrt(2.) * sin(   M_PI/16.))
#define C4 _(  sqrt(2.) * cos(3.*M_PI/16.),   sqrt(2.) * sin(   M_PI/16.))
#define C5 _(  sqrt(2.) * sin(3.*M_PI/16.), - sqrt(2.) * cos(  M_PI/16. ))   
#define C6 _(  cos(3.*M_PI/16.)-sin(3.*M_PI/16.), cos(M_PI/16.)-sin(   M_PI/16.))
#define C7 _(  cos(3.*M_PI/16.)+sin(3.*M_PI/16.), cos(M_PI/16.)+sin(   M_PI/16.))
#define C8 _(1, 1)
#define C9 _(1, -1)
#define C10 _(sqrt(2.) * cos(    M_PI/8.), sqrt(2.) * cos( 3.*M_PI/8.))
#define C11 _(sqrt(2.) * cos( 3.*M_PI/8.),  - sqrt(2.) * cos(    M_PI/8.)) 

int scale = 1;

void print_mask(char *str, double d1, double d2)
{
  unsigned short w1, w2;
  double sqrt();

  w1 = d1 * (1 << 14);
  w2 = d2 * (1 << 14);
  printf("#define %s %04x%04x\n", str, w1, w2);
} 

main(int argc, char **argv)
{
   int i, j, dataword;
   short data[8] ; 

  if (argc > 1 && !strcmp(argv[1], "-scale"))
    scale = atoi(argv[2]);

  if (argc > 1 && !strcmp(argv[1], "-idctmask")) {
    /*	Use the following to output masks */	

    print_mask("MASK1", MASK1);
    print_mask("MASK2", MASK2);
    print_mask("MASK3", MASK3);
    print_mask("MASK4", MASK4);

    print_mask("D0", D0);
    print_mask("D1", D1);
    print_mask("D2", D2);
    print_mask("D3", D3);

    print_mask("D4", D4);
    print_mask("D5", D5);
    print_mask("D6", D6);
    print_mask("D7", D7);

    exit (0);

  }

  if (argc > 1 && !strcmp(argv[1], "-dctmask")) {
    /*	Use the following to output dct masks */	

    print_mask("C0", C0);
    print_mask("C1", C1);
    print_mask("C2", C2);
    print_mask("C3", C3);
    print_mask("C4", C4);
    print_mask("C5", C5);
    print_mask("C6", C6);
    print_mask("C7", C7);
    print_mask("C8", C8);
    print_mask("C9", C9);
    print_mask("C10", C10);
    print_mask("C11", C11);

    exit(0);

  }


  for (j=0; j<8; j++) {

   for (i=0; i<8; i++) {
     scanf("%d", &dataword);
     data[i] = dataword * scale;
   }

   one_d_idct(data);

   for (i= 0; i<8; i++) printf("%d ", data[i]);
   printf("\n");
  }

}	   

#define PACK(x, y, a, b)	x = a; y = b;

double
IFIR(double cx, double cy, double wa, double wb)
{
  return cx*wa + cy*wb ;
}

one_d_idct(short * data)
{
	double z2a, z3a, z5a, z0a, z2b, z3b, z5b, z0b; 
	double tmp22, tmp23, tmp20, tmp21;
	double tmp10, tmp13, tmp11, tmp12;
	double tmp0, tmp1, tmp2, tmp3;

	PACK(z0a, z0b, data[0], data[4]) ;
	PACK(z2a, z2b, data[1], data[5]);
	PACK(z5a, z5b, data[2], data[6]);
	PACK(z3a, z3b, data[3], data[7]);

	tmp22 = IFIR(z5a, z5b, MASK1);
	tmp23 = IFIR(z5a, z5b, MASK2);
	tmp20 = IFIR(z0a, z0b, MASK3) ;
	tmp21 = IFIR(z0a, z0b, MASK4) ;

	tmp10 = tmp20 + tmp23;
	tmp13 = tmp20 - tmp23;
	tmp11 = tmp21 + tmp22;
	tmp12 = tmp21 - tmp22;

	tmp0 = IFIR(z2a, z2b, D0) + IFIR(z3a, z3b, D1);
	tmp1 = IFIR(z2a, z2b, D2) + IFIR(z3a, z3b, D3);
	tmp2 = IFIR(z2a, z2b, D4) + IFIR(z3a, z3b, D5);
	tmp3 = IFIR(z2a, z2b, D6) + IFIR(z3a, z3b, D7);

	data[0] = tmp11 + tmp2;
	data[1] = tmp10 + tmp3;
	data[2] = tmp13 + tmp0;
	data[3] = tmp12 + tmp1;
	data[4] = tmp12 - tmp1;
	data[5] = tmp13 - tmp0;
	data[6] = tmp10 - tmp3;
	data[7] = tmp11 - tmp2;

}





⌨️ 快捷键说明

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