b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[C语言] PCM音频数据处理

电脑杂谈  发布时间:2020-05-22 03:28:10  来源:网络整理

pcm 采样率转换 算法_模拟信号采样与ad转换_pcm 转换

用麦克风录制的PCM数据是16bit,48KHz,单声道,我想以16KHz的采样率获得PCM数据,然后通过降低采样率pcm 采样率转换 算法,实现48000HZ到16000HZ采样率的转换.

pcm 采样率转换 算法_模拟信号采样与ad转换_pcm 转换

转换原理相对简单. 48000HZ降低到16000HZ,实际上是降低了三倍. 在同一时间单位间隔内,48000HZ采样3点pcm 采样率转换 算法,16000HZ采样1点. 要获取3个数据,必须根据这3个数据计算1个数据,该数据对应于16000HZ文件中的一个数据.

pcm 转换_模拟信号采样与ad转换_pcm 采样率转换 算法

【C语言】PCM音频数据处理---降低采样率_第1张图片

模拟信号采样与ad转换_pcm 转换_pcm 采样率转换 算法

具体实现如下

pcm 采样率转换 算法_pcm 转换_模拟信号采样与ad转换

#define OLD_FILE_PATH "file.pcm"
#define DOWN_FILE_PATH "downsample.pcm"
void pcm_downsample(void)
{
    short sRead = 0;
    short tempSum = 0;
    int size = 0;
    int flag = 0;
    FILE *fp = fopen(OLD_FILE_PATH, "rb+");
    FILE *fp_down = fopen(DOWN_FILE_PATH, "wb+");
    while(!feof(fp))
    {        
        size = fread(&sRead, 2, 1, fp); // 一次读两个字节,16bit
        if(size>0)
        {
            tempSum = tempSum + sRead; // 求和
            flag++;
            if(flag == 3)              // 如果取了三个点
            {
                flag = 0;
                tempSum = tempSum/3;   // 求平均值,你可以根据自己需要去修改,不一定要求平均值,可以直接取一个点
                fwrite(&tempSum, 2, 1, fp_down);    
                tempSum = 0;
            }
        }
    }
    fclose(fp);
    fclose(fp_down);
}

在这里,我将3点转换为1点. 这是一种获取平均值的算法. 您可以使用其他算法进行转换. 如果要将其降低到其他采样率,请遵循相应的比率. 只需采样即可.

1. PCM数据格式


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-218421-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...