作业要求
- 使用Audaity软件分析浊音、清音爆破音的时域及频域特性。
- 对down.rgb和down.yuv分析三个通道的概率分布,并计算各自的熵。
作业一
类型 | 发生 |
---|---|
浊音 | r |
清音 | s |
爆破音 | p |
时域分析
浊音r的时域图
清音s的时域图
爆破音p的时域图
分析:浊音的时域波形具有比较明显的周期性。清音的时域波形没有周期性,整体振幅较小。爆破音的时域波形为脉冲波,较为尖锐。
频域分析
浊音r的频域图
清音s的频域图
爆破音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;
}
程序结果