您的位置:

enframe函数的详解

一、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函数以改善性能。