使用Matlab绘制语音信号的语谱图

本文绘制语音信号的语谱图主要使用了spectrogram函数,spectrogram是一个MATLAB函数,使用短时傅里叶变换得到信号的频谱图。当使用时无输出参数,会自动绘制频谱图;有输出参数,则会返回输入信号的短时傅里叶变换。
绘制语音信号的语谱图代码如下:

clc;
clear;
close all;
[Y,fs]=audioread('lantian.wav');  %读取音频文件lantian.wav
    %Y为读到的双声道数据
    %fs为采样频率
info=audioinfo('lantian.wav')      %audioinfo 函数返回音频的信息情况。
sound(Y,fs)   %播放语音
  
Y1 = Y(:,1);        %Y为双声道数据,取第2通道
figure(1)
plot(Y1)          %画Y1波形图
title('原始语音信号')
grid on;

figure(2)
spectrogram(Y1,256,128,256,16000,'yaxis');
%[S,F,T,P]=spectrogram(x,window,noverlap,nfft,fs)
% [S,F,T,P]=spectrogram(x,window,noverlap,F,fs)
%x---输入信号的向量。默认情况下,即没有后续输入参数,x将被分成8段分别做变换处理,
% 如果x不能被平分成8段,则会做截断处理。默认情况下,其他参数的默认值为
% window---窗函数,默认为nfft长度的海明窗Hamming,如果window为一个整数,每段长度为window,每段使用Hamming窗函数加窗。
% noverlap---每一段的重叠样本数,默认值是在各段之间产生50%的重叠,它必须为一个小于window或length(window)的整数
% nfft---做FFT变换的长度,默认为256和大于每段长度的最小2次幂之间的最大值。
% 另外,此参数除了使用一个常量外,还可以指定一个频率向量F
% fs---采样频率,默认值归一化频率
% spectrogram(...,'freqloc')使用freqloc字符串可以控制频率轴显示的位置。
% 当freqloc=xaxis时,频率轴显示在x轴上,当freqloc=yaxis时,频率轴显示在y轴上,默认是显示在x轴上。如果在指定freqloc的同时,又有输出变量,则freqloc将被忽略。
% F---在输入变量中使用F频率向量,函数会使用Goertzel方法计算在F指定的频率处计算频谱图。
% 指定的频率被四舍五入到与信号分辨率相关的最近的DFT容器(bin)中。而在其他的使用nfft
% 语法中,短时傅里叶变换方法将被使用。对于返回值中的F向量,为四舍五入的频率,其长度
% 等于S的行数。
% T---频谱图计算的时刻点,其长度等于上面定义的k,值为所分各段的中点。
% P---能量谱密度PSD(Power Spectral Density),对于实信号,P是各段PSD的单边周期估计;
xlabel('时间(s)')
ylabel('频率(Hz)')
title('语谱图')

画出的原始语音信号频谱图如下:
在这里插入图片描述
语音信号为“蓝天白云”四个字,从语音信号的频谱图中可以明显看到四段语音。
得到的语音信号语谱图如下:
在这里插入图片描述
从语音信号的语谱图中可以大致看出四段语音的音调情况。

得到的语音信号音频信息情况:
在这里插入图片描述

  • 37
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值