• 使用matlab判断男声与女声


    (转自) http://wenku.baidu.com/view/1d55480fbe1e650e52ea99a3.html

    %filename:manwoman.m
    %different man from woman.
    %===========================================================
    clear;
    % [x,fs,bits]=wavread('d.wav', [1 5000]);       % 读入声音文件(*.wav)  
    [x,fs,bits]=wavread('d.wav', [5000 10944]);       % 读入声音文件(*.wav) 
    sound(x,fs,bits);                % 数据通过声卡转换为声音
    %===========================================================
    % pause;
    data1=x(:,1);
    n=0:length(x)-1;
    time=n/fs;
    subplot(3,1,1)                                        % 绘制2行1列的第1张子图
    plot(time,data1)                                      % 以时间为横轴,数据为纵轴作图
    xlabel('Time (sec.)')                                 % 标注横坐标
    ylabel('Signal Level (Volts)')                        % 标注纵坐标
    grid on                                               % 添加网格
    % pause;
    % 对采集数据作滤波处理
    blocksize =length(data1);                             % 计算窗函数长度 
    window = hanning(blocksize);                   % 计算汉宁窗函数(此函数为MATLAB自带)
    data2=window.*data1;                                  % 对数据先作加窗处理
    % wp=[70,400];                                             %100Hz--400Hz
    % wp=wp*2/fs;
    wp=3000*2/fs;
    [b,a]=ellip(4,0.1,20,wp);                      % 构造椭圆滤波器
    data=filter(b,a,data2);                               % 求加窗处理后的数据经过滤波器的响应
    subplot(3,1,2)                                        % 绘制2行1列的第1张子图
    plot(time,data)                                      % 以时间为横轴,数据为纵轴作图
    xlabel('Time (sec.)')                                 % 标注横坐标
    %ylabel('Signal Level (Volts)')                        % 标注纵坐标
    grid on                                               % 添加网格
    % pause;
    [xmax,index]=max(data1);
    timewin=floor(0.015*fs);
    xwin=data1(index-timewin:index+timewin);
    [y,lags]=xcov(xwin);
    subplot(3,1,3)
    plot(lags,y)
    grid on
    ylen=length(y);
    halflen=(ylen+1)/2 +30;
    yy=y(halflen: ylen);
    [ymax,maxindex] = max(yy);
    fmax=fs/(maxindex+30);
    disp(['Maximum occurred at ', num2str(fmax), ' Hz'])

    f=fmax;
    justify=f;   %Hz
    if justify<180  %limitHz以下判断是男的
        display '男'
    else
        display '女'
    end

  • 相关阅读:
    JS 给li标签下所有a标签添加点击事件并添加和删除样式
    Linux简介及常用命令
    简易计算器
    登陆窗口小项目
    时间工具类
    String类的常用方法(附带练习)
    java-自定义异常
    Java小练习
    Java-接口练习1
    动态加载js
  • 原文地址:https://www.cnblogs.com/zhang-pengcheng/p/4476533.html
Copyright © 2020-2023  润新知