一、实验目的
下载一个HRTF数据库,阅读其说明文档,学习如何运用其中数据,完成双耳空间音效的实现。推荐基于真人的CIPIC,以及基于人工头的THK。素材不能只有一种,要创建一个声景。利用HRTF实现声景中各个声源的不同方位的双耳空间音效。
二、实验原理
HRTF(Head Related Transfer Function):头相关变换函数,是一种音效定位算法,对应时域的HRIR(Head Related Inpulse Response),头相关脉冲响应。由于声音会从耳廓、或肩膀反射到人耳内部,当模拟声音定位时,可以利用HD ITD的运算方式,来计算不同方向或位置声音所产生的大小和音调等,进而制造出立体空间声音定位的效果。
CIPIC HRTF 数据库是一个高空间分辨率头相关传递函数的公共领域数据库,包括45名受试者在25个不同方位角和50个不同仰角(1250个方向)的头相关脉冲响应测量值,角度增量约5/spl deg/。此外,该数据库还包含每个受试者的人体测量数据,具有大小耳廓的KEMAR人体模型。
该数据库有四个目录:
1. Standard_hrir_database目录包含所有主题的HRIR数据。子目录show_data包含一个MATLAB的同名程序,在这个子目录下运行show_data可以显示和分析每个受试者的HRIRs和HRTFs,另一个名为hor_show_data的MATLAB程序可以方便地检查水平面的数据。
2. special_kemar_hrir目录包括两个非标准的KEMAR数据集,用于在水平面和正面测量的HRIRs。
3.anthropometry目录包括人体测量数据和关于数据格式的简要说明文件。
4. doc目录包括:
* UCD HRIR文件包括对几何学和坐标系的描述。
* show_data程序的用户手册。
* 数据库中人体测量参数的描述。
三、实验步骤
代码见网盘:链接:https://pan.baidu.com/s/1jdj6wl2MxgpUKJtPEO_CuQ?pwd=e4ry
提取码:e4ry
1、surroundDemo.m 水平环绕双耳信号
- 指定subject,azimuth和elevation的路径;
- 由 azimuth,elevation转化得到azimuth_index 和elevation_index;
- 调用readCipicHrtf得到环绕路径中某个空间方位的hrir 左右耳数据;
- 读入单声道音频文件,分帧;
- 利用每帧wav_data 与对应的hrir数据作卷积,得到该帧wav数据产生的双耳信号;
- 一次连接每帧wav数据产生的双耳信号,得到最终输出wav文件。
2、pointDemo.m定点双耳信号
- 指定subject,azimuth,elevation;
- 由 azimuth,elevation转化得到azimuth_index 和elevation_index ;
- 调用readCipicHrtf(subject,azimuth_index,elevation_index,’l’) 和readCipicHrtf(subject,azimuth_index,elevation_index,’r’)得到左右耳hrir数据;
- 读入单声道音频文件得到 wav_data;
- 利用wav_data 与hrir数据作卷积,binarual_l=filter(hrtf_l,1,wav_data) ,binarual_r=filter(hrtf_r,1,wav_data); 得到双耳信号。
3、phantomDemo.m双声源生成双耳信号
- 根据虚拟声源角度,利用正切定律,得到左右扬声器信号的增益因子gl,gr;
- 读入单声道音频文件,获得wav_data,分帧;
- 由dataL=gl*wav_data ,dataR=gr*wav_data得到左右扬声器的输出信号dataL,dataR;
- 根据左右扬声器位置,获取该位置对应的左右耳hrir数据(hrir_data_ll, hrir_data_lr, hrir_data_rl, hrir_data_rr)
- dataL 分别与hrir_data_ll,hrir_data_lr作卷积,得到左扬声器产生的左、右耳信号outLL,outLR;dataR 分别与hrir_data_rl,hrir_data_rr作卷积,得到右扬声器产生的左、右耳信号outRL,outRR;
- 对左右扬声器产生的左(右)耳信号 outLL,outRL;(outLR, outRR)经fft变换到频域进行叠加,再经ifft反变换到时域,得到合成的双耳信号并输出。
4、add.m将以上双耳信号叠加
四、实验结果
最终双耳空间音效见文件‘.\心理声学作业6-双耳空间音效-陈静-202120081001050\Binaural_spatial_sound\output\add2.wav’
评语:给出了环绕、定位等空间声像的实现。但是,按照作业要求,得设计一个声景,而不是把各种空间效果的代码拿来跑一遍给出结果。另外,phantomDemo.m里面已经用正切定律实现了水平方位角,无需要用左右耳的HRIR再滤波。