概述
分帧
%分帧函数
function frameout=enframe(x,win,inc)
nx=length(x(:)); % 取数据长度
nwin=length(win); % 取窗长
if (nwin == 1) % 判断窗长是否为1,若为1,即表示没有设窗函数
len = win; % 是,帧长=win
else
len = nwin; % 否,帧长=窗长
end
if (nargin < 3) % 如果只有两个参数,设帧inc=帧长 帧移=帧长
inc = len;
end
nf = fix((nx-len+inc)/inc); % 计算帧数 帧长是一个时间量,帧移同样也是,比如帧长为10ms,帧移为5ms 多少个帧移就有多少个帧
frameout=zeros(nf,len); % 初始化
indf= inc*(0:(nf-1)).'; % 设置每帧在x中的位移量位置
inds = (1:len); % 每帧数据对应1:len
frameout(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:)); % 对数据分帧 indf这一部分把每一帧的第一个元素放在了一个矩阵的第一个,inds填充帧长
if (nwin > 1) % 若参数中包括窗函数,把每帧乘以窗函数
w = win(:)'; % 把win转成行数据
frameout = frameout .* w(ones(nf,1),:); % 乘窗函数
end
321*100 行为帧数,列为帧长
帧移不能超过帧长,最多帧移等于帧长。
分帧之后每帧对应的时间
function frameTime=FrameTimeC(frameNum,framelen,inc,fs)
% 分帧后计算每帧对应的时间
frameTime=(((1:frameNum-1))*inc+framelen-inc)/fs;%
每一帧的时间,等于帧移乘以帧数+重叠部分
不带帧移的恢复原信号
clc;
clear;
[x,fs]=audioread('C3_2_y.wav');%读取音频
win=0.02*fs;
a=enframe(x,win);
b=a';
xx=b(:);
每一行进行转置,再变成一维
带帧移的恢复原信号
clc;clear;
[x,fs]=audioread('C3_3_y.wav');
wlen=200;
win=hamming(wlen);
inc=100;
a=enframe(x,win,inc);
w=a(:,1:inc);
ww=w';
z=ww(:);
audiowrite('data.wav',z,8000)
最后
以上就是会撒娇柚子为你收集整理的分帧及其复原的全部内容,希望文章能够帮你解决分帧及其复原所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复