matlab 基频 提取,为什么换用44.1k单通道的wav来采用自相关的方法提取基频时......

% pr8_3_1

clc; close all; clear all;

%run Set_II                                      % 参数设置

%run Part_II                                     % 读入文件,分帧和端点检测

% Set_II

filedir=[];                    % 设置数据文件的路径

filename='ai_1_44.1(mono).wav';          % 设置数据文件的名称

fle=[filedir filename]         % 构成路径和文件名的字符串

wlen=256; inc=80;              % 分帧的帧长和帧移

overlap=wlen-inc;              % 帧之间的重叠部分

T1=0.05;                       % 设置基音端点检测的参数

% Part_II

[x,fs]=wavread(fle);                        % 读入wav文件

x=x-mean(x);                                % 消去直流分量

x=x/max(abs(x));                            % 幅值归一化

y  = enframe(x,wlen,inc)';                  % 分帧

fn  = size(y,2);                            % 取得帧数

time = (0 : length(x)-1)/fs;                % 计算时间坐标

frameTime = frame2time(fn, wlen, inc, fs);  % 计算各帧对应的时间坐标

[voiceseg,vosl,SF,Ef]=pitch_vad1(y,fn,T1);   % 基音的端点检测

% 滤波器系数

b=[0.012280   -0.039508   0.042177   0.000000   -0.042177   0.039508   -0.012280];

a=[1.000000   -5.527146   12.854342   -16.110307   11.479789   -4.410179   0.713507];

xx=filter(b,a,x);                               % 带通数字滤波

yy  = enframe(xx,wlen,inc)';                    % 滤波后信号分帧

lmin=fix(fs/500);                               % 基音周期的最小值

lmax=fix(fs/60);                                % 基音周期的最大值

period=zeros(1,fn);                             % 基音周期初始化

period=ACF_corr(yy,fn,voiceseg,vosl,lmax,lmin); % 用自相关函数提取基音周期

% T0=pitfilterm1(period,voiceseg,vosl);           % 平滑处理

% % 作图

% subplot 211, plot(time,x,'k');  title('语音信号')

% axis([0 max(time) -1 1]); grid;  ylabel('幅值');

% subplot 212; plot(frameTime,T0,'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','k','linestyle','-');

%     line([frameTime(nx2) frameTime(nx2)],[-1 1],'color','k','linestyle','--');

% end

save pitch period

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值