我是靠谱客的博主 会撒娇柚子,最近开发中收集的这篇文章主要介绍分帧及其复原,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

分帧

%分帧函数
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)

在这里插入图片描述

最后

以上就是会撒娇柚子为你收集整理的分帧及其复原的全部内容,希望文章能够帮你解决分帧及其复原所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部