失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [数据压缩作业1]利用Audacity分析浊音 清音 爆破音|RGB文件三通道分量的熵计算

[数据压缩作业1]利用Audacity分析浊音 清音 爆破音|RGB文件三通道分量的熵计算

时间:2021-01-31 18:30:55

相关推荐

[数据压缩作业1]利用Audacity分析浊音 清音 爆破音|RGB文件三通道分量的熵计算

一. 利用Audacity分析浊音、清音、爆破音

1. 音频分析工具

本次实验使用软件Audacity

2. 分析时域波形和频谱

(1)浊音

以a为例

时域波形

频谱

结论:浊音时域具有周期性。在频域上能量集中在低频,具有明显的共振峰的特性。

(2)清音

以f为例

时域波形

频谱

结论:清音在时域上无明显的周期性,在频域上高频部分能量分布更多,频谱分布更为平均、随机,符合其类似于白噪声的特征。

(3)爆破音

以b为例

时域波形

频谱

结论:爆破音时域波形抖动幅度较大,有明显突起脉冲。在频域上能量主要集中在低频,低频到高频呈下降趋势。

二.RGB文件三通道分量的熵计算

测试文件test.rgb分辨率为256*256,数据格式为每个像素占用3字节,BGRBGR...保存。

1.具体步骤

(1)拿到文件可以先计算一下文件大小是否为宽*高*3字节。

256*256*3=196608字节

(2)读入rgb文件,把内容保存到all[196608]数组中

可以参考如下

C语言fread和fwrite的用法详解(以数据块的形式读写文件) ()/view/2071.html如果使用fopen报错,可以参考如下:

(2条消息) VS 报错error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead._mini猿要成长QAQ的博客-CSDN博客_fopen unsafe/sgfmby1994/article/details/80432205

(3)将RGB三通道值分别保存在r[65536]、g[65536]、b[65536]三个数组中

(4)统计RGB三通道不同色度值的个数概率分布→各自的

2.代码

#include <iostream>#include<stdio.h>#include <stdlib.h>#include<math.h>int main(){int size = 256 * 256; unsigned char all[196608] = { 0 };unsigned char r[65536] = { 0 }; //R、G、B三通道值unsigned char g[65536] = { 0 };unsigned char b[65536] = { 0 };double Pr[256] = { 0 }, Pg[256] = { 0 }, Pb[256] = { 0 };//R、G、B的概率分量double Hr = 0, Hg = 0, Hb = 0;//R、G、B的熵FILE* fp;fp=fopen("D://大三下//数据压缩//实验一//test.rgb", "rb");//从文件读取内容并保存到数组allfread(all, sizeof(unsigned char), size*3, fp);for (int i = 0,j = 0 ; i < size * 3 ; i += 3){//数据格式为每个像素占用3字节,BGRBGR...保存b[j] = all[i];g[j] = all[i + 1];r[j] = all[i + 2];j++;}for (int i = 0; i < 256; i++) //统计RGB三通道不同色度值的个数{for (int j = 0; j < size; j++){if (b[j] == i){Pb[i]++;}if(g[j] == i){Pg[i]++;}if(r[j] == i){Pr[i]++;}}}for (int i = 0; i < 256; i++){Pb[i] /= size; //统计RGB三通道不同色度值的概率if (Pb[i] != 0){Hb-= Pb[i] * (log(Pb[i])/log(2.0)); //计算B的熵}Pg[i] /= size;if (Pg[i] != 0){Hg -= Pg[i] * (log(Pg[i]) / log(2.0)); //计算G的熵}Pr[i] /= size;if (Pr[i] != 0){Hr -= Pr[i] * (log(Pr[i]) / log(2.0)); //计算R的熵}}printf("H(B)=%lf\n", Hb);printf("H(G)=%lf\n", Hg);printf("H(R)=%lf\n", Hr);fclose(fp);}

运行结果:

如果觉得《[数据压缩作业1]利用Audacity分析浊音 清音 爆破音|RGB文件三通道分量的熵计算》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。