数据压缩 第一周作业
语音分析
(1)浊音u
时域:浊音u的时域波形具有比较明显的周期性,为准周期波,它具有短时平稳性,大约在10ms~30ms内特性相对平稳。
频域:浊音u有明显的共振峰,不同的浊音共振峰有所不同。
(2)清音x
时域:清音x的波形整体振幅小于准周期波,为噪声波。
频域:清音x无共振峰,但能量在某些频率区域比较集中。
(3)爆破音t
时域:爆破音t为脉冲波,较为尖锐。
频域:爆破音t无共振峰,频率分布较为均匀。
图像三通道概率分布及熵
(1)yuv图像
1.分别统计Y、U、V通道各个灰度值的像素个数
2.分别计算Y、U、V通道各个灰度值的概率
3.分别计算Y、U、V通道的熵,代码及结果见下方
(2)rgb图像
1.分别统计R、G、B通道各个灰度值的像素个数
2.分别计算R、G、B通道各个灰度值的概率
3.分别计算R、G、B通道的熵,代码及结果见下方
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
FILE* fp1, * fp2;
double Hy = 0.0, Hu=0.0, Hv=0.0, Hr=0.0, Hg=0.0, Hb=0.0;
unsigned char* buffer0 = new unsigned char[256 * 256 * 1.5];
unsigned char* buffer1 = new unsigned char[256 * 256 * 3];
double buffer0y[256]{}, buffer0u[256]{}, buffer0v[256]{}, buffer1r[256]{}, buffer1g[256]{}, buffer1b[256]{};
fopen_s(&fp1, "down.yuv", "rb");
fopen_s(&fp2, "down.rgb", "rb");
fread(buffer0, sizeof(unsigned char), 256 * 256 * 1.5, fp1);
for (int i = 0; i < (256 * 256); i++)
{
buffer0y[buffer0[i]]++;
}
for (int j = 0;j < 256;j++)
{
buffer0y[j] = buffer0y[j] / (256 * 256);
if (buffer0y[j] != 0)
{
Hy = Hy + buffer0y[j] * log2(1 / buffer0y[j]);
}
}
for (int i = (256 * 256); i < (256 * 256*1.25); i++)
{
buffer0u[buffer0[i]]++;
buffer0v[buffer0[i+16384]]++;
}
for (int j = 0;j < 256;j++)
{
buffer0u[j] = buffer0u[j] / (256 * 256 * 0.25);
if (buffer0u[j] != 0)
{
Hu = Hu + buffer0u[j] * log2(1 / buffer0u[j]);
}
buffer0v[j] = buffer0v[j] / (256 * 256 * 0.25);
if (buffer0v[j] != 0)
{
Hv = Hv + buffer0v[j] * log2(1 / buffer0v[j]);
}
}
fread(buffer1, sizeof(unsigned char), 256 * 256 * 3, fp2);
for (int i = 0; i < (256 * 256); i++)
{
buffer1b[buffer1[i*3]]++;
buffer1g[buffer1[i*3+1]]++;
buffer1r[buffer1[i*3+2]]++;
}
for (int j = 0;j < 256;j++)
{
buffer1r[j] = buffer1r[j]/ (256 * 256);
if (buffer1r[j] != 0)
{
Hr = Hr + buffer1r[j] * log2(1 / buffer1r[j]);
}
buffer1g[j] = buffer1g[j] / (256 * 256);
if (buffer1g[j] != 0)
{
Hg = Hg + buffer1g[j] * log2(1 / buffer1g[j]);
}
buffer1b[j] = buffer1b[j] / (256 * 256);
if (buffer1b[j] != 0)
{
Hb = Hb + buffer1b[j] * log2(1 / buffer1b[j]);
}
}
fclose(fp1);
fclose(fp2);
cout << "Y通道的熵为" << Hy << endl;
cout << "U通道的熵为" << Hu << endl;
cout << "V通道的熵为" << Hv << endl;
cout << "B通道的熵为" << Hb << endl;
cout << "G通道的熵为" << Hg << endl;
cout << "R通道的熵为" << Hr << endl;
return (0);
}