失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python 音频识别以及信号处理(一)

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

时间:2024-03-13 22:05:34

相关推荐

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

Python 音频信号处理(一)

音频信号类型识别起始频点音频数据fft转化

音频信号类型

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 / SampleRatemaxZCgapAllowed = int(round(SampleRate / InputStartFreq)) + 1zero_count = 0maxZCgap = 0sample_since_last_ZC = 0frame_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 += 1if sample_since_last_ZC > maxZCgap:maxZCgap = sample_since_last_ZCsample_since_last_ZC = 0sample_since_last_ZC += 1if np.abs(expectedZCs - zero_count) > 2 or maxZCgap > maxZCgapAllowed:return Falseelse:return True

其中变量的定义

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

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

音频数据fft转化

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

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

由此我们得到了频域上的数据,我们通过对频域数据的分析

得到被测物在这个频率上的数据(频响和谐波失真)

如果觉得《Python 音频识别以及信号处理(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。