📄 minenframe.m
字号:
%此函数为单帧逼近谱估计的一部分
%dx=dzp(x,a,b);
%minxenf为输出的估计噪声
%x语音信号
%
function minxenf=minenframe(x,N,Nshift)
N=N;%%帧长
enfshift=Nshift;%帧移
len=length(x);
t=1;
while (t-1)*enfshift+N<=len
xenf(t,:)=x((t-1)*enfshift+1:(t-1)*enfshift+N);
t=t+1;
end
M=t-1;%帧数
% 计算能量
enp=zeros(1,M);%定义每一帧的能量
for t=1:M
xfft(t,:)=xenf(t,:);% FFT变换
for n=1:N
enp(t)=enp(t)+abs(xfft(t,n));%求出每一帧的能量
end
end
%
enp_min=min(enp);%求出最小的那一帧作为噪声帧
p=find(enp==enp_min);%返回最小帧的帧号
% 求出最二三小能量帧
t=1:M;
enp_min1=min(enp(t~=p));
p1=find(enp==enp_min1);
enp_min2=min(enp(t~=p&t~=p1));
p2=find(enp==enp_min2);
%三帧平均
xmean=(xfft(p,:)+xfft(p1,:)+xfft(p2,:))/3;
enp_mean=enp_min/N;%求出这一噪声帧的平均值
%下面求残差
perf=xfft(p,:);
can_c=perf-enp_mean;%有可能为负,所以取绝对值
% 恢复带修正
a=3;
minxenf=(xmean+can_c.^a)/2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -