语音分析和RGB三通道熵的计算

  • (一)三个元音音频分析

    1. /ai/

      • 时域波形

        在这里插入图片描述

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PW7QzDvx-1648130691941)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220301211059856.png)]

        从时域波形来看,音频信号具有短时平稳性,该部分周期为10ms。

      • 频域波形

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8yeueW7z-1648130691943)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220301211112879.png)]

        频谱在230Hz、370Hz、618Hz处产生共振峰,能量集中在231Hz~1390Hz。

    2. /ɔ/

      • 时域波形

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hSA0ycUE-1648130691944)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20220301211122847.png)]

        在这里插入图片描述

        音频信号具有短时平稳性,周期在10ms左右。

      • 频域波形

        在这里插入图片描述

        频谱在232Hz、356Hz、519Hz出现共振峰,能量集中在232Hz~1007Hz附近。

    3. /e/

      • 时域波形

        时域波形具有短时平稳性,周期在10ms左右。

      • 频域波形

        频谱在222Hz、344Hz、582Hz出现共振峰,能量集中在222Hz~812Hz附近。

        对比单元音和双元音的频谱发现,单元音的共振峰一般是单峰,而双元音的共振峰出现双峰;单元音的能量集中在200-1000Hz,双元音的能量集中在200-1400Hz。

  • (二)RGB三通道的熵计算

    1. 相关原理

      • 测试文件:test.rgb,大小为256*256

      • RGB文件中数据的存储形式是BGRBGRBGR…,将BRG的数值分别存储在3个256*256大小的数组中并统计0~255的数量,统计概率后计算三通道的熵。

      • 离散随机变量信息熵的计算公式:
        H ( X ) = − ∑ x i ∈ χ P ( x i ) l o g 2 P ( x i ) {H(X)=-\sum_{x_i\in\chi} P(x_i)log_2P(x_i)} H(X)=xiχP(xi)log2P(xi)

    2. 代码实现

      /*
      * 该测试文件分辨率为256*256,数据格式为每个像素占用3字节,BGRBGR...保存
      * 计算RGB文件三通道分量的熵。
      */
      #include <iostream>
      const int width = 256;
      const int height = 256;
      const int size = width * height;
      int main()
      {
          FILE* fp;
          fopen_s(&fp, "test.rgb", "rb");//只读二进制形式打开rgb文件
      
          unsigned char* buffer = (unsigned char*)malloc(sizeof(unsigned char) * size * 3);
          fread(buffer, sizeof(unsigned char), size*3, fp);//读入缓存区buffer
      
          int numR[256] = { 0 }, numG[256] = { 0 }, numB[256] = { 0 };//存放0~255的数量
          unsigned char B[size] = { 0 }, G[size] = { 0 }, R[size] = { 0 };//存放各位置的RGB值
          double freqR[256] = { 0 }, freqG[256] = { 0 }, freqB[256] = { 0 };
      
          for (int i = 0; i < size; i++)
          {
              B[i] = *(buffer + 3 * i);
              G[i] = *(buffer + 3 * i + 1);
              R[i] = *(buffer + 3 * i + 2);
          }
      
          /统计每个通道0~255的数量
          for (int i = 0; i < size; i++)
          {
              numR[R[i]]++;
              numG[G[i]]++;
              numB[B[i]]++;
          }
      
          //统计概率
          for (int i = 0; i < 256; i++)
          {
              freqR[i] = double(numR[i]) / size;
              freqG[i] = double(numG[i]) / size;
              freqB[i] = double(numB[i]) / size;
          }
      
          //计算各通道的熵
          double HR = 0, HG = 0, HB = 0;
          for (int i = 0; i < 256; i++)
          {
              if (freqR[i] != 0)
              {
                  HR = HR - freqR[i] * log(freqR[i]) / log(2);
              }
              if (freqG[i] != 0)
              {
                  HG = HG - freqG[i] * log(freqG[i]) / log(2);
              }
              if (freqB[i] != 0) 
              {
                  HB = HB - freqB[i] * log(freqB[i]) / log(2);
              }
          }
          
          printf("passage R's entropy is %f\n", HR);
          printf("passage G's entropy is %f\n", HG);
          printf("passage B's entropy is %f\n", HB);
      
          free(buffer);
          fclose(fp);
      
      }
      
    3. 实验结果

      passage R's entropy is 7.229553
      passage G's entropy is 7.178462
      passage B's entropy is 6.856861
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值