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

📄 dct.txt

📁 实现离散余弦变换的 功能非常好 很
💻 TXT
字号:
Define cos(n*pi/16) Cn

F(0,v)=0.5*C(0)*[x(0)+x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)]

F(1,v)=0.5*C(0)*[x(0)*C1+x(1)*C3+x(2)*C5+x(3)*C7+x(4)*C9

              +x(5)*C11+x(6)*C13+x(7)*C15]

           =0.5*{[x(0)-X(7)]C1+[X(1)-X(6)]*C3+[X(2)-x(5)]*C5

              +[x(3)-x(4)]*C7]

从上面的式子可以看到07,16,25,34可以作为第一次运算的相加节点,将所有节点

的表达式列出后,可发现一个规律,得到一蝶形图,按之编程,如下:

#define  C1 0.9808
#define  C2 0.9239
#define  C3 0.8315
#define  C4 0.7071
#define  C5 0.5556
#define  C6 0.3827
#define  C7 0.1951

//先做行DCT
void fdctrow(double *blk)
{ 
double S07,S16,S25,S34,S0734,S1625;
double D07,D16,D25,D34,D0734,D1625;

S07=blk[0]+blk[7];
S16=blk[1]+blk[6];
S25=blk[2]+blk[5];
S34=blk[3]+blk[4];
S0734=S07+S34;
S1625=S16+S25;

D07=blk[0]-blk[7]; 
D16=blk[1]-blk[6];
D25=blk[2]-blk[5];
D34=blk[3]-blk[4];
D0734=S07-S34;
D1625=S16-S25;

blk[0]=0.5*(C4*(S0734+S1625));
blk[1]=0.5*(C1*D07+C3*D16+C5*D25+C7*D34);
blk[2]=0.5*(C2*D0734+C6*D1625);
blk[3]=0.5*(C3*D07-C7*D16-C1*D25-C5*D34);
blk[4]=0.5*(C4*(S0734-S1625));
blk[5]=0.5*(C5*D07-C1*D16+C7*D25+C3*D34);
blk[6]=0.5*(C6*D0734-C2*D1625);
blk[7]=0.5*(C7*D07-C5*D16+C3*D25-C1*D34);

}

//再做列DCT

void fdctcol(double *blk)
{
double S07,S16,S25,S34,S0734,S1625;
double D07,D16,D25,D34,D0734,D1625;

S07=blk[0*8]+blk[7*8];
S16=blk[1*8]+blk[6*8];
S25=blk[2*8]+blk[5*8];
S34=blk[3*8]+blk[4*8];
S0734=S07+S34;
S1625=S16+S25;

D07=blk[0*8]-blk[7*8]; 
D16=blk[1*8]-blk[6*8];
D25=blk[2*8]-blk[5*8];
D34=blk[3*8]-blk[4*8];
D0734=S07-S34;
D1625=S16-S25;

blk[0*8]=0.5*(C4*(S0734+S1625));
blk[1*8]=0.5*(C1*D07+C3*D16+C5*D25+C7*D34);
blk[2*8]=0.5*(C2*D0734+C6*D1625);
blk[3*8]=0.5*(C3*D07-C7*D16-C1*D25-C5*D34);
blk[4*8]=0.5*(C4*(S0734-S1625));
blk[5*8]=0.5*(C5*D07-C1*D16+C7*D25+C3*D34);
blk[6*8]=0.5*(C6*D0734-C2*D1625);
blk[7*8]=0.5*(C7*D07-C5*D16+C3*D25-C1*D34);

}

void fdct(double *block)
{
  int i;

  for (i=0; i<8; i++)
    fdctrow(block+8*i);

  for (i=0; i<8; i++)
    fdctcol(block+i);
}

⌨️ 快捷键说明

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