电话双音频拨号声音中的干扰信号

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电话双音频拨号声音中的干扰信号相关的知识,希望对你有一定的参考价值。

简 介: 对于出现问题的双音频数据进行分析,查找出现拨码错误的原因。通过与正常电话的音频信号进行对比,可以看到合成输出的音频错误的主要表现:高频与低频所对应的幅值出现了倒置,也就是高频的幅值比低频小,这与正常的电话机恰恰相反。在出现错误拨码的时候,无论是波形还是频谱都出现了严重的失真。估计是合成双音频软件出现的故障。因为这不像是在普通的双音频基础上叠加噪声所形成的失真现象。

关键词 双音频失真干扰

问题描述
目 录
Contents
信号对比
测试双音频信号
WAV数据文件
读取和显示
问题总结
结论

▲ 图1 查找问题所在?

 

§01 题描述


   旧电话改造合作项目 中,经过了前期 高压振铃信号驱动改造端口保护 之后进入后期。今天(2022-01-12)卢工给我反应了系统在发送双音频拨码过程出现的偶然误差问题。并发送过来一些出错的拨码信号。

  • 信息来源: 微信号:山那边。

1.1 信号对比

1.1.1 测试双音频信号

  数据文件包括有七个数据WAV文件:

    10.wav
    digit_1_err.wav
    digit_6_err.wav
    digit_7_err.wav
    digit_8_err.wav
    digit_9_err.wav
    ok.wav

  如下是OK.WAV对应的拨码音频文件。

▲ 图1.1.1 正常拨码的波形

1.1.2 WAV数据文件读取和显示

(1)wav

  对于数据ok.wav文件进行读取和显示:

import sys,os,math,time
sys.path.append("/home/aistudio/external-libraries")
import matplotlib.pyplot as plt
from numpy import *
from scipy.io               import wavfile

wavedir = '/home/aistudio/work/wavefile'
wavefile = ('10.wav', 'digit_1_err.wav', 'digit_6_err.wav',
            'digit_7_err.wav', 'digit_8_err.wav',
            'digit_9_err.wav', 'ok.wav')

wavefile = os.path.join(wavedir, 'ok.wav')
sample_rate, sig = wavfile.read(wavefile)

print("sample_rate: \\n".format(sample_rate), "type(sig): \\n".format(type(sig)), "sig.shape: \\n".format(sig.shape))
sample_rate: 8000
type(sig): <class 'numpy.ndarray'>
sig.shape: (25761,)

  可以看到ok.wav的数据的基本格式:

  • 采样率:8kHz
  • 数据类型:int16
  • 通道数量:单通道;
type(sig): <class 'numpy.ndarray'>

sig[:100]: [ 2023  2993  3580  3714  3380  2624  1525   239 -1095 -2289 -3212 -3752
 -3832 -3451 -2654 -1537  -242  1070  2253  3143  3633  3671  3237  2391
  1244   -67 -1387 -2526 -3372 -3816 -3791 -3316 -2439 -1270    45  1344
  2468  3291  3676  3608  3090  2163   970  -354 -1650 -2737 -3504 -3844
 -3717 -3147 -2188  -975   352  1628  2693  3424  3719  3551  2933  1937
   699  -634 -1893 -2920 -3601 -3839 -3615 -2960 -1939  -686   642  1888
  2899  3533  3725  3453  2745  1697   413  -915 -2131 -3100 -3692 -3829
 -3504 -2756 -1672  -383   942  2142  3073  3632  3726  3359  2559  1440
   141 -1178 -2356 -3246]

  绘制数据的波形,可以看到它与在软件 audacity显示的波形是一致的。

plt.clf()
plt.figure(figsize=(12,8))
plt.plot(sig)
plt.xlabel("sample")
plt.ylabel("amplitude")
plt.grid(True)
plt.tight_layout()
plt.savefig('/home/aistudio/stdout.jpg')
plt.show()

▲ 图1.1.2 OK.WAV 波形图形

(2)波形动态显示

  在 2021年春季学期-信号与系统-第一次作业参考答案-第六题 布置了一道题目,来说明信号的时域和频域显示。

gifpath = '/home/aistudio/GIF'
if not os.path.isdir(gifpath):
    os.makedirs(gifpath)
gifdim = os.listdir(gifpath)
for f in gifdim:
    fn = os.path.join(gifpath, f)
    if os.path.isfile(fn):
        os.remove(fn)

gif_num = 200
start = 7500
length = 500
step = length // 8
wavelength = len(sig)

stepnum = (wavelength - start - length) // step
stepnum = 50

print("stepnum: \\n".format(stepnum))

for i in tqdm(range(stepnum)):
    plt.clf()
    plt.figure(figsize=(10,5))
    plt.plot(sig[start+i*step:start+i*step+length])
    savefile = os.path.join(gifpath, '%03d.jpg'%i)
    plt.savefig(savefile)

▲ 图 数据文件波形

(3)显示音频的视频联合分布

sig = sig*5
f,t,Sxx = signal.spectrogram(sig, fs=8000, nperseg=512, noverlap=256, nfft=8192)
plt.figure(figsize=(12, 8))
plt.pcolormesh(t, f[:2400], Sxx[:2400][:], cmap='Blues') #, shading='gouraud'
plt.ylabel('Frequency[Hz]')
plt.xlabel('Time[sec]')
plt.savefig('/home/aistudio/stdout.jpg')
plt.show

▲ 图1.1.4 绘制的时频联合分布

  为了看清楚音频信号的频谱分布,对上述图像进行增强,如下图所示:

▲ 图1.1.5 增大对比度对应的时频联合分布

  可以看到上述对应的每个音频信号中,低音区的信号幅值比较大,高音区非常小。

  为此对比一下正常录制的电话实际的双音频信号,可以看到它对应的高音频幅值比较大,低音区比较低。所以,声音的问题有可能来自于所生成的音频中,高音与低音的比例不同。

▲ 图1.1.6 对比实际录制的音频

(4)实现三个拨码错误的情况

▲ 图1.1.7 出现三个拨码错误的情况

▲ 图1.1.8 这是刚刚出现的三个拨码错误的情况

 

§02 题总结


  于出现问题的双音频数据进行分析,查找出现拨码错误的原因。通过与正常电话的音频信号进行对比,可以看到合成输出的音频错误的主要表现:高频与低频所对应的幅值出现了倒置,也就是高频的幅值比低频小,这与正常的电话机恰恰相反。

  在出现错误拨码的时候,无论是波形还是频谱都出现了严重的失真。估计是合成双音频软件出现的故障。因为这不像是在普通的双音频基础上叠加噪声所形成的失真现象。

2.1 结论

  造成上述问题最大可能性是:音频合成软件算法出现了问题。需要检查双音频生成算法进行确认问题所在。


■ 相关文献链接:

● 相关图表链接:

以上是关于电话双音频拨号声音中的干扰信号的主要内容,如果未能解决你的问题,请参考以下文章

电话双音频拨码信号采集

如何用声卡采集声音信号 然后用到MATLAB里面

局域网双网卡共享上网

AUGraph 在 iOS 中的电话中断后停止运行

数字信号基于matlab DTMF电话拨号音识别含Matlab源码 218期

基于线性预测的语音编码原理解析