⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yupuproject1.2.m

📁 本程序是一种在matlab上的语谱图的实现。 备有简单注释以便于理解。
💻 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 + -