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

📄 lifting.c

📁 QccPack implementation in C
💻 C
📖 第 1 页 / 共 2 页
字号:
        }      break;    default:      QccErrorAddMessage("(QccWAVLiftingAnalysis): Undefined lifting scheme");      goto QccError;    }  if (QccWAVWaveletLWT(input_signal2, output_signal, signal_length, 0, phase))    {      QccErrorAddMessage("(QccWAVLiftingAnalysis): Error calling QccWAVWaveletLWT()");      goto QccError;    }  return_value = 0;  goto QccReturn; QccError:  return_value = 1; QccReturn:  QccVectorFree(input_signal2);  return(return_value);}int QccWAVLiftingSynthesis(const QccVector input_signal,                           QccVector output_signal,                           int signal_length,                           int phase,                           const QccWAVLiftingScheme *lifting_scheme,                           int boundary){  int return_value;  if (input_signal == NULL)    return(0);  if (output_signal == NULL)    return(0);  if (lifting_scheme == NULL)    return(0);  if (!signal_length)    return(0);  if (QccWAVWaveletInverseLWT(input_signal, output_signal,                              signal_length, 0, phase))    {      QccErrorAddMessage("(QccWAVLiftingSynthesis): Error calling QccWAVWaveletInverseLWT()");      goto QccError;    }  switch (lifting_scheme->scheme)    {    case QCCWAVLIFTINGSCHEME_LWT:      break;    case  QCCWAVLIFTINGSCHEME_Daubechies4:      if (QccWAVLiftingSynthesisDaubechies4(output_signal,                                            signal_length,                                            phase,                                            boundary))        {          QccErrorAddMessage("(QccWAVLiftingSynthesis): Error calling QccWAVLiftingSynthesisDaubechies4()");          goto QccError;        }      break;    case QCCWAVLIFTINGSCHEME_CohenDaubechiesFeauveau9_7:      if (QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7(output_signal,                                                           signal_length,                                                           phase,                                                           boundary))        {          QccErrorAddMessage("(QccWAVLiftingSynthesis): Error calling QccWAVLiftingSynthesisCohenDaubechiesFeauveau9_7()");          goto QccError;        }      break;    case QCCWAVLIFTINGSCHEME_CohenDaubechiesFeauveau5_3:      if (QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3(output_signal,                                                           signal_length,                                                           phase,                                                           boundary))        {          QccErrorAddMessage("(QccWAVLiftingSynthesis): Error calling QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3()");          goto QccError;        }      break;    default:      QccErrorAddMessage("(QccWAVLiftingSynthesis): Undefined lifting scheme");      goto QccError;    }  return_value = 0;  goto QccReturn; QccError:  return_value = 1; QccReturn:  return(return_value);}int QccWAVLiftingRedundantAnalysis(const QccVector input_signal,                                   QccVector output_signal_low,                                   QccVector output_signal_high,                                   int signal_length,                                   const QccWAVLiftingScheme *lifting_scheme,                                   int boundary){  int return_value;  QccVector temp1 = NULL;  QccVector temp2 = NULL;  QccVector temp3 = NULL;  int length1, length2;  if ((temp1 = QccVectorAlloc(signal_length)) == NULL)    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccVectorAlloc()");      goto Error;    }  if ((temp2 = QccVectorAlloc(signal_length)) == NULL)    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccVectorAlloc()");      goto Error;    }  if ((temp3 = QccVectorAlloc(signal_length)) == NULL)    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccVectorAlloc()");      goto Error;    }  if (QccWAVLiftingAnalysis(input_signal,                            temp1,                            signal_length,                            0,                            lifting_scheme,                            boundary))    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccWAVLiftingAnalysis()");      goto Error;    }  if (QccWAVLiftingAnalysis(input_signal,                            temp2,                            signal_length,                            1,                            lifting_scheme,                            boundary))    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccWAVLiftingAnalysis()");      goto Error;    }  if (QccVectorCopy(temp3, temp1, signal_length))    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccVectorCopy()");      goto Error;    }  length1 = QccWAVWaveletDWTSubbandLength(signal_length, 1, 0, 0, 0);  length2 = QccWAVWaveletDWTSubbandLength(signal_length, 1, 1, 0, 0);  if (QccVectorCopy(&temp1[length1], temp2, length2))    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccVectorCopy()");      goto Error;    }  if (QccVectorCopy(temp2, &temp3[length1], length2))    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccVectorCopy()");      goto Error;    }  if (QccWAVWaveletInverseLWT(temp1, output_signal_low, signal_length, 0, 0))    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccWAVWaveletInverseLWT()");      goto Error;    }  if (QccWAVWaveletInverseLWT(temp2, output_signal_high, signal_length, 0, 1))    {      QccErrorAddMessage("(QccWAVLiftingRedundantAnalysis): Error calling QccWAVWaveletInverseLWT()");      goto Error;    }  return_value = 0;  goto Return; Error:  return_value = 1; Return:  QccVectorFree(temp1);  QccVectorFree(temp2);  QccVectorFree(temp3);  return(return_value);}int QccWAVLiftingRedundantSynthesis(const QccVector input_signal_low,                                    const QccVector input_signal_high,                                    QccVector output_signal,                                    int signal_length,                                    const QccWAVLiftingScheme *lifting_scheme,                                    int boundary){  int return_value;  QccVector temp1 = NULL;  QccVector temp2 = NULL;  QccVector temp3 = NULL;  int length1, length2;  if ((temp1 = QccVectorAlloc(signal_length)) == NULL)    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorAlloc()");      goto Error;    }  if ((temp2 = QccVectorAlloc(signal_length)) == NULL)    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorAlloc()");      goto Error;    }  if ((temp3 = QccVectorAlloc(signal_length)) == NULL)    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorAlloc()");      goto Error;    }  if (QccWAVWaveletLWT(input_signal_low, temp1, signal_length, 0, 0))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccWAVWaveletInverseLWT()");      goto Error;    }  if (QccWAVWaveletLWT(input_signal_high, temp2, signal_length, 0, 1))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccWAVWaveletInverseLWT()");      goto Error;    }  length1 = QccWAVWaveletDWTSubbandLength(signal_length, 1, 0, 0, 0);  length2 = QccWAVWaveletDWTSubbandLength(signal_length, 1, 1, 0, 0);  if (QccVectorCopy(temp3, temp1, signal_length))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorCopy()");      goto Error;    }  if (QccVectorCopy(&temp1[length1], temp2, length2))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorCopy()");      goto Error;    }  if (QccVectorCopy(temp2, &temp3[length1], length2))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorCopy()");      goto Error;    }  if (QccWAVLiftingSynthesis(temp1,                             output_signal,                             signal_length,                             0,                             lifting_scheme,                             boundary))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccWAVLiftingSynthesis()");      goto Error;    }  if (QccWAVLiftingSynthesis(temp2,                             temp3,                             signal_length,                             1,                             lifting_scheme,                             boundary))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccWAVLiftingSynthesis()");      goto Error;    }  if (QccVectorAdd(output_signal,                   temp3,                   signal_length))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorAdd()");      goto Error;    }  if (QccVectorScalarMult(output_signal,                          0.5,                          signal_length))    {      QccErrorAddMessage("(QccWAVLiftingRedundantSynthesis): Error calling QccVectorScalarMult()");      goto Error;    }  return_value = 0;  goto Return; Error:  return_value = 1; Return:  QccVectorFree(temp1);  QccVectorFree(temp2);  QccVectorFree(temp3);  return(return_value);}

⌨️ 快捷键说明

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