码迷,mamicode.com
首页 > 其他好文 > 详细

【特征提取】基于matlab基音周期估计【含Matlab源码 551期】

时间:2021-06-28 20:15:09      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:blog   line   检测   代码   chm   估计   ESS   提取   响应   

一、简介

基于matlab基音周期估计

二、源代码

% 基音周期检测的端点检测算法
clc; close all; clear all;
wlen=320; inc=80;              % 分帧的帧长和帧移
T1=0.05;                       % 设置基音端点检测的参数
[x,fs]=wavread(‘C4_2_y.wav‘);                        % 读入wav文件
x=x-mean(x);                                % 消去直流分量
x=x/max(abs(x));                            % 幅值归一化

[voiceseg,vosl,SF,Ef]=pitch_vad(x,wlen,inc,T1);   % 基音的端点检测
fn=length(SF);
time = (0 : length(x)-1)/fs;                % 计算时间坐标
frameTime = FrameTimeC(fn, wlen, inc, fs);  % 计算各帧对应的时间坐标
plot(time,x,‘k‘);  title(‘语音信号‘)
axis([0 max(time) -1 1]); ylabel(‘幅值‘);
xlabel(‘时间/s‘);

%  带通滤波器设计
clear all; clc; close all;

fs=8000; fs2=fs/2;                      % 采样频率
Wp=[60 500]/fs2;                        % 滤波器通带
Ws=[20 1500]/fs2;                       % 滤波器阻带
Rp=1; Rs=40;                            % 通带的波纹和阻带的衰减
[n,Wn]=ellipord(Wp,Ws,Rp,Rs);           % 计算滤波器的阶数
[b,a]=ellip(n,Rp,Rs,Wn);                % 计算滤波器的系数
fprintf(‘b=%5.6f   %5.6f   %5.6f   %5.6f   %5.6f   %5.6f   %5.6f\n‘,b)
fprintf(‘a=%5.6f   %5.6f   %5.6f   %5.6f   %5.6f   %5.6f   %5.6f\n‘,a)

[db, mag, pha, grd,w]=freqz_m(b,a);     % 求取频率响应曲线
plot(w/pi*fs/2,db,‘k‘);                 % 作图
grid; ylim([-90 10]);

%   倒谱法基音周期检测
clc; close all; clear all;
wlen=320; inc=80;              % 分帧的帧长和帧移
T1=0.05;                       % 设置基音端点检测的参数
[x,fs]=wavread(‘C4_2_y.wav‘);                        % 读入wav文件
x=x-mean(x);                                % 消去直流分量
x=x/max(abs(x));                            % 幅值归一化

[voiceseg,vosl,SF,Ef,period]=pitch_Ceps(x,wlen,inc,T1,fs); %基于倒谱法的基音周期检测

fn=length(SF);
time = (0 : length(x)-1)/fs;                % 计算时间坐标
frameTime = FrameTimeC(fn, wlen, inc, fs);  % 计算各帧对应的时间坐标
% 作图
subplot 211, plot(time,x,‘k‘);  title(‘语音信号‘)
axis([0 max(time) -1 1]); ylabel(‘幅值‘);
subplot 212; plot(frameTime,period,‘k‘);
xlim([0 max(time)]); title(‘倒谱法基音周期检测‘); 
xlabel(‘时间/s‘); ylabel(‘样点数‘);
for k=1 : vosl                              % 标出有话段
    nx1=voiceseg(k).begin;
    nx2=voiceseg(k).end;
    nxl=voiceseg(k).duration;
    fprintf(‘%4d   %4d   %4d   %4d\n‘,k,nx1,nx2,nxl);
%  自相关法基音周期检测
clc; close all; clear all;

wlen=320; inc=80;              % 分帧的帧长和帧移
T1=0.05;                       % 设置基音端点检测的参数
[x,fs]=wavread(‘C4_2_y.wav‘);                        % 读入wav文件
x=x-mean(x);                                % 消去直流分量
x=x/max(abs(x));                            % 幅值归一化

[voiceseg,vosl,SF,Ef,period]=pitch_Corr(x,wlen,inc,T1,fs); %基于自相关法的基音周期检测

fn=length(SF);
time = (0 : length(x)-1)/fs;                % 计算时间坐标
frameTime = FrameTimeC(fn, wlen, inc, fs);  % 计算各帧对应的时间坐标
subplot 211, plot(time,x,‘k‘);  title(‘语音信号‘)
axis([0 max(time) -1 1]); grid;  ylabel(‘幅值‘);
subplot 212; plot(frameTime,period,‘k‘); hold on;
xlim([0 max(time)]); title(‘自相关基音周期检测‘); 
grid; xlabel(‘时间/s‘); ylabel(‘样点数‘);
for k=1 : vosl
    nx1=voiceseg(k).begin;
    nx2=voiceseg(k).end;
    nxl=voiceseg(k).duration;
    fprintf(‘%4d   %4d   %4d   %4d\n‘,k,nx1,nx2,nxl);
    subplot 211
    line([frameTime(nx1) frameTime(nx1)],[-1 1],‘color‘,‘r‘,‘linestyle‘,‘-‘);
    line([frameTime(nx2) frameTime(nx2)],[-1 1],‘color‘,‘b‘,‘linestyle‘,‘--‘);
    subplot 212

三、运行结果

技术图片
技术图片
技术图片

技术图片
技术图片

四、备注

版本:2014a
完整代码或代写加1564658423

【特征提取】基于matlab基音周期估计【含Matlab源码 551期】

标签:blog   line   检测   代码   chm   估计   ESS   提取   响应   

原文地址:https://www.cnblogs.com/homeofmatlab/p/14941692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!