matlab 基音周期估计后处理
Posted 胡刚2016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 基音周期估计后处理相关的知识,希望对你有一定的参考价值。
fid=fopen('zhouqi.txt', 'rt');
zhouqi=fscanf(fid, '%f');
fclose(fid);
zhouqi0=medfilt1(zhouqi, 5);
zhouqi1=medfilt1(zhouqi0, 3);
zhouqi2=linsmooth(zhouqi0, 5);
w=[];
w=zhouqi;
w1=w-zhouqi2;
w1=linsmooth(w1, 5);
zhouqi3=w1+zhouqi2;
v=[];
v(1)=0;v(2)=0;v(3)=0;v(4)=0;
for i=1:(length(zhouqi) - 4)
v(i+4)=zhouqi(i);
end
%v(:,1)为取v矩阵中第一列元素
%v(1,:)为取v矩阵中第一行元素
%v(:)矩阵v转换为一个行向量,就是一行
%例如:
%>> A = rand(2,3)
%
%A =
%0.6925 0.3965 0.7802
%0.5567 0.0616 0.3376
%>> B = A(:)
%B =
%0.6925
%0.5567
%0.3965
%0.0616
%0.7802
v=v(:);
v1=v-zhouqi2;
v1=medfilt1(v1, 5);
v1=linsmooth(v1, 5);
zhouqi4=v1+zhouqi2;
figure(1);
subplot(511);
plot(zhouqi);
xlabel('帧数');
ylabel('样点数');
title('原始基音周期轨迹')
subplot(512);
plot(zhouqi1);
xlabel('帧数');
ylabel('样点数');
axis([0, 360, 0, 150]);
title('五点中值平滑和三点中值平滑组合')
subplot(513);
plot(zhouqi2);
xlabel('帧数');
ylabel('样点数');
axis([0, 360, 0, 150]);
title('五点中值平滑和五点线性平滑组合')
subplot(514);
plot(zhouqi3);
xlabel('帧数');
ylabel('样点数');
axis([0, 360, 0, 150]);
title('二次平滑算法')
subplot(515),plot(zhouqi4);
xlabel('帧数')
ylabel('样点数')
axis([0,360,0,150])
title('加延时的二次平滑算法')
function [y]=linsmooth(x, n)
%disp(size(x));% x 是360行,1列的矩阵
win=hann(n);
win=win/sum(win); % 归一化
%disp(size(win));
disp(win);
[r,c]=size(x);%size(x)返回 [行数,列数]
if min(r,c)~=1 % ~=代表不等于
error('sorry, no matrix here!:')
end
if r==1 % 行向量
len=c;
else % 列向量
len=r;
x=x.';% 将列向量转置为行向量
end
%disp(len);
%走到这里 x 一定是行向量
y=zeros(len,1);
if mod(n,2)==0 %返回用 m 除以 2 后的余数
m=n/2;
x = [ones(1,m)*x(1) x ones(1,m)*x(len)]';
else
m=(n-1)/2; %这里实验的n=5, m=2
x = [ones(1,m)*x(1) x ones(1,m+1)*x(len)]';%生成新的数组,在数组 x 前面加2个元素,在数组 x 后面加3个元素
end
for k=1:len
y(k) = win'*x(k:k+n-1); % 一行五列 * 五行一列
end
end
以上是关于matlab 基音周期估计后处理的主要内容,如果未能解决你的问题,请参考以下文章
语音分析基于matlab短时自相关基音周期检测+LPC预测增益计算含Matlab源码 1517期
语音去噪基音matlab GUI音频信号去噪含Matlab源码 1386期
MATLAB点云处理(二十四):点云中值滤波(pcmedian)
MATLAB点云处理(二十四):点云中值滤波(pcmedian)