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('语音信号波形');
语谱图的时间分辨率和频率分辨率是由窗函数的特性决定的,如果需要提高语谱图的频率分辨率,则需要增加窗长。如果需要提高语谱图的时间分辨率,则需要减小窗长。
上一篇: Android Ubuntu下FFmpeg的编译教程
下一篇: Mac编译FFmpeg