仿spectrogram 函数的matlab 程序
%此程序为仿 spectrogram 函数的程序
%[xfs]=audioread('音频文件');
%[s,f,t] = spectrogram(x(:,1),1024,512,2048,fs);%x,window,noverlap,f
[xfs]=audioread('音频文件');
%需要输入的参数。可改动
win=1024; %window——窗函数。1024等份
n=512; %noverlap——重复采样点数
nfft=2048; %离散傅里叶变换的点数
%求 spectrogram 函数结果 t:
l=length(x); %输入信号的向量的总长度
ztime=l/fs; %总时长:采样长度/采样率k=fix((l-n)/(win-n)); %s列数为K列
time=ztime/k; %总时间
t1=(0:time:ztime); %spectrogram函数结果t
%end
%加 hamming 窗
for i=1:win
hammingWindow(i)=0.54-0.46*cos(2*pi*(i-1)/(win-1));
end
%end
%特征拆分
halfNfft=nfft/2+1;
for i = 1:k
for j = 1:win
signalXY(i,j) = x((i-1)*(win - n)+(j-1)+1); signalXY(i,j) = signalXY(i,j)*hammingWindow(j);
end
end
%end
%对拆分后的信号进行转后 FFT
s1=fft((signalXY)',2048);
s2=s1(1:1024,:) %spectrogram函数结果 s
%end
%求 F频率向量;
freqStep=fs/nfft;f1(1,1)=0.0;
for i= 2:halfNfft
f1(i,1)=freqStep+f1(i-1,1); %spectrogram函数结果 f
end
%end