📄 yupuproject1.2.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -