2280及声卡音频信号质量比对
1 频谱分析
测试目的 : 声卡和2280对各频点的相应,是否有很大区别
测试信号 : 1-48k扫频信号(Sweep_48k)
测试方法 :
1 用电脑连接音箱播放测试扫频信号,
2 声卡接收通路为:楼氏mic-声卡-QTdemo。2280接收通路为:驻极体mic-(7210)-2280-南京SDK
3 数据处理:QT写dat转wav,取用第一路mic的输出结果:1.wav ;2280用exe录音获取bin文件,cooledit取audio1.bin的左声道,上面一个数据copy to new 存为pcm/wav格式
4 对齐处理:
方法1 :广义互相关计算TDOA
两段语音截取特征相似的一段内容,计算互相关,取最大值的点为计算延迟点数
数学模型描述:
其中是声音信号,
是两个声音传感器检测噪声,
就是声音信号在两个麦克风传感器上的到达时间差(TDOA),或称为时间延迟(Time Lag),表示以一个传感器为基准,信号到达另一个传感器的延迟。
假设通常假设声音信号是广义稳定随机过程且三者之间不相关。可以使用两个传感器获得信号之间的互相关最大化来得到该时间延迟。
实际应用中,通常都是采集到的有限长
的信号
,因此
只要在时间
内近似保持平稳和不相关即可求得互相关。
通过两个相距的传感器上所得到的信号到达时间差
(TDOA),可以计算出声音的方向
close all
clc
clear
filepath1 = 'E:\1_QT\sound_dat_mtl_tool\soundData\85\01.wav';
filepath2 = 'D:\work\erase\09112280\0008_2.pcm';
fid = fopen(filepath2,'rb');
y = fread(fid,'int16');
[x, FS]=audioread(filepath1);
%% 找一段幅度特征明显的语音
s1 = x(670000:720000);
s2 = y(670000:770000);
[acor,lag] = xcorr(s1,s2);
[~,I] = max(abs(acor));
lagDiff = lag(I);
[图片上传失败...(image-661f2a-1650335257513)]
可能的弊端是,如果信号不是宽带信号,则使用普通的互相关所检测到的峰值就会不明显,而且受到噪声影响很大。因此推荐用广义互相关法。
方法2:
广义互相关:GCC
其中是法1中的
,对
进行傅里叶变换,再去掉幅度影响进行傅里叶逆变换得
,对其求求max得到使广义互相关
最大的
值
。
计算结果延迟点零点在互相关长度一半的位置,互相关acor的起始索引为1,而非复数
MTL关键代码如下:
S = fft(acor);%acor为计算出的互相关,长度为2·len+1
R = ifft(S./abs(S));
[R_max,Ridx] = max((R));%%注意Ridx需要减去len
stem(1:length(lag), R)
[图片上传失败...(image-9cf74d-1650335257513)]
此例中file1落后于file2,Ridx-len = -4359
TDE (Time Delay Estimation)时延估计
tde的典型计算方法:
[图片上传失败...(image-7b0cb4-1650335257513)]