数据压缩作业【第一周】

本文介绍了如何使用Audaity软件分析浊音、清音和爆破音的时域特性,揭示它们的周期性和共振峰,同时详细展示了RGB和YUV文件通道的概率分布及熵计算。编程部分涉及了RGB和YUV文件的像素数据处理,包括熵的计算和文件转换。
摘要由CSDN通过智能技术生成

作业要求

  1. 使用Audaity软件分析浊音、清音爆破音的时域及频域特性。
  2. 对down.rgb和down.yuv分析三个通道的概率分布,并计算各自的熵。

作业一

类型发生
浊音r
清音s
爆破音p

时域分析

浊音r的时域图
浊音r的时域图
清音s的时域图
在这里插入图片描述
爆破音p的时域图
爆破音p的时域图
分析:浊音的时域波形具有比较明显的周期性。清音的时域波形没有周期性,整体振幅较小。爆破音的时域波形为脉冲波,较为尖锐。

频域分析

浊音r的频域图
浊音r的频域图
清音s的频域图
清音s的频域图
爆破音p的频域图
爆破音p的频域图
分析:浊音共振峰明显,能量集中在低频区域。清音没有明显共振峰,能量集中在高频区域。爆破音没有共振峰,能量集中在低频区域。

作业二

(编程实现)
1.rgb文件按每个像素bgr分量依次存放。
2.yuv格式按照全部像素的y数据块、u数据块和v数据块依次存放。

程序代码

// An highlighted block
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
const char* in_path1 = "down.rgb";
const char* out_path1 = "rgb.txt";
const char* in_path2 = "down.yuv";
const char* out_path2 = "yuv.txt";
int main()
{
	FILE* fp1,*fp2,*rgb,*yuv;
	unsigned char* buffer1 = new unsigned char[256 * 256 * 3];
	unsigned char* buffer2 = new unsigned char[256 * 256 * 1.5];
	double  y[256]{}, u[256]{}, v[256]{},r[256]{}, g[256]{}, b[256]{}, pr[256], pg[256], pb[256], py[256], pu[256], pv[256], hr = 0, hg = 0, hb = 0, hy = 0, hu = 0, hv = 0;
	fopen_s(&fp1, in_path1, "rb");
	fopen_s(&rgb, out_path1, "w");
	fread(buffer1, sizeof(unsigned char), 256 * 256 * 3, fp1);
	for (int i = 0; i < (256 * 256); i++)
	{
		r[buffer1[3*i]]++;
		g[buffer1[3*i+1]]++;
		b[buffer1[3*i+2]]++;
	}
	for (int j = 0; j < 256; j++)
	{
		pr[j] = r[j] / (256 * 256);
		pg[j] = g[j] / (256 * 256);
		pb[j] = b[j] / (256 * 256);
	}
	for (int j = 0; j < 256; j++)
	{
		if (pr[j] != 0)
		{
			hr = hr + pr[j]* log2(1 /pr[j]);
		}
		if (pg[j] != 0)
		{
			hg = hg + pg[j] * log2(1 /pg[j]);
		}
		if (pb[j] != 0)
		{
			hb = hb + pb[j] * log2(1 / pb[j]);
		}
	}
	cout << "r熵为" << hr << endl;
	cout << "g熵为" << hg << endl;
	cout << "b熵为" << hb << endl;
	fprintf(rgb, "value\tr\tg\tb\n");
	for (int i = 0; i < 256; i++)
	{
		fprintf(rgb, "%d\t%f\t%f\t%f\n", i, pr[i], pg[i], pb[i]);
	}
	fclose(fp1);
	fclose(rgb);
	fopen_s(&fp2, in_path2, "rb");
	fopen_s(&yuv, out_path2, "w");
	fread(buffer2, sizeof(unsigned char), 256 * 256 * 1.5, fp2);
	for (int i = 0; i < (256 * 256 ); i++)
	{
		y[buffer2[i]]++;
	}
	for (int i = (256 * 256); i < (256 * 256 * 1.25); i++)
	{
		u[buffer2[i]]++;
		v[buffer2[i+16384]]++;
	}
	for (int j = 0; j < 256; j++)
	{
		py[j] = y[j] / (256 * 256);
		pu[j] = u[j] / (256 * 256 / 4);
		pv[j] = v[j] / (256 * 256 / 4);
	}
	for (int j = 0; j < 256; j++)
	{
		if (py[j] != 0)
		{
			hy = hy + py[j] * log2(1 / py[j]);
		}
		if (pu[j] != 0)
		{
			hu = hu + pu[j] * log2(1 / pu[j]);
		}
		if (pv[j] != 0)
		{
			hv = hv + pv[j] * log2(1 / pv[j]);
		}
	}
	cout << "y熵为" << hy << endl;
	cout << "u熵为" << hu << endl;
	cout << "v熵为" << hv << endl;
	fprintf(rgb, "value\ty\tu\tv\n");
	for (int i = 0; i < 256; i++)
	{
		fprintf(yuv, "%d\t%f\t%f\t%f\n", i, py[i], pu[i], pv[i]);
	}
	fclose(fp2);
	fclose(yuv);
	system("pause");
	return 0;
}

程序结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值