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

📄 lazy_wavlet.c

📁 spiht的压缩解压缩c编写的
💻 C
字号:
#include "spiht.h"
#include "spihtdecode.h"

int QccWAVWaveletLWT(const QccVector input_signal,
                     QccVector output_signal,
                     int signal_length,
                     int signal_origin,
                     int subsample_pattern)
{
  int index;
  int midpoint;
  int phase = (signal_origin % 2) ^ (subsample_pattern & 1);

  if (input_signal == NULL)
    return(0);
  if (output_signal == NULL)
    return(0);

  if (signal_length < 2)
    {
      QccVectorCopy(output_signal, input_signal, signal_length);
      return(0);
    }

  midpoint = 
    QccWAVWaveletDWTSubbandLength(signal_length, 1, 0,
                                  signal_origin, subsample_pattern);

  if (!phase)
    {
      for (index = 0; index < signal_length; index += 2)
        output_signal[index >> 1] = input_signal[index];
      
      for (index = 1; index < signal_length; index += 2)
        output_signal[midpoint + (index >> 1)] = input_signal[index];
    }
  else
    {
      for (index = 1; index < signal_length; index += 2)
        output_signal[index >> 1] = input_signal[index];
      
      for (index = 0; index < signal_length; index += 2)
        output_signal[midpoint + (index >> 1)] = input_signal[index];
    }

  return(0);
}

int QccWAVWaveletInverseLWT(const QccVector input_signal,
                            QccVector output_signal,
                            int signal_length,
                            int signal_origin,
                            int subsample_pattern)
{
  int index;
  int midpoint;
  int phase = (signal_origin % 2) ^ (subsample_pattern & 1);

  if (input_signal == NULL)
    return(0);
  if (output_signal == NULL)
    return(0);

  if (signal_length < 2)
    {
      QccVectorCopy(output_signal, input_signal, signal_length);
      return(0);
    }

  midpoint = 
    QccWAVWaveletDWTSubbandLength(signal_length, 1, 0,
                                  signal_origin, subsample_pattern);

  if (!phase)
    {
      for (index = 0; index < signal_length; index += 2)
        output_signal[index] = input_signal[index >> 1];
      
      for (index = 1; index < signal_length; index += 2)
        output_signal[index] = input_signal[midpoint + (index >> 1)];
    }
  else
    {
      for (index = 1; index < signal_length; index += 2)
        output_signal[index] = input_signal[index >> 1];
      
      for (index = 0; index < signal_length; index += 2)
        output_signal[index] = input_signal[midpoint + (index >> 1)];
    }

  return(0);
}

⌨️ 快捷键说明

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