lifting_cdf9_7.c
来自「spiht的压缩解压缩c编写的」· C语言 代码 · 共 964 行 · 第 1/3 页
C
964 行
#include "spiht.h"
#include "spihtdecode.h"
#define ALPHA -1.58615986717275
#define BETA -0.05297864003258
#define GAMMA 0.88293362717904
#define DELTA 0.44350482244527
#define EPSILON 1.14960430535816
static void QccWAVCDF97AnalysisSymmetricEvenEven(QccVector signal,
int signal_length)
{
int index;
for (index = 1; index < signal_length - 2; index += 2)
signal[index] +=
ALPHA * (signal[index - 1] + signal[index + 1]);
signal[signal_length - 1] +=
2 * ALPHA * signal[signal_length - 2];
signal[0] +=
2 * BETA * signal[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] +=
GAMMA * (signal[index - 1] + signal[index + 1]);
signal[signal_length - 1] +=
2 * GAMMA * signal[signal_length - 2];
signal[0] =
EPSILON * (signal[0] +
2 * DELTA * signal[1]);
for (index = 2; index < signal_length; index += 2)
signal[index] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
for (index = 1; index < signal_length; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisSymmetricEvenOdd(QccVector signal,
int signal_length)
{
int index;
signal[0] +=
2 * ALPHA * signal[1];
for (index = 2; index < signal_length; index += 2)
signal[index] +=
ALPHA * (signal[index - 1] + signal[index + 1]);
for (index = 1; index < signal_length - 2; index += 2)
signal[index] +=
BETA * (signal[index + 1] + signal[index - 1]);
signal[signal_length - 1] +=
2 * BETA * signal[signal_length - 2];
signal[0] +=
2 * GAMMA * 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 - 2; index += 2)
signal[index] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
signal[signal_length - 1] =
EPSILON * (signal[signal_length - 1] +
2 * DELTA * signal[signal_length - 2]);
for (index = 0; index < signal_length; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisSymmetricOddEven(QccVector signal,
int signal_length)
{
int index;
for (index = 1; index < signal_length - 1; index += 2)
signal[index] +=
ALPHA * (signal[index - 1] + signal[index + 1]);
signal[0] +=
2 * BETA * signal[1];
for (index = 2; index < signal_length - 2; index += 2)
signal[index] +=
BETA * (signal[index + 1] + signal[index - 1]);
signal[signal_length - 1] +=
2 * BETA * signal[signal_length - 2];
for (index = 1; index < signal_length - 1; index += 2)
signal[index] +=
GAMMA * (signal[index - 1] + signal[index + 1]);
signal[0] =
EPSILON * (signal[0] +
2 * DELTA * signal[1]);
for (index = 2; index < signal_length - 2; index += 2)
signal[index] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
signal[signal_length - 1] =
EPSILON * (signal[signal_length - 1] +
2 * DELTA * signal[signal_length - 2]);
for (index = 1; index < signal_length - 1; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisSymmetricOddOdd(QccVector signal,
int signal_length)
{
int index;
signal[0] +=
2 * ALPHA * signal[1];
for (index = 2; index < signal_length - 2; index += 2)
signal[index] +=
ALPHA * (signal[index - 1] + signal[index + 1]);
signal[signal_length - 1] +=
2 * ALPHA * signal[signal_length - 2];
for (index = 1; index < signal_length; index += 2)
signal[index] +=
BETA * (signal[index + 1] + signal[index - 1]);
signal[0] +=
2 * GAMMA * signal[1];
for (index = 2; index < signal_length - 2; index += 2)
signal[index] +=
GAMMA * (signal[index - 1] + signal[index + 1]);
signal[signal_length - 1] +=
2 * GAMMA * signal[signal_length - 2];
for (index = 1; index < signal_length; index += 2)
signal[index] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
for (index = 0; index < signal_length; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisPeriodicEvenEven(QccVector signal,
int signal_length)
{
int index;
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]);
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] +=
GAMMA * (signal[index - 1] + signal[index + 1]);
signal[signal_length - 1] +=
GAMMA * (signal[signal_length - 2] + signal[0]);
signal[0] =
EPSILON * (signal[0] +
DELTA * (signal[1] + signal[signal_length - 1]));
for (index = 2; index < signal_length; index += 2)
signal[index] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
for (index = 1; index < signal_length; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisPeriodicEvenOdd(QccVector signal,
int signal_length)
{
int index;
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]);
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] +=
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] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
signal[signal_length - 1] =
EPSILON * (signal[signal_length - 1] +
DELTA * (signal[0] + signal[signal_length - 2]));
for (index = 0; index < signal_length; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisBoundaryEvenEven(QccVector signal,
int signal_length)
{
int index;
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]);
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] +=
GAMMA * (signal[index - 1] + signal[index + 1]);
signal[signal_length - 1] +=
GAMMA * (3*signal[signal_length - 2] - signal[signal_length - 4]);
signal[0] =
EPSILON * (signal[0] +
DELTA * (3*signal[1] - signal[3]));
for (index = 2; index < signal_length; index += 2)
signal[index] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
for (index = 1; index < signal_length; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisBoundaryEvenOdd(QccVector signal,
int signal_length)
{
int index;
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]);
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] +=
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] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
signal[signal_length - 1] =
EPSILON * (signal[signal_length - 1] +
DELTA * (3*signal[signal_length - 2] -
signal[signal_length - 4]));
for (index = 0; index < signal_length; index += 2)
signal[index] /= (-EPSILON);
}
static void QccWAVCDF97AnalysisBoundaryOddEven(QccVector signal,
int signal_length)
{
int index;
for (index = 1; index < signal_length; index += 2)
signal[index] +=
ALPHA * (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] +=
GAMMA * (signal[index - 1] + signal[index + 1]);
signal[0] =
EPSILON * (signal[0] +
DELTA * (3*signal[1] - signal[3]));
for (index = 2; index < signal_length - 1; index += 2)
signal[index] =
EPSILON * (signal[index] +
DELTA * (signal[index + 1] + signal[index - 1]));
signal[signal_length - 1] =
EPSILON * (signal[signal_length - 1] +
DELTA * (3*signal[signal_length - 2] -
signal[signal_length - 4]));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?