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 音频识别以及信号处理(一)》对你有帮助,请点赞、收藏,并留下你的观点哦!