数据压缩第一次作业

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

1.实验内容

任务:编程实现RGB文件三通道分量的熵计算

测试文件:分辨率为256*256,数据格式为每个像素占用三个字节,BGRBGR……保存,文件大小为196608字节。

2.实验思路

(1)将文件读入数组pix[196608]中

(2)将RGB三通道值分别保存在R[65536]G[65536]B[65536]三个数组中

(3)分别计算RGB三通道不同色度值的像素个数,进而得出频率值,即得到直方图

(4)分别计算RGB三通道熵,H=Σp(x)*log(1/p(x))

3.编程实现

#include<stdio.h>
#include<math.h>
#define N 256
unsigned char R[65536] = { 0 };
unsigned char G[65536] = { 0 };
unsigned char B[65536] = { 0 };

unsigned char pix[196608] = {0};

double rx[256] = { 0 };
double gx[256] = { 0 };
double bx[256] = { 0 };
void main()
{
	float a;
	float red = 0; 
	float green = 0;
	float blue = 0;
	FILE* test;
	test = fopen("C://Users//DELL//Desktop//test.rgb","r");
	if (test == NULL)
	{
		perror("FILE not open/n");
	}
	fread(pix,sizeof(unsigned char),196608,test);
	for (int i = 0, j = 0; i < 196608; i = i + 3)
	{
		B[j] = pix[i];
		G[j] = pix[i+1];
		R[j] = pix[i+2];
		j++;
	}
	for (int i = 0; i < 256; i++)
	{
		for (int j = 0; j < 65536; j++)
		{
			if (R[j] == i)
			{
				rx[i]++;
				
			}
		}
	}
	for (int i = 0; i < 256; i++)
	{
		for (int j = 0; j < 65536; j++)
		{
			if (G[j] == i)
			{
				gx[i]++;
			}
		}
	}
	for (int i = 0; i < 256; i++)
	{
		for (int j = 0; j < 65536; j++)
		{
			if (B[j] == i)
			{
				bx[i]++;
			}
		}
	}
	for (int i = 0; i < 256; i++)
	{
		rx[i] = rx[i] / 65536;
		if (rx[i] != 0)
		{
			a = log(rx[i]) / log(2.0);
			red = red - rx[i] * a;
		}
		gx[i] = gx[i] / 65536;
		if (gx[i] != 0)
		{
			a = log(gx[i]) / log(2.0);
			green = green - gx[i] * a;
		}
		bx[i] = bx[i] / 65536;
		if (bx[i] != 0)
		{
			a = log(bx[i]) / log(2.0);
			blue = blue - bx[i] * a;
		}
	}
	fclose(test);
	printf("R的熵为:%f\n", red);
	printf("G的熵为:%f\n", green);
	printf("B的熵为:%f\n",blue);
	return;
}

运行结果:

 二.元音时域波形和频谱特点

要求:录制三个元音音频,通过音频分析工具软件观察,总结时域波形、频谱的特点

时域波形:

只观察很短时间,我们可以看出,元音的时域波形具有周期性。元音或者辅音中的鼻音,浊擦音以及/l/,/r/等,都具有这种特征。而辅音中清擦音就没有周期性的特性。辅音中的爆破音,则往往表现为一小段静音加一个脉冲。

 频谱:

 频谱与时域波形一样,也有包络和精细结构。语音不是一个单独的频率,而是由许多频率的简谐振动叠加而成的。第一个峰叫基音,其余的峰叫泛音。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值