Python 音频识别以及信号处理(一)

音频信号类型

1.输入信号为待测试模块发出的阶梯型频率的信号
我们通过声卡采集,采集到的信号如下图:
在这里插入图片描述
我们通过excel表格来显示文本数据比较明显:
在这里插入图片描述
该数据显示的是声卡采集出的音频的时域数据(采用的是pcm编码方式)
收到此类数据我们需要使用fft算法将时域数据转化为频域的数据

识别起始频点

被测物按照要求频率发声样例代码中的被测物发声的频率为[4000, 3550, 3150, 2800, 2500, 2240, 2000, 1800, 1600, 1400, 1250, 1120, 1000,900, 800, 710, 630, 560, 500, 450, 400, 355, 315, 280, 250, 224, 200, 180, 160, 140]单位为(Hz)
首先我们需要在声卡采集的数据中找到被测物的起始频点
函数如下:

def search_signal_start(signal):
    expectedZCs = InputStartFreq * FrameSampleRate / SampleRate
    maxZCgapAllowed = int(round(SampleRate / InputStartFreq)) + 1
    zero_count = 0
    maxZCgap = 0
    sample_since_last_ZC = 0

    frame_average = signal - np.mean(signal)
    for i in range(1, len(signal)-1):
        if frame_average[i] >= 0 and frame_average[i-1] < 0:
            zero_count += 1
            if sample_since_last_ZC > maxZCgap:
                maxZCgap = sample_since_last_ZC
            sample_since_last_ZC = 0
        sample_since_last_ZC += 1

    if np.abs(expectedZCs - zero_count) > 2 or maxZCgap > maxZCgapAllowed:
        return False
    else:
        return True

其中变量的定义

InputStartFreq = 4000 #起始频点
InputEndFreq = 140 #结束频点
SampleRate = 48000 #声卡采样率
FrameSampleRate = 2048 音频数据采样样本数

我们通过"过0点"的数量来识别样本中的起始频点

音频数据fft转化

找到起始频点后将识别到的音频数据进行FFT运算

def fft(signal):
    fourrier = np.fft.fft(signal)
    n = signal.size
    timestep = 1 / SampleRate
    freq = np.fft.fftfreq(n, d=timestep)
    return (freq, fourrier)

由此我们得到了频域上的数据,我们通过对频域数据的分析
得到被测物在这个频率上的数据(频响和谐波失真)

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值