归一化:均值为0,方差为1.
可实现归一化的matlab函数 zscore: z-score 标准化(正太标准化)是基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。
(matlab的归一化函数为mapminmax,此处以A=[100 200 300 400 500]为例,使用mapminmax函数进行归一化,调用格式为[A1,PS]=mapminmax(A)。A1为归一化后的数值。PS是一种对应关系,包含数据的最大值最小值等,如下图所示。归一化函数的对应关系为y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin。此处以200验证某一个元素的值,那么y=2*(200-100)/(500-100)+(-1)=-1/2=-0.5)
均值 mean
方差 var
标准差 std
α X \alpha_X αX是语音信号的标准差
x是语音信号的幅度
1.修正伽玛(Gamma)概率密度
P G ( x ) = k 2 π ⋅ e − k ∣ x ∣ ∣ x ∣ P_G(x)=\frac{\sqrt k}{2 \sqrt \pi} \cdot \frac{e^{-k|x|}}{\sqrt{|x|}} PG(x)=2πk⋅∣x∣e−k∣x∣
k = 3 2 α X k=\frac{\sqrt 3}{2\alpha_X} k=2αX3
2.拉普拉斯(Laplacian)分布
P L ( x ) = 0.5 α e − α ∣ x ∣ P_L(x)=0.5\alpha e^{-\alpha|x|} PL(x)=0.5αe−α∣x∣
$\alpha 是 语 音 信 号 的 标 准 差 是语音信号的标准差 是语音信号的标准差\alpha_x$决定的常数
α = 2 σ x \alpha=\frac{\sqrt{2}}{\sigma_x} α=σx2
3.高斯密度分布
P g ( x ) = 1 2 π σ x e x p ( − x 2 2 σ x 2 ) P_g(x)=\frac{1}{\sqrt{2\pi}\sigma_x}exp(-\frac{x^2}{2 \sigma_x^2}) Pg(x)=2πσx1exp(−2σx2x2)
x是语音信号的幅度, α x \alpha_x αx是语音信号的标准差
[n,x]=hist(data1,100);%计算小区间内的频数及区间中点值
2.在画出幅度概率密度函数图
用每个区间的频数除以数据,可以得出每个区间的频率
3.matlab代码
close all;
clear;
clc;
[data1,fs]=audioread('soo2.wav');
data=abs(data1);
% %histogram(data1);
hold on
% u=mean(data);%均值
% v=std(data);%标准差
% h=max(data)-min(data);%极差
% d=0.01;%根据直方图,得到每个区间的长度为0.1
[n,x]=hist(data1,100);%计算小区间内的频数及区间中点值
% hold on
% plot(x,n);
% hold on
% % xlabel('每个区间中点值');
subplot(211)
hist(data1,100)%画出直方图,
xlabel('幅度');
ylabel('频数');
title('幅度直方图');
hold on
% ylabel('频数');
% n为每个区间内的频数
%f=data/length(data);%计算频率
%f1=f/d;%频率除以分割区间的长度
% x1=min(data):0.01:max(data);
% y=normpdf(x1,u,v);
% plot(x1,y,'r','linewidth',2);
subplot(212)
fi=n/sum(n);
plot( x,fi);
xlabel('幅值');
ylabel('概率');
title('幅度概率密度曲线');
hold on
4.导入不同的类型的音频对比
man
women
music
只导入语音信号(即只有讲话的声音speak.wav)
分别用高斯,拉普拉斯,伽玛带入对比。
没法把数据归一化为均值为0,方差为1的数据。
都是字均值为0的附近,方差为1的附近。
man
musci
speak
完全说话-普通话标准考试说话
对比起来,拉普拉斯好像好点
clear;
clc
[data1,fs]=audioread('man.wav');
[n,x]=hist(data1,100);%计算小区间内的频数及区间中点值
v=std(x);%标准差
j=abs(x);%绝对值
fi=n/sum(n);
y=mapminmax(fi);
plot( x,y,'linewidth',3);
xlabel('幅值');
ylabel('概率');
title('幅度概率密度曲线');
hold on
%gasi
gs=(1/sqrt(2pi)v)exp(-1x.^2/2v^2);
g=mapminmax(gs);
plot(x,g,'linewidth',3);
hold on
%la
a=sqrt(2)/v;%公式
pl=0.5aexp(-aj);%公式
p2=zscore(pl);
plot(x,p2,'linewidth',3);
%gama
j=j';
k=sqrt(3)/(2v);
gm1=sqrt(k)/(2sqrt(pi));
gm2=exp(-kj)/sqrt(j);
gm=gm1gm2;
gam=zscore(gm);
plot(x,gm(:,1),'linewidth',3);
%这里因为计算时j只被当成一个数,算出来的gm2为一个数
%转制了j,使得为一列数据
%得出的结果只取第一列,函数为a(:,1)
%man.wav,数据为最后一列,即为第一百列
hold on
legend('语音信号','高斯','拉普拉斯','伽玛');
#问题
1.数据太少?
2.乖乖的?