lifting_cdf9_7.c

来自「spiht for linux this is used to decod an」· C语言 代码 · 共 1,008 行 · 第 1/3 页

C
1,008
字号
  signal[0] =    signal[0]/EPSILON - DELTA * (signal[1] + signal[signal_length - 1]);  for (index = 2; index < signal_length; index += 2)    signal[index] =      signal[index]/EPSILON -       DELTA * (signal[index + 1] + signal[index - 1]);    for (index = 1; index < signal_length - 2; index += 2)    signal[index] -=      GAMMA * (signal[index - 1] + signal[index + 1]);  signal[signal_length - 1] -=    GAMMA * (signal[signal_length - 2] + signal[0]);    signal[0] -=    BETA * (signal[1] + signal[signal_length - 1]);  for (index = 2; index < signal_length; index += 2)    signal[index] -=      BETA * (signal[index + 1] + signal[index - 1]);    for (index = 1; index < signal_length - 2; index += 2)    signal[index] -=      ALPHA * (signal[index - 1] + signal[index + 1]);  signal[signal_length - 1] -=    ALPHA * (signal[signal_length - 2] + signal[0]);}static void QccWAVCDF97SynthesisPeriodicEvenOdd(QccVector signal,                                                int signal_length){  int index;    for (index = 0; index < signal_length; index += 2)    signal[index] *= (-EPSILON);  for (index = 1; index < signal_length - 1; index += 2)    signal[index] =      signal[index] / EPSILON -       DELTA * (signal[index + 1] + signal[index - 1]);  signal[signal_length - 1] =    signal[signal_length - 1] / EPSILON -    DELTA * (signal[0] + signal[signal_length - 2]);  signal[0] -=    GAMMA * (signal[signal_length - 1] + signal[1]);  for (index = 2; index < signal_length; index += 2)    signal[index] -=      GAMMA * (signal[index - 1] + signal[index + 1]);    for (index = 1; index < signal_length - 1; index += 2)    signal[index] -=      BETA * (signal[index + 1] + signal[index - 1]);  signal[signal_length - 1] -=    BETA * (signal[0] + signal[signal_length - 2]);    signal[0] -=    ALPHA * (signal[signal_length - 1] + signal[1]);  for (index = 2; index < signal_length; index += 2)    signal[index] -=      ALPHA * (signal[index - 1] + signal[index + 1]);}static void QccWAVCDF97SynthesisBoundaryEvenEven(QccVector signal,                                                 int signal_length){  int index;    for (index = 1; index < signal_length; index += 2)    signal[index] *= (-EPSILON);    signal[0] =    signal[0]/EPSILON - DELTA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length; index += 2)    signal[index] =      signal[index]/EPSILON -      DELTA * (signal[index + 1] + signal[index - 1]);    for (index = 1; index < signal_length - 2; index += 2)    signal[index] -=      GAMMA * (signal[index - 1] + signal[index + 1]);  signal[signal_length - 1] -=    GAMMA * (3*signal[signal_length - 2] - signal[signal_length - 4]);    signal[0] -=    BETA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length; index += 2)    signal[index] -=      BETA * (signal[index + 1] + signal[index - 1]);    for (index = 1; index < signal_length - 2; index += 2)    signal[index] -=      ALPHA * (signal[index - 1] + signal[index + 1]);  signal[signal_length - 1] -=    ALPHA * (3*signal[signal_length - 2] - signal[signal_length - 4]);}static void QccWAVCDF97SynthesisBoundaryEvenOdd(QccVector signal,                                                int signal_length){  int index;    for (index = 0; index < signal_length; index += 2)    signal[index] *= (-EPSILON);  for (index = 1; index < signal_length - 1; index += 2)    signal[index] =      signal[index] / EPSILON -       DELTA * (signal[index + 1] + signal[index - 1]);  signal[signal_length - 1] =    signal[signal_length - 1] / EPSILON -    DELTA * (3*signal[signal_length - 2] -             signal[signal_length - 4]);    signal[0] -=    GAMMA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length; index += 2)    signal[index] -=      GAMMA * (signal[index - 1] + signal[index + 1]);    for (index = 1; index < signal_length - 1; index += 2)    signal[index] -=      BETA * (signal[index + 1] + signal[index - 1]);  signal[signal_length - 1] -=    BETA * (3*signal[signal_length - 2] - signal[signal_length - 4]);    signal[0] -=    ALPHA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length; index += 2)    signal[index] -=      ALPHA * (signal[index - 1] + signal[index + 1]);}static void QccWAVCDF97SynthesisBoundaryOddEven(QccVector signal,                                                int signal_length){  int index;    for (index = 1; index < signal_length; index += 2)    signal[index] *= (-EPSILON);  signal[0] =    signal[0] / EPSILON -    DELTA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length - 1; index += 2)    signal[index] =      signal[index] / EPSILON -       DELTA * (signal[index + 1] + signal[index - 1]);  signal[signal_length - 1] =    signal[signal_length - 1] / EPSILON -    DELTA * (3*signal[signal_length - 2] -             signal[signal_length - 4]);  for (index = 1; index < signal_length; index += 2)    signal[index] -=      GAMMA * (signal[index - 1] + signal[index + 1]);  signal[0] -=    BETA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length - 1; index += 2)    signal[index] -=      BETA * (signal[index + 1] + signal[index - 1]);  signal[signal_length - 1] -=    BETA * (3*signal[signal_length - 2] - signal[signal_length - 4]);  for (index = 1; index < signal_length; index += 2)    signal[index] -=      ALPHA * (signal[index - 1] + signal[index + 1]);}static void QccWAVCDF97SynthesisBoundaryOddOdd(QccVector signal,                                               int signal_length){  int index;    for (index = 0; index < signal_length; index += 2)    signal[index] *= (-EPSILON);  for (index = 1; index < signal_length - 1; index += 2)    signal[index] =      signal[index] / EPSILON -       DELTA * (signal[index + 1] + signal[index - 1]);    signal[0] -=    GAMMA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length - 1; index += 2)    signal[index] -=      GAMMA * (signal[index - 1] + signal[index + 1]);  signal[signal_length - 1] -=    GAMMA * (3*signal[signal_length - 2] - signal[signal_length - 4]);    for (index = 1; index < signal_length - 1; index += 2)    signal[index] -=      BETA * (signal[index + 1] + signal[index - 1]);  signal[0] -=    ALPHA * (3*signal[1] - signal[3]);  for (index = 2; index < signal_length - 1; index += 2)    signal[index] -=      ALPHA * (signal[index - 1] + signal[index + 1]);  signal[signal_length - 1] -=    ALPHA * (3*signal[signal_length - 2] - signal[signal_length - 4]);    }int QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7(QccVector signal,                                                     int signal_length,                                                     int phase,                                                     int boundary){  if (signal == NULL)    return(0);    if (!signal_length)    return(0);    if (signal_length == 1)    {      if (phase == QCCWAVWAVELET_PHASE_EVEN)        signal[0] /= M_SQRT2;      else        signal[0] *= M_SQRT2;      return(0);    }    if ((boundary == QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET) &&      ((signal_length == 2) || (signal_length == 3)))    boundary = QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION;    switch (phase)    {    case QCCWAVWAVELET_PHASE_EVEN:      switch (signal_length % 2)        {        case 0:          switch (boundary)            {            case QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION:              QccWAVCDF97SynthesisSymmetricEvenEven(signal, signal_length);              break;                          case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION:              QccWAVCDF97SynthesisPeriodicEvenEven(signal, signal_length);              break;                          case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET:              QccWAVCDF97SynthesisBoundaryEvenEven(signal, signal_length);              break;                          default:              QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7): Undefined boundary method");              return(1);            }          break;                  case 1:          switch (boundary)            {            case QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION:              QccWAVCDF97SynthesisSymmetricOddEven(signal, signal_length);              break;                          case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION:              QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7): Signal length must be even for periodic extension");              return(1);              break;                          case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET:              QccWAVCDF97SynthesisBoundaryOddEven(signal, signal_length);              break;                          default:              QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7): Undefined boundary method");              return(1);            }          break;        }      break;    case QCCWAVWAVELET_PHASE_ODD:      switch (signal_length % 2)        {        case 0:          switch (boundary)            {            case QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION:              QccWAVCDF97SynthesisSymmetricEvenOdd(signal, signal_length);              break;                          case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION:              QccWAVCDF97SynthesisPeriodicEvenOdd(signal, signal_length);              break;                          case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET:              QccWAVCDF97SynthesisBoundaryEvenOdd(signal, signal_length);              break;                          default:              QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7): Undefined boundary method");              return(1);            }          break;                  case 1:          switch (boundary)            {            case QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION:              QccWAVCDF97SynthesisSymmetricOddOdd(signal, signal_length);              break;                          case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION:              QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7): Signal length must be even for periodic extension");              return(1);              break;                          case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET:              QccWAVCDF97SynthesisBoundaryOddOdd(signal, signal_length);              break;                          default:              QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7): Undefined boundary method");              return(1);            }          break;        }      break;    }  return(0);}

⌨️ 快捷键说明

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