我是靠谱客的博主 追寻路人,最近开发中收集的这篇文章主要介绍自己写一个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。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复