电话双音频拨号声音中的干扰信号
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电话双音频拨号声音中的干扰信号相关的知识,希望对你有一定的参考价值。
简 介: 对于出现问题的双音频数据进行分析,查找出现拨码错误的原因。通过与正常电话的音频信号进行对比,可以看到合成输出的音频错误的主要表现:高频与低频所对应的幅值出现了倒置,也就是高频的幅值比低频小,这与正常的电话机恰恰相反。在出现错误拨码的时候,无论是波形还是频谱都出现了严重的失真。估计是合成双音频软件出现的故障。因为这不像是在普通的双音频基础上叠加噪声所形成的失真现象。
关键词
: 双音频,失真,干扰
▲ 图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 结论
造成上述问题最大可能性是:音频合成软件算法出现了问题。需要检查双音频生成算法进行确认问题所在。
■ 相关文献链接:
● 相关图表链接:
以上是关于电话双音频拨号声音中的干扰信号的主要内容,如果未能解决你的问题,请参考以下文章