matlab编音乐和波形图,请教关于MATLAB处理语音信号的波形图和语谱图的问题

这实际上是很简单的,因为画语谱图是分帧以后进行的,主要应知道分帧后每帧对应的时间就能画出的语谱图和波形图对应起来。这里提供一个已知分帧参数后计算时间刻度的函数frame2time :

function frameTime=frame2time(frameNum,framelen,inc,fs)

frameTime=(((1:frameNum)-1)*inc+framelen/2)/fs;

这个函数和语谱图将在我出版的新书中将会出现并多次被引用(https://www.ilovematlab.cn/forum-173-1.html)。以下再举个例子:

clear all; clc; close all;

[x,fs]=wavread('sunday_2.wav');  % 读入数据

N=length(x);               % 信号长度

time=(0:N-1)/fs;           % 时间刻度

wlen=200; inc=80;          % 帧长和帧移

y=enframe(x,wlen,inc)';    % 分帧

Y=fft(y);                  % FFT

W2=wlen/2+1;

n2=1:W2;                   % 正频率部分

fn=size(y,2);              % 帧数

frameTime=frame2time(fn,wlen,inc,fs);   % 每帧对应的时间刻度

freq=(n2-1)*fs/wlen;       % 频率刻度

Y_abs=abs(Y(n2,:));        % 幅值

subplot 211; plot(time,x);

xlabel('时间/s'); ylabel('幅值'); title('信号波形图');

subplot 212;

imagesc(frameTime,freq,Y_abs); axis xy; % 画语谱图

xlabel('时间/s'); ylabel('频率/Hz'); title('语谱图');

信号在附件中(把扩展名txt改为wav),画出的波形图和语谱图如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值