元音音频时域频域特点 & RGB文件三通道熵计算

一、元音

元音是在发音过程中由气流通过口腔而不受阻碍发出的音。发元音时,气流从肺部通过声门冲击声带,使声带发出均匀震动,然后震音气流不受阻碍地通过口腔、鼻腔,通过舌、唇的调节而发出不同的声音。发元音时声带必然震动,这叫做浊音。也有的语言发元音时声带不振动,发出清元音

二、时域

从上至下依次为元音A、E、I的时域波形

特点:呈现一定周期性,短时平均过零率低。

三、频域

从上至下依次为元音A、E、I的频谱

特点:可看出有明显共振峰,且能量集中在低频区域,短时能量较高。

四、RGB文件三通道熵计算

4.1 实验要求

编程实现RGB文件三通道分量的熵计算。该测试文件分辨率为256 * 256,数据格式为每个像素占用3字节,BGRBGR...保存。拿到文件可以先计算一下文件大小是否为宽 * 高 * 3字节。

查看文件大小为196608字节,196608=256 * 256 * 3,文件大小为宽 * 高 * 3字节。

 知道文件分辨率和每像素占用字节数后,在python中打开test.rgb文件得到图像。

import cv2 as cv
import numpy as np
if __name__ == '__main__':

    f = open("D://test.rgb", "rb")
    data = f.read()
    f.close()
    data = [int(x) for x in data]
    data = np.array(data).reshape((256, 256, 3)).astype(np.uint8)
    cv.imshow("data", data)
    cv.waitKey()

 

4.2 实验代码

#include<iostream>
#include<math.h>
#include<malloc.h>

const int width = 256;
const int height = 256;

int main()
{
    FILE* fp;
    fopen_s(&fp, "D:\\test.rgb", "rb");
    unsigned char* buf = (unsigned char*)malloc(sizeof(unsigned char) * width * height * 3); //分配空间
    fread(buf, 1, width * height * 3, fp);

    //存放每个像素RGB值
    unsigned char r[width * height] = {0}; 
    unsigned char g[width * height] = {0};
    unsigned char b[width * height] = {0};

    //存放每个通道的数量
    int r_count[256] = {0};
    int g_count[256] = {0};
    int b_count[256] = {0}; 

    //RGB频率
    double r_f[256] = {0};
    double g_f[256] = {0};
    double b_f[256] = {0};

    //RGB熵
    double r_s = 0;
    double g_s = 0;
    double b_s = 0;

    //存入每个像素的RGB值
    for (int i = 0; i < width * height; i++)
    {
        b[i] = *(buf + 3 * i);
        g[i] = *(buf + 3 * i + 1);
        r[i] = *(buf + 3 * i + 2);
    }

    //统计三通道各像素值的总和
    for (int i = 0; i < 256; i++)
    {
        for (int j = 0; j < width * height; j++)
        {
            if (r[j] == i) { r_count[i]++; }
            if (g[j] == i) { g_count[i]++; }
            if (b[j] == i) { b_count[i]++; }
        }
    }


    //计算三通道频率
    for (int i = 0; i < 256; i++)
    {
        r_f[i] = double(r_count[i]) / (width * height);
        g_f[i] = double(g_count[i]) / (width * height);
        b_f[i] = double(b_count[i]) / (width * height);
    }

    //计算三通道的熵
    for (int i = 0; i < 256; i++)
    {
        if (r_f[i] != 0) { r_s -= r_f[i] * log(r_f[i]) / log(2); }
        if (g_f[i] != 0) { g_s -= g_f[i] * log(g_f[i]) / log(2); }
        if (b_f[i] != 0) { b_s -= b_f[i] * log(b_f[i]) / log(2); }
    }

    printf("r_entropy:%f\n", r_s);
    printf("g_entropy:%f\n", g_s);
    printf("b_entropy:%f\n", b_s);
 
    fclose(fp);
    return 0;

}

4.3 实验结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值