我是靠谱客的博主 可耐豆芽,最近开发中收集的这篇文章主要介绍matlab pdm转pcm_c - 将pdm数据转换为pcm或其他音频数据格式 - 堆栈内存溢出,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我正在使用带有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或其他音频数据格式 - 堆栈内存溢出所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部