欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MATLAB实现语谱图

程序员文章站 2022-07-13 13:30:27
...

一、语谱图含义

语谱图将信号强弱用灰度来标志,如果某个滤波器输出的信号强,相应的颜色将加深,水平方向是时间轴,垂直方向是频率轴。语谱图也被称为可视语音。

二、范例

1.预备知识

语音信号实现短时傅里叶变换

2.求语谱图源码:

clear all; clc; close all;
[x,Fs]=audioread('bluesky3.wav');   %读入数据文件
wlen=800; inc=80; win=hanning(wlen);% 设置帧长,帧移和窗函数
N=length(x); time=(0:N-1)/Fs;       % 计算时间
y=enframe(x,win,inc)';              % 分帧
fn=size(y,2);                       % 帧数
frameTime=(((1:fn)-1)*inc+wlen/2)/Fs; % 计算每帧对应的时间
W2=wlen/2+1; n2=1:W2;
freq=(n2-1)*Fs/wlen;                % 计算FFT后的频率刻度
Y=fft(y);                           % 短时傅里叶变换
clf                                 % 初始化图形
%=====================================================%
% Plot the STFT result              % 画出语谱图        
%=====================================================%
set(gcf,'Position',[20 100 600 500]);            
axes('Position',[0.1 0.1 0.85 0.5]);  
imagesc(frameTime,freq,abs(Y(n2,:))); % 画出Y的图像  
axis xy; ylabel('频率/Hz');xlabel('时间/s');
title('语谱图');
%=====================================================%
% Plot the Speech Waveform          % 画出语音信号的波形  
%=====================================================%
axes('Position',[0.07 0.72 0.9 0.22]);
plot(time,x,'k');
xlim([0 max(time)]);
xlabel('时间/s'); ylabel('幅值');
title('语音信号波形');

MATLAB实现语谱图
语谱图的时间分辨率和频率分辨率是由窗函数的特性决定的,如果需要提高语谱图的频率分辨率,则需要增加窗长。如果需要提高语谱图的时间分辨率,则需要减小窗长。