Seeed Studio XIAO nRF52840(Sense)PDM音频转PCM用于语音转录仅输出白噪声的问题求助
Seeed Studio XIAO nRF52840(Sense)PDM音频转PCM用于语音转录仅输出白噪声的问题求助
我目前正在开发一款iOS应用,通过蓝牙从搭载PDM麦克风的Seeed Studio XIAO nRF52840 (Sense)开发板流式传输音频数据。该开发板运行的是OMI Friend固件,原本应该支持蓝牙音频流传输。我现在需要把PDM音频数据转换成PCM格式,再发送给Deepgram做语音转录,但遇到了棘手的问题:转换后的音频全是各种白噪声,Deepgram根本无法完成转录。
项目当前背景
- iOS端采用Swift开发,用CoreBluetooth实现与开发板的连接,Starscream库用来和Deepgram的WebSocket API交互
- PDM音频数据从XIAO BLE Sense板发送到iOS设备后,我会先积累数据,再尝试用Swift中的FIR滤波器完成PDM到PCM的转换
- 转换完成后将PCM数据发送给Deepgram API进行语音转录
已尝试的解决方法
我已经试过几种方式,但结果还是只有白噪声:
- 使用带汉明窗系数的FIR滤波器进行PDM到PCM的转换
- 在保存PCM数据或发送给Deepgram之前,将其转换为小端格式
- 调整PDM增益和FIR滤波器的大小,试图提升音频质量
当前遇到的具体问题
- 用Audacity打开导出的
audio_dump.pcm文件时,只能看到噪声。我导入时的参数设置是:有符号16位PCM、小端字节序、16000Hz采样率、单声道 - Deepgram API没有返回任何转录结果,只会给出空响应
- 音频数据完全没有可识别的语音特征,我怀疑核心问题出在PDM到PCM的转换环节
PDM转PCM的Swift代码片段
private func convertPDMToPCM(pdmData: Data) -> Data? { let firLength = 64 guard pdmData.count >= firLength else { print("Erreur: la taille des données PDM est insuffisante pour la conversion.") return nil } var firCoefficients = [Float](repeating: 0, count: firLength) vDSP_hamm_window(&firCoefficients, vDSP_Length(firLength), 0) let pdmValues = pdmData.flatMap { byte -> [Float] in return (0..<8).map { bitIndex in ((byte >> (7 - bitIndex)) & 0x01) == 1 ? 1.0 : -1.0 } } guard pdmValues.count >= firLength else { print("Erreur: la taille des valeurs PDM est insuffisante pour la conversion FIR.") return nil } let outputLength = pdmValues.count - firLength + 1 var pcmValues = [Float](repeating: 0.0, count: outputLength) vDSP_conv(pdmValues, 1, firCoefficients, 1, &pcmValues, 1, vDSP_Length(outputLength), vDSP_Length(firLength)) let pcmSamples = pcmValues.map { value -> Int16 in return Int16(clamping: Int(min(max(value, -1.0), 1.0) * 32767.0)) } return convertToLittleEndian(data: Data(buffer: UnsafeBufferPointer(start: pcmSamples, count: pcmSamples.count))) }
我的疑问点
我现在不确定问题到底出在哪里:
- 是不是PDM转PCM的逻辑有缺陷,需要用更复杂的滤波器?
- 数据处理步骤(比如端转换)有没有问题?
- 从XIAO板接收的PDM数据,是不是在固件端的配置就出错了?
有没有朋友在使用PDM麦克风并将数据转换为PCM用于语音识别时遇到过类似的问题?任何关于提升PCM输出质量、得到有效转录结果的建议都非常感谢!
提前谢谢大家的帮助和指点!
备注:内容来源于stack exchange,提问作者guillaume olivieri
相关产品推荐
相关产品推荐

