快速哈达玛变换

快速哈达玛变换

在生成哈达玛矩阵的文章中我已经提到了沃尔什函数,其实也就是快速哈达玛变换,他是针对与压缩感知中压缩过程中对哈达玛矩阵的行进行一个变换,这么做可以更好的压缩图像,并更好的进行解压。

快速哈达玛矩阵的代码实现

简单的实现就是写成二进制表示没然后保存反向格雷码就是新矩阵所对应的行号。

#include <stdio.h>
#include <math.h>
#define M 128

int num = 1;    //需要转换的数
int number = 0;
int Gray_number(int num_h)
{

    int  binary[30];//保存反向二进制的值 
    int  Gray[30];//保存反向格雷码 

    
    int M_m = M - 1;
    int M_num = 0;
    while (1)
    {
        M_m = M_m / 2;
        M_num++;
        printf("M_num=%d", M_num);
        if (M_m == 0)
        {
            break;
        }
    }
    
    printf("num_h=%d", num_h);
    printf("\n");
    int i = 0;
    while (1)
    {
        binary[i] = num_h % 2;
        printf("\ni=%d  binary[i]=%d\n", i, binary[i]);
        num_h = num_h / 2;
        i++;
        if (num_h == 0)
        {
            break;
        }
    }
    ///
    printf("\ni=%d\n", i);
    for (i = i; i<M_num; i++)
    {
        binary[i] = 0;
        printf("\ni=%d  binary[i]=%d\n", i, binary[i]);
    }
    
    int j = 0;
    for (j = 0; j<i; j++)
    {
        printf("binary[j]=%d   %d\n", binary[j], j);
    }
    printf("\n%d", i);
    //得到反向的格雷码
    int k = 0, Gray_num = 0;
    for (k = 0; k<i - 1; k++)
    {
        if ((binary[k] - binary[k + 1]) == 0)
        {
            Gray_num = 0;
        }
        else
        {
            Gray_num = 1;
        }
        Gray[k] = Gray_num;
    }
    Gray[i - 1] = binary[i - 1];
    printf("\nGray\n", i);
    for (j = 0; j<i; j++)
    {
        printf("%d", Gray[j]);
    }
    printf("\nlast number\n", i);
    for (j = 0; j<i; j++)
    {
        number += Gray[j] * pow((double)2, (int)(i - j - 1));
    }
    printf("number=%d", number);
    printf("\n");
    return number;
}

int main()
{
    Gray_number(num);
    printf("\n");
    printf("\n");
    printf("\n");
    printf("number=%d", number);
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值