2020-09-21

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

两段语音截取特征相似的一段内容,计算互相关,取最大值的点为计算延迟点数

数学模型描述:
r_1(t) = s(t)+n_1(t)\\ r_2(t) = s(t-D)+n_2(t)
其中s ( t )是声音信号,n_1 ( t ) , n_2 ( t )是两个声音传感器检测噪声,D就是声音信号在两个麦克风传感器上的到达时间差(TDOA),或称为时间延迟(Time Lag),表示以一个传感器为基准,信号到达另一个传感器的延迟。
R_{1,2}(\tau) = E\{r_1(t)·r_2(t+\tau)\}\\ \hat{D}= {arg\max}_{\tau}R_{1,2}(\tau)
假设通常假设声音信号s ( t ) , n_1 ( t ) , n_2 ( t )是广义稳定随机过程且三者之间不相关。可以使用两个传感器获得信号之间的互相关最大化来得到该时间延迟。
\hat{R_{1,2}}(\tau) =\cfrac {1}{T-\tau}\int^{T}_{t}{x_1(t)·x_2(t-\tau)d\tau}\\
实际应用中,r_1 ( t ) , r_2 ( t )通常都是采集到的有限长T 的信号x_1(t),x_2(t),因此s ( t ) , n_1 ( t ) , n_2 ( t )只要在时间T内近似保持平稳和不相关即可求得互相关。
sinβ= Lc⋅τ
通过两个相距L的传感器上所得到的信号到达时间差\tau(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

S(f)=∫ _{−∞}^{∞} { R(τ)⋅e ^{−j2πfτ}} dτ\\ \tilde{R}(τ)=∫ \cfrac{S(f)}{∣S(f)∣} e ^{+j2πfτ} df\\ \tilde{D} = arg\max_τ \tilde{R} (τ)
其中R(\tau)是法1中的\hat{R_{1,2}}(\tau),对R(\tau)进行傅里叶变换,再去掉幅度影响进行傅里叶逆变换得\tilde{R}(τ),对其求求max得到使广义互相关\tilde{R}(τ)最大的\tau\tilde{D}

计算结果延迟点零点在互相关长度一半的位置,互相关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)]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2020.9.211、问题:1. 2020.9.221、要求自己比坑低,要求别人比天高 2020.9.231、每个...
    秦小小羽阅读 146评论 0 0
  • TDOA 方法的基本原理就是根据信号到达监测区域中的几对节点之间的时间差,求得距离差来确定声源的位置。对于一个传感...
    帅气滴点C阅读 1,499评论 0 1
  • ​ 研究生阶段第一个项目就是室内蓝牙定位,特此分析一下现在国内外专家研究室内导航定位方法和技术进行的探...
    DecadeHeart阅读 2,216评论 0 1
  • 今天我们来谈一谈,如何对付小人,是不是该给小人们一些教训。 01 首先,如何界定小人。小人,基本上是你身边的人,是...
    KevinStewart阅读 1,035评论 0 6
  • 一、run()和start()方法区别 run()方法只是线程的主体方法,和普通方法一样,不会创建新的线程。只有调...
    M_菜鸟笔记阅读 265评论 0 0