如果有些的不对的地方, 还请大家补充:

 

需求:通过pcm音频来筛选是不是电话未接通音“嘟--”。

 

PCM概念:

Pulse-code modulation (PCM)  是用 数字代表采样后的模拟信号的一种方法,它是计算机中数字音频的标准形式。

PCM 流有两个基本属性 去决定 是不是对原始模拟信号有保真度,采样率(每秒采样多少次),位深(决定用来代表采样的量化等级,在一定程度,越大越精确) 。

我们工作中接触到的PCM, 采样率一般是8000和16000,位深一般是8bit或者16bit , 一般用16bit, 比较精确。

8bit= 2^3 (256)   一般用于电话通信。

16bit=2^16 (65536 )  一般16bit够用,用于电脑等音频软件。

信息准备:

本来准备放一条 PCM的音频, 但是不知道怎么上传。。。

观察”嘟“声音频的声音分贝图和频谱图,就会发现,不管是分贝和频谱,电话忙音的 “嘟”声很整齐,所以我是按照频谱去计算的, 它大概分布在400+HZ的位置, 就可以通过傅里叶去计算。 

python 实现PCM筛选电话忙音“嘟--”

python 实现PCM筛选电话忙音“嘟--”

 

脚本:

sample rate=8000 (每秒8000采样点,每毫秒8个采样点)

framelength=25ms  (每帧200个采样点)

frameshift=15ms  (每帧重叠80个采样点)

fftnum=256 (傅里叶变换值为256, 一般为2^N)

读取pcm:

python 实现PCM筛选电话忙音“嘟--”python 实现PCM筛选电话忙音“嘟--”

按照帧长25ms,帧移15ms, 最后一帧不够,补零。

python 实现PCM筛选电话忙音“嘟--”

归一化:

python 实现PCM筛选电话忙音“嘟--”

加hamming窗 ###最后直接用了numpy自带的汉明窗,这是基本实现###:

python 实现PCM筛选电话忙音“嘟--”

FFT,这一步比较重要

fft 对称,求模,做归一化,取最大值,获取索引:

python 实现PCM筛选电话忙音“嘟--”

 

相关知识补充:

  1. FFT

Numpy的fft 与rfft 对比

python 实现PCM筛选电话忙音“嘟--”

经过 Numpy.fft.fft 计算出来是 256个值。

经过 Numpy.fft.rfft 计算出来是 129个值.

 

采样频率为Fs,信号频率F,采样点数为N,某点n所表示的频率为:Fn=(n-1)*Fs

FFT 计算后的第一个值为直流分量,0HZ,整个fft计算后向量。

关于 9.08298730e-01 +0.00000000e+00j 模值镜像对称:

python 实现PCM筛选电话忙音“嘟--”

  1. DFT

 

python 实现PCM筛选电话忙音“嘟--”

  1. 汉明窗

典型的窗口大小是25ms,帧移是15ms。加汉明窗的函数如下,一般情况下,α取0.46 。

            W(n,α ) = (1 -α ) - α cos(2*PI*n/(N-1)),0≦n≦N-1

因为汉明窗的幅频特性是旁瓣衰减较大,主瓣峰值与第一个旁瓣峰值衰减可达40db。

计算完窗函数后,跟信号相乘:Y[n]=w[n]*s[n]

 

参考链接

https://en.wikipedia.org/wiki/Pulse-code_modulation

https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.fft.rfft.html

http://www.ilovematlab.cn/thread-119939-1-1.html

https://blog.csdn.net/iloveyoumj/article/details/53308142

https://www.cnblogs.com/lxy2017/p/4049124.html

 

 

 

 

相关文章:

  • 2022-01-03
  • 2021-11-17
  • 2022-01-29
  • 2022-12-23
  • 2021-08-11
  • 2022-12-23
  • 2022-12-23
  • 2021-10-16
猜你喜欢
  • 2022-12-23
  • 2022-01-10
  • 2022-03-13
  • 2021-10-24
  • 2023-04-07
  • 2022-02-07
  • 2022-12-23
相关资源
相似解决方案