我是靠谱客的博主 追寻路人,最近开发中收集的这篇文章主要介绍自己写一个MATLAB分帧函数(MyBuffer)对于做语音信号处理的人来说,信号分帧一定很熟悉,常用的是MATLAB自带函数buffer。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对于做语音信号处理的人来说,信号分帧一定很熟悉,常用的是MATLAB自带函数buffer。

我们先了解一下buffer函数的基本功能,再自己尝试写一下该函数代码。

1. MATLAB中的Buffer函数:

语法:

y = buffer(x,n,p)
% y = buffer(x,n,p) overlaps or underlaps successive frames in the output matrix by p

意思是,将一段长序列x分为每帧样点数为n,相邻之间重叠样点数为p的一帧帧信号。下图的说明更加清楚:

这里写图片描述

其中x = 1:30, n = 7, p = 3

想知道这个函数是如何工作的吗?我们无法查看到buffer函数的代码,所以可以自己来写一个。

2. 自己写的buffer函数,就称它为mybuffer吧:

function y=mybuffer(x, n, p)
% mybuffer This is a function to divided frames.
% p is the overlap length
% n is the number of frames

n_x = length(x);
n_frame = ceil((n_x - n + p)/(n - p)) + 1; % compute the number of columns of a frame
y = zeros(n,n_frame); % initialize value to zero

% compute the sequence of the frames
s = n - p;
y((p+1):n,1) = x(1:s);
for i = 2:(n_frame-1)
    y(1:p,i) = y(((i-1)*n-p+1):((i-1)*n));
    y((p+1):n,i) = x(((i-1)*s + 1):(i*s));
end
y(1:p,n_frame) = y(((n_frame-1)*n-p+1):((n_frame-1)*n));
y((p+1):((n_x-s*(n_frame-1))+p),n_frame) = x(((n_frame-1)*s+1):n_x);

end

以下是验算的结果:

这里写图片描述

经过几次验证,结果似乎跟buffer没什么区别,但是这种方法似乎太过机械,看着也很繁琐,还有更好的方法吗?当然有,这里就不多说了。

最后

以上就是追寻路人为你收集整理的自己写一个MATLAB分帧函数(MyBuffer)对于做语音信号处理的人来说,信号分帧一定很熟悉,常用的是MATLAB自带函数buffer。的全部内容,希望文章能够帮你解决自己写一个MATLAB分帧函数(MyBuffer)对于做语音信号处理的人来说,信号分帧一定很熟悉,常用的是MATLAB自带函数buffer。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部