yupuproject1.2.m
来自「本程序是一种在matlab上的语谱图的实现。 备有简单注释以便于理解。」· M 代码 · 共 39 行
M
39 行
clear all;
clc;
[x,fs]=wavread('oilyrag.wav');
if(size(x,1)>size(x,2)) %把一维列数据变成一维行数据
x=x';
end
s=length(x);
w=round(44*fs/1000); %窗长,分帧,一般取10~30ms
n=w;
ov=w/2; %重叠大小,50%重叠
h=w-ov; %窗口每次移动的大小
win=hanning(n)'; %汉宁窗,再把一维列数据变成一维行数据
c=1; %记数初值
ncols=1+floor((s-n)/h); %总的移动次数(帧数)
d=zeros((1+n/2),ncols); %初始化存储矩阵,行为频率点,列为帧数
for b=0:h:(s-n) %每次窗口移动的起始位置
u=win.*x((b+1):(b+n)); %加窗后每一帧信号
t=fft(u); %频域数据
d(:,c)=t(1:(1+n/2))'; %有重叠?取一半数据。避免重复。把每一
%帧信号的FFT送入矩阵中
c=c+1;
end;
figure(1);
tt=[0:h:(s-n)]/fs; %时间轴(单位是秒)
ff=[0:(n/2)]*fs/n; %频率轴(单位是HZ)
imagesc(tt,ff,20*log10(abs(d)));%根据20*log10(abs(d))的大小,以全色图的方式显示图像
axis xy
xlabel('Time/s');
ylabel('Frequency/Hz')
%直接调用matlab的函数画出语音信号的语谱图
figure(2);
specgram(x);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?