一、enframe函数详解
function framedSig = enframe(sig, win, inc)
%ENFRAME split signal up into (overlapping) frames
% Usage: framedSig = enframe(sig, win, inc)
% framedSig = enframe(sig, win)
% framedSig = enframe(sig)
% Inputs:
% sig: input signal, one dimension vector
% win: window function, one dimension vector. Default is hamming window
% inc: increment (in sample). Default is win/2.
% Outputs:
% framedSig: A matrix with framed signal. Row is the frame.
% Author: Written by Gary Hu
% Date: June 2002
% Modified: 19/8/2002, handle even length case carefully
% 22/05/2017, change document to MATLAB help style
% Reference: Chapter 5, Understanding Digital Signal Processing,
% Richard G. Lyons, Prentice Hall, 2000.
% ISBN 0-201-61221-9
% Tested on: MATLAB R2017a
% Keyword: Overlapping segmented frame, window
% default window is hamming window.
if nargin < 2 || isempty(win)
win = hamming(256, 'periodic');
end
% default increment is half of window length
if nargin < 3 || isempty(inc)
inc = length(win)/2;
end
siglen = length(sig);
% handle even length window
if rem(length(win),2) == 0
win = [win;0];
end
winlen = length(win);
slideLen = winlen-inc;
nframe = ceil(siglen/inc);
% pad signal to be integer times of inc
sig = [sig; zeros((nframe-1)*inc+winlen-siglen,1)];
c = 1;
framedSig = zeros(nframe, winlen);
for i = 1:winlen:siglen
if i+winlen <= siglen
framedSig(c,:) = sig(i:i+winlen-1)';
else
% handle the tail of the input signal
tmp = sig(siglen-winlen+1:siglen)';
framedSig(c,:) = [win(1:length(tmp)).*tmp, zeros(1,winlen-length(tmp))] ;
end
c = c+1;
end
enframe函数的主要目的是将信号分割为许多可重叠的帧。这在一些信号处理方面,例如音频处理、语音处理方面很有帮助。enframe函数通过传入一个信号sig,一个窗函数win和一个帧移inc来实现信号的分帧。它返回每个帧或分段信号的矩阵,其中每行表示一个帧或分段。它默认使用具有其最大幅度值在帧内的Hamming窗口函数,但也可以使用其他窗口函数,也可以自己定义使用。
二、matlab分帧函数enframe
使用enframe函数,你可以轻松地将音频信号分割成许多可重叠的帧,以供后续处理。
三、enframe函数的作用
enframe函数的主要功能是将信号分割为可重叠的帧。可以将短时信号分析为频域上的一系列独立的频谱。然后,将每个频谱分为相邻的帧,以确定短时间内的信号属性。这种方法用于时间-频率分析,如短时傅里叶变换和小波变换。因此,分帧是语音识别中非常重要的预处理步骤。
四、getframe函数
在Matlab编程中,enframe函数可以与getframe函数一起使用,该函数每次从enframe函数返回的帧矩阵中获取一帧。
五、enframe函数无法识别
enframe函数是在Matlab语音处理工具箱中定义的,但是,在没有安装此工具箱的情况下,请手动复制enframe函数的代码并将其粘贴到程序中以使用。
六、enframe函数每个产量
enframe函数将信号sig分解为可重叠的窗口,并以帧为单位存储它们。输出是一个矩阵,其中每行代表一个帧。
七、函数forecast
enframe函数也可以与forecast函数一起使用。该函数是使用由enframe函数生成的矩阵建立模型,然后预测使用这种模型的数据。
八、enframe函数未定义
如果您无法在Matlab中找到enframe函数,则表示您尚未安装语音处理工具箱。请从官方Matlab网站上下载并安装。
九、enframe函数自定义怎么写
以下是自定义的enframe函数的例子:
function framedSignal = my_enframe(sig, win, inc)
siglen = length(sig);
if nargin < 2 || isempty(win)
win = hamming(256, 'periodic');
end
if nargin < 3 || isempty(inc)
inc = length(win)/2;
end
if rem(length(win),2) == 0
win = [win;0];
end
winlen = length(win);
slideLen = winlen-inc;
nframe = ceil(siglen/inc);
sig = [sig; zeros((nframe-1)*inc+winlen-siglen,1)];
c = 1;
framedSig = zeros(nframe, winlen);
for i = 1:winlen:siglen
if i+winlen <= siglen
framedSig(c,:) = sig(i:i+winlen-1)';
else
tmp = sig(siglen-winlen+1:siglen)';
framedSig(c,:) = [win(1:length(tmp)).*tmp, zeros(1,winlen-length(tmp))] ;
end
c = c+1;
end
end
自定义enframe函数与原始enframe函数非常相似,只是没有对函数规模的限制。因此,在进行处理较大数据时,可能需要自定义enframe函数以改善性能。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/181592.html
微信扫一扫
支付宝扫一扫