📄 lifting_cdf5_3.c
字号:
} break; } return(0);}static void QccWAVCDF53SynthesisSymmetricEvenEven(QccVector signal, int signal_length){ int index; for (index = 1; index < signal_length; index += 2) signal[index] *= -M_SQRT2; signal[0] = signal[0] / M_SQRT2 - signal[1] / 2; for (index = 2; index < signal_length; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; for (index = 1; index < signal_length - 2; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; signal[signal_length - 1] += signal[signal_length - 2];}static void QccWAVCDF53SynthesisSymmetricEvenOdd(QccVector signal, int signal_length){ int index; for (index = 0; index < signal_length; index += 2) signal[index] *= -M_SQRT2; for (index = 1; index < signal_length - 2; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; signal[signal_length - 1] = signal[signal_length - 1] / M_SQRT2 - signal[signal_length - 2] / 2; signal[0] += signal[1]; for (index = 2; index < signal_length; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; }static void QccWAVCDF53SynthesisSymmetricOddEven(QccVector signal, int signal_length){ int index; for (index = 1; index < signal_length; index += 2) signal[index] *= -M_SQRT2; signal[0] = signal[0] / M_SQRT2 - signal[1] / 2; for (index = 2; index < signal_length - 2; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; signal[signal_length - 1] = signal[signal_length - 1] / M_SQRT2 - signal[signal_length - 2] / 2; for (index = 1; index < signal_length; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; }static void QccWAVCDF53SynthesisSymmetricOddOdd(QccVector signal, int signal_length){ int index; for (index = 0; index < signal_length; index += 2) signal[index] *= -M_SQRT2; for (index = 1; index < signal_length; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; signal[0] += signal[1]; for (index = 2; index < signal_length - 2; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; signal[signal_length - 1] += signal[signal_length - 2]; }static void QccWAVCDF53SynthesisPeriodicEvenEven(QccVector signal, int signal_length){ int index; for (index = 1; index < signal_length; index += 2) signal[index] *= -M_SQRT2; signal[0] = signal[0] / M_SQRT2 - (signal[1] + signal[signal_length - 1]) / 4; for (index = 2; index < signal_length; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; for (index = 1; index < signal_length - 2; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; signal[signal_length - 1] += (signal[signal_length - 2] + signal[0]) / 2;}static void QccWAVCDF53SynthesisPeriodicEvenOdd(QccVector signal, int signal_length){ int index; for (index = 0; index < signal_length; index += 2) signal[index] *= -M_SQRT2; for (index = 1; index < signal_length - 1; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; signal[signal_length - 1] = signal[signal_length - 1] / M_SQRT2 - (signal[0] + signal[signal_length - 2]) / 4; signal[0] += (signal[signal_length - 1] + signal[1]) / 2; for (index = 2; index < signal_length; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2;}static void QccWAVCDF53SynthesisBoundaryEvenEven(QccVector signal, int signal_length){ int index; for (index = 1; index < signal_length; index += 2) signal[index] *= -M_SQRT2; signal[0] = signal[0] / M_SQRT2 - (3 * signal[1] - signal[3]) / 4; for (index = 2; index < signal_length; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; for (index = 1; index < signal_length - 2; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; signal[signal_length - 1] += (3 * signal[signal_length - 2] - signal[signal_length - 4]) / 2;}static void QccWAVCDF53SynthesisBoundaryEvenOdd(QccVector signal, int signal_length){ int index; for (index = 0; index < signal_length; index += 2) signal[index] *= -M_SQRT2; for (index = 1; index < signal_length - 2; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; signal[signal_length - 1] = signal[signal_length - 1] / M_SQRT2 - (3 * signal[signal_length - 2] - signal[signal_length - 4]) / 4; signal[0] += (3 * signal[1] - signal[3]) / 2; for (index = 2; index < signal_length; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2;}static void QccWAVCDF53SynthesisBoundaryOddEven(QccVector signal, int signal_length){ int index; for (index = 1; index < signal_length; index += 2) signal[index] *= -M_SQRT2; signal[0] = signal[0] / M_SQRT2 - (3 * signal[1] - signal[3]) / 4; for (index = 2; index < signal_length - 2; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; signal[signal_length - 1] = signal[signal_length - 1] / M_SQRT2 - (3 * signal[signal_length - 2] - signal[signal_length - 4]) / 4; for (index = 1; index < signal_length; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; }static void QccWAVCDF53SynthesisBoundaryOddOdd(QccVector signal, int signal_length){ int index; for (index = 0; index < signal_length; index += 2) signal[index] *= -M_SQRT2; for (index = 1; index < signal_length; index += 2) signal[index] = signal[index] / M_SQRT2 - (signal[index + 1] + signal[index - 1]) / 4; signal[0] += (3 * signal[1] - signal[3]) / 2; for (index = 2; index < signal_length - 2; index += 2) signal[index] += (signal[index - 1] + signal[index + 1]) / 2; signal[signal_length - 1] += (3 * signal[signal_length - 2] - signal[signal_length - 4]) / 2; }int QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3(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: QccWAVCDF53SynthesisSymmetricEvenEven(signal, signal_length); break; case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION: QccWAVCDF53SynthesisPeriodicEvenEven(signal, signal_length); break; case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET: QccWAVCDF53SynthesisBoundaryEvenEven(signal, signal_length); break; default: QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3): Undefined boundary method"); return(1); } break; case 1: switch (boundary) { case QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION: QccWAVCDF53SynthesisSymmetricOddEven(signal, signal_length); break; case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION: QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3): Signal length must be even for periodic extension"); return(1); break; case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET: QccWAVCDF53SynthesisBoundaryOddEven(signal, signal_length); break; default: QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3): Undefined boundary method"); return(1); } break; } break; case QCCWAVWAVELET_PHASE_ODD: switch (signal_length % 2) { case 0: switch (boundary) { case QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION: QccWAVCDF53SynthesisSymmetricEvenOdd(signal, signal_length); break; case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION: QccWAVCDF53SynthesisPeriodicEvenOdd(signal, signal_length); break; case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET: QccWAVCDF53SynthesisBoundaryEvenOdd(signal, signal_length); break; default: QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3): Undefined boundary method"); return(1); } break; case 1: switch (boundary) { case QCCWAVWAVELET_BOUNDARY_SYMMETRIC_EXTENSION: QccWAVCDF53SynthesisSymmetricOddOdd(signal, signal_length); break; case QCCWAVWAVELET_BOUNDARY_PERIODIC_EXTENSION: QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3): Signal length must be even for periodic extension"); return(1); break; case QCCWAVWAVELET_BOUNDARY_BOUNDARY_WAVELET: QccWAVCDF53SynthesisBoundaryOddOdd(signal, signal_length); break; default: QccErrorAddMessage("(QccWAVLiftingSynthesisCohenDaubechiesFeauveau5_3): Undefined boundary method"); return(1); } break; } break; } return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -