目录
-
浊音频谱分析
语音学中,将发音时声带振动的音称为浊音,声带不振动的音称为清音。发浊音时,气流通过声门时使声带发生振动,产生准周期激励脉冲串,这个脉冲串的周期就称为基因周期,其倒数称为基因频率。这里使用Audacity软件来对浊音进行时域和频谱分析,选择了“a”、“o”、“e”三个音,分析结果如下:
“a”的时域波形:
频谱分析:
“o”的时域波形:
频谱分析:
“e”的时域波形:
频谱分析:
由图片可以看出,浊音在时域都有明显周期性,频谱分析中,浊音能量在低频处比较集中且幅度大。
-
图片求取RGB熵
一幅RGB图像有三个通道,即红、绿、蓝,图像的每一个像素点都由这三个值来表示,通过编程可以实现分别计算一幅RGB图像的R值、G值和B值的熵。这里分析的图片文件为“test.rgb”,大小为256*256,里面的三个通道的值的排列顺序为:BGRBGRB……下面给出代码:
#include<math.h>
#include<iostream>
using namespace std;
int main()
{
double count[256] = { }; //计数,计算概率
double en[3] = { }; //对应存储B G R的熵
double iq;
int rgb;
int size = 256 * 256, total = 256 * 256 * 3;
unsigned char* RGB_buffer_in;
RGB_buffer_in = new unsigned char[total]; //存储图片的RGB值
FILE* fp;
fopen_s(&fp,"D:/AUniversity/数据压缩/test.rgb", "rb"); //读取图片文件
if (fp == NULL)
{
printf("File not open!/n");
}
fread(RGB_buffer_in, sizeof(unsigned char), total, fp); //将RGB值写入RGB_buffer_in
for (rgb = 0; rgb < 3; rgb++) //依次提取图像中的所有B值,G值,R值
{
for (int i = rgb; i < total; i+=3)
{
int m = RGB_buffer_in[i];
count[m]++; //得到不同灰度值的对应数量
}
for (int j = 0; j < 256; j++)
{
count[j] = count[j] / size;
cout << count[j] << endl; //输出概率便于后续画图
if (count[j] != 0)
{
iq = log(count[j]) / log(2.0);
en[rgb] = en[rgb] - count[j] * iq; //计算出熵
}
}
cout << endl;
}
fclose(fp);
printf("B的熵为:%f\n", en[0]);
printf("G的熵为:%f\n", en[1]);
printf("R的熵为:%f\n", en[2]);
return 0;
}
最后的计算结果为:
B的熵为:6.856861
G的熵为:7.178557
R的熵为:7.229651
同时还输出了图像像素点R,G,B值的概率,使用matlab编程得到概率分布图像:
代码如下:
clear;clc
load BGR.mat
x=0:1:255;
semilogy(x,BGR(:,1),'b',x,BGR(:,2),'g',x,BGR(:,3),'r','LineWidth',2)
axis([0 255 0 0.1])
grid on
legend('B','G','R')
xlabel('像素值')
ylabel('pmf')
这里“BGR.mat”按列顺序存放着B,G,R的概率值。