% Wavname = 'data.wav', Winsiz=256(16000Hz,16ms),Shift=32,Base=0
function [L,Fs] = covert2spectrogram(filename,Winsiz,Shift,Base)
[Sg,Fs]=audioread(filename);
Sg=Sg(:,1);
n=floor((length(Sg)-Winsiz)/Shift)+1; % 帧数目
A=zeros(Winsiz/2+1,n); % 初始化语谱图,宽为当前帧傅里叶变换的一半,长为帧数目
%% 分帧傅里叶变换,即STFT(短时傅里叶变换)
for i=1:n
nl=1+(i-1)*Shift;
n2=nl+(Winsiz-1);
s=Sg(nl:n2); % 一帧语音的数据
s=s.*hanning(Winsiz); % 加汉宁窗
z=fft(s);
z=z(1:(Winsiz/2)+1); % 取傅里叶频谱的一半(实序列傅里叶变换幅值左右对称)
z=z.*conj(z); % 取幅值
z=10*log10(z); % 取对数
A(:,i)=z; % 给语谱图赋值
end
%% 高通滤波
L0=(A> Base); % 矩阵运算,L0为所有A大于Base的元素的0-1掩膜
L1=(A<=Base); % 矩阵运算,L0为所有A小于Base的元素的0-1掩膜
B=A.*L0+Base*L1; % 将A中小于Base的值置为Base,其它值不变
L=(B-Base)./(max(max(B))-Base); % 减去Base后归一化
end