matlab数字信号处理


前言:这一篇是研究matlab数字信号处理(音频)的一个学习总结。在数学方面天赋有限,理解了一些,但是没有做到最后,有兴趣的话可以拿去借鉴做得更完美一些。
这篇的主要目的是分析男女声音的区别,终极目标是实现男女声音的辨识,借鉴了很多人的程序,会在末尾注明参考链接。


1 matlab傅里叶变换

第一步是搞明白傅里叶变换是怎么工作的,原理这里不说了,只看方法和结果,参考的是matlab早期的一个官方文档,现在的文档已经做了改进,稍微复杂一些,道理差不多。
程序如下:

%模拟一个数字信号
t=0:0.001:0.6;  %时间序列
x=sin(2*pi*50*t)+sin(2*pi*120*t);%数字信号,两个频率成分,分别为50Hz和120Hz
y=x+2*randn(size(t));%添加随机噪声
%绘制原始信号时域图
figure(1);
plot(1000*t,y);
title('原始信号');
ylabel('amplitude');
xlabel('time(s)');
%快速傅里叶变换
Y=fft(y,512);%此处取前512个采样点
Pyy=Y.*conj(Y)/512;%求能量值,conj是求共轭的意思
%绘制频谱图
figure(2);
f=1000*(0:511)/512;
plot(f,Pyy);
%绘制一半的频谱图
figure(3);
fh=1000*(0:256)/512;
plot(fh,Pyy(1:257));

原始信号:

原始信号

频谱图:
频谱图.png

毫无疑问,频谱图是对称的。记得研一听懂这部分的时候,我兴奋了一下午,但是我真的想不起来为什么是对称的了,反正显然它是对称的。右边是因为求了复数的模才出来的。实在想知道怎么回事,自己去看吧:与时间无关的故事
所以这里我们显示一半的频谱看一下:
50

120

是不是堪称完美,学到这里我都迫不及待了,觉得分析音频肯定也就这么
回事。如果不考虑终极目标,是差不多。

2 音频分析

这里不提供完整的多人音频分析的内容,只单个分析。
首先是音频的来源,本来想着录音的,但是没有合适的环境,给女朋友录音倒是可以找个安静的地方是吧。但是给别的女生录音……不过最后找到了一个很好的素材,王者荣耀的英雄语音包。英雄语音包下载(密码:vfn3)

先上程序:

[y,fs]=audioread('G:\matlab_homework\matlab_home\audio\张良1.mp3');%读取音频,y数据,fs是采样率
%时域波形图
ft=y(:,1);%读取一个声道的音频
len=length(y);
t=(0:len-1)/fs;%时间序列
%原始信号时域图
figure(1);
plot(t,ft);
title('time');
xlabel('time(s)');
ylabel('amplitude');
%频域波形图
plen=len/32;%改成1就是整个图谱,这里只看前一部分
yf=fft(y,len);
yff=yf.*conj(yf)/len;
tf=(0:len-1)*fs/len;
figure(2);
plot(tf(1:plen),yff(1:plen));
title('fft');
xlabel('Hz');
ylabel('amplitude');

先来看看张良的,先看一下整个频域的图谱:


张良1

呦呵,图大了看不清,愚蠢的人类:


前1/32

大概这么一看,张良作为一个男孩子,他的声音频率主要集中在100-800Hz的样子。
迫不及待的翻出一个女孩子看看:
甄姬

哇塞,一看甄姬妹子的,好个性。仔细看看跟张良的分别,突然觉得这个任务很简单。

  • 1 男孩纸的频谱貌似更分散一些
  • 2 能量较高的位置貌似比女孩纸靠前一些
    其实坐到这个程度本来可以改吧改吧交作业了,可是自己手贱了。

3 更进一步

首先看到这两张图,想到了人的声音肯定是有频率范围的,再者,想知道是不是已经有男女声音辨识的方法了。
于是找到了这张图:


男女声音频率分布

看上面的频谱,好像的确是这个样子。

这里有两个不认识的字,叫基音频率。据说基音就是物体整体发声的声音频率,它可以作为辨识男女声音的一项标准。
于是找到了以下程序:

%filename:manwoman.m 
%different man from woman. 
%=========================================================== 
clear; 
% [x,fs,bits]=wavread('d.wav', [1 5000]);       % 读入声音文件(*.wav)   
[y,fs]=audioread('G:\matlab_homework\matlab_home\audio\张良2.mp3');       % 读入声音文件(*.wav)  
sound(y,fs);                % 数据通过声卡转换为声音 
x=y;%fir_lpf(y,fs,400,50);%下面给出滤波函数
%=========================================================== 
% 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=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

这个程序主要是通过自相关函数来求取基音频率,然后根据基因频率来辨识男女,我增加了一个低通滤波器,正确率大概有个百分之七八十吧。
低通滤波函数:

function [y]=fir_lpf(x,Fs,fs,fp)
%该函数采用hanning窗实现低通滤波
%x为输入信号,fs,为采样频率
%fs,fp分别为阻带截至频率和通带截至频率
%20150615 by boat


%求对应角频率
ws=fs*2*pi/Fs;
wp=fp*2*pi/Fs;


%求滤波器的最小阶数
B=ws-wp;   %过渡带宽取二者中较小的
N=ceil(6.2*pi/B);


%计算滤波器系数
wc=(ws+wp)/2;
hn=fir1(N-1,wc,hanning(N));
y=filter(hn,1,x);


%freqz(hn)

3 翻船了

正当我开心的准备复制粘贴我的结果的时候,翻船了,因为我测试了达摩和露娜的音频。
达摩作为一个纯爷们,给了我这样的图谱:


达摩

能量最高的频率超过了500,这部分不管它,但是大多数峰值都在200以后。
所以说我感觉只寻找基音频率这个方法还是有些问题的,只适用于大多数情况。如果你对比多个人的音频频谱,会看到其实男生声音普遍会从比较低的频率就开始出现,通常在多个频率上能量比较高。
就这么多了,详细的看下面链接学习吧。

参考文献

与时间无关的故事
男女声音识别
基音周期提取
matlab傅里叶变换

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 一、傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚...
    constant007阅读 4,427评论 1 10
  • 1 数字音频基础知识# 1.1 声波### 声音始于空气中的振动,这些振动一起推动邻近的空气分子,而轻微增加空气压...
    朱细细阅读 17,882评论 0 25
  • title: iOS音频编程之变声处理date: 2016-06-09tags: Audio Unit,变声处理博...
    JustinYang阅读 6,990评论 7 13
  • 这篇文章是系列文章的第3篇。 第一篇在这里声波配网原理。 关于声波传输编码的部分在这里声波传输编码。 前面说过,声...
    作死少女88阅读 5,676评论 7 14
  • 2018.5.8 是什么让自己失业如此之久。断断续续失业。本科不好,简历不好。不愿意妥协与将就。不想做销售。怎么是...
    马文宇宙阅读 141评论 0 0