# CMFB **Repository Path**: WeiKangZhao/cmfb ## Basic Information - **Project Name**: CMFB - **Description**: 三分子带算法,使用多相分解余弦调制滤波器组(CMFB, cosine modulated filter banks)。webrtc的方案。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-07-07 - **Last Updated**: 2023-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 余弦调制滤波器组(CMFB, cosine modulated filter banks),用以将高采样率的信号分解为多路低采样率信号,实现所谓的多速率系统。 # 接口 - `struct ThreeBandFilterBank`: 三分子带滤波器对象,核心对象; - `struct ThreeBandFilterBank* ThreeBandFilterBankInst(int length)`: 初始化函数,length是一帧的长度(注意此算法是时域算法并没有帧叠); - `void ThreeBandFilterBankAnalysis(struct ThreeBandFilterBank* inst, const float* in, int length, float* const* out)`: cmfb分解算法,const float* in是输入的一帧信号(长度是length),length和init函数保持一致,比如说480。那么输出是一个二级指针out**, out**分别管理了三个长度160的帧,代表低频中频和高频分量。 - `void ThreeBandFilterBankSynthesis(struct ThreeBandFilterBank* inst, const float* const* in, int split_length, float* out)`:cmfb合成算法。 输入的是一个二级指针in**,管理了长度为split_length=length/3的短帧(16khz), 输出长度为length的合成帧(48khz) - `void ThreeBandFilterBankDestory(struct ThreeBandFilterBank* inst)`: 销毁结构体 # deme demo演示了如何将一个长的48khz音频逐帧分解保存成三个16khz的音频。然后将这三个16khz音频再合成48khz。 输出的三路16khz中第一路是低频段, 可以用来执行原先的16khz pipeline。中高频保持不变, 进行合成就可以获得新的48khz音频。 # usage 编译方法见makefile - `make test` - `./make` 输入的是`cyfe.wav`,分解出来的三通道16khz是`analysis.wav`, 重新合成的wav是`synthesis.wav`。