概述
我正在使用带有pdm(脉冲密度调制)MEMS麦克风的嵌入式系统(NUCLEO-L476RG)。 请注意,我对音频处理不是很熟悉。 该程序目前可以通过快速傅立叶变换将pdm值转换为频域。 但是,我需要时域中的数据或将其转换为PCM。 基本上,音频数据使我能够创建WAV文件。 因此,我尝试自行捕获pdm数据,但是以某种方式打印时,我得到125的倍数。即0 -1024 -1792 -256 -256 -256 -1024 -1280 -768 -768 -1536 -256
这些值代表什么? pdm值不应该是单个位吗? 如果有可能,我需要什么驱动程序/中间件将pdm转换为pcm? 作为参考,我使用了CMSIS DSP库中的arm_math.h(如果相关)。 这可能是不够的信息,请随时问我有关我错过的事情的问题,谢谢。
我没有尝试太多的事情,因为它不是我的代码库,所以我一开始并不完全了解它。
// I think pdm data comes from this function
// and stored in 'Buff'
HAL_DFSDM_FilterRegularStart_DMA(&hdfsdm1_filter0, Buff,
FFT_SampleNum)
.
.
.
.
.
// This is where pdm values are plugged into fast fourier transform
// input data
for (uint32_t i = 0; i < FFT_SampleNum; i++)
FFT_inp[i] = (float) FFT_inp_int32[i];
// Windowing
arm_mult_f32(FFT_inp, FFT_window, FFT_inp, FFT_SampleNum);
// Execute FFT
arm_rfft_fast_f32(&S, FFT_inp, FFT_oup, 0);
// calculate magnitude
arm_cmplx_mag_f32(FFT_oup, FFT_mag, FFT_SampleNum / 2);
// Normalization (Unitary transformation) of magnitude
arm_scale_f32(FFT_mag, 1.0f / sqrtf((float) FFT_SampleNum),
FFT_mag, FFT_SampleNum / 2);
// AC coupling
for (uint32_t i = 0; i < FFT_SampleNum / 2; i++)
{
if (*(FFT_frq + i) < FFT_AC_COUPLING_HZ)
FFT_mag[i] = 1.0f;
else
break;
}
最后
以上就是可耐豆芽为你收集整理的matlab pdm转pcm_c - 将pdm数据转换为pcm或其他音频数据格式 - 堆栈内存溢出的全部内容,希望文章能够帮你解决matlab pdm转pcm_c - 将pdm数据转换为pcm或其他音频数据格式 - 堆栈内存溢出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复