简介
同一段语音用不同设备录音后的手机语音特性是不同的,因此可以从录音后的语音入手来提取相应的特征进行设备检测。在这里用了一种基于语谱图的方法进行检测。本文主要讲提取语音频谱的信息量,后面的识别过程就是用提取的信息量作为特征使用SVM进行分类,本文不再详细介绍。举个例子,下图是同一段语音用不同手机录下后的语谱图,可已看出有很大测差别。语谱图在matlab中使用以下代码可以查看,其中512为fft变换点数,fs为采样频率,100为重叠长度
[x,fs] = audioread('test.wav');
figure;
specgram(x,512,fs,100);
xlabel('时间(s)');ylabel('频率(Hz)');title('语谱图');
提取流程
本文所提出的设备指纹是基于频谱信息,提取流程如下:
提取代码
[data,f] = audioread('test');
data = filter([1 -0.9375],1,data); %预加重
signal = data(1:8192); %取1s
tframe = enframe(signal,hanning(512)); %时域分帧,汉宁窗,采样点512
[tn,tm]= size(tframe);
X = zeros(tn,tm/2+1);
for i = 1:tn
Y = fft(tframe(i,:));
L = length(tframe(i,:));
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
X(i,:) = P1;
end
arg = sum(X)/tn; %第k频率点沿时间轴的统计平均值
S = sum(arg); %总频率值
p = arg/S; %频率点K出现的概率
I = -log2(p); %第k个频率点的信息量
for j=1:length(I)-1 %提取差分特征
diff(j) = I(j+1)-I(j);
end
注:本文所用音频采样率为8000Hz
语音信号处理交流群:652292630