查看: 218|回复: 1|关注: 0

[已答复] 运行时总显示frameTime=frame2time(fn,wlen,inc,fs); 有错误,我用的2018b版的Matlab,我的toolbox里好像没有frame2time.m文件,这个应该怎样添加呢,请指教。

[复制链接]

新手

5 麦片

财富积分


050


1

主题

1

帖子

0

最佳答案
发表于 2020-2-16 09:17:50 | 显示全部楼层 |阅读模式
clc;
clear;
close all;
[x,fs] = audioread('G:/lvyin/e.wav');%打开语音信号
win=hanning(wlen);
x=x-mean(x);                           % 消除直流分量
x=x/max(abs(x));                       % 幅值归一化
N=length(x);                           % 信号长度
time = (0 : N-1)/fs;                   % 设置时间刻度
wlen=20;                               % 帧长
inc=10;                                % 帧移
X=enframe(x,win,inc)';                 % 分帧
fn=size(X,2);                          % 帧数
frameTime=frame2time(fn,wlen,inc,fs);  % 每帧对应的时间
En=(1:fn);
for i=1:fn
     u=X(:,i);
     u2=u.*u;
     En(i)=sum(u2);
end
subplot(211);
plot(time,x,'k');
title('语音波形');
ylabel('幅值');xlabel(('时间/s ''(a)'));
subplot(212);
plot(frameTime,En,'k');
title('短时能量');
ylabel('幅值');xlbel(('时间/s''(a)'));

论坛优秀回答者

3

主题

1000

帖子

190

最佳答案
  • 关注者: 44
发表于 2020-2-16 20:35:31 | 显示全部楼层
试试
function frameTime=frame2time(frameNum,framelen,inc,fs)
% ================= 计算分帧后每一帧对应的时间=====================
% ================= 输     入 ===================================
%frameNum          :  总帧数
%framelen          : 帧长
%inc               :  帧移
%fs                : 采样频率
%================== 输     出 ====================================
%frametime         : 每帧的时间,即取这一帧数据中间位置的时间
frameTime=(((1:frameNum)-1)*inc+framelen/2)/fs;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表