iphone - IIR 梳状滤波器帮助

标签 iphone xcode signal-processing core-audio

混响.m

    #define D 1000

        OSStatus MusicPlayerCallback(
        void* inRefCon,
        AudioUnitRenderActionFlags * ioActionFlags, 
        const AudioTimeStamp * inTimeStamp,
        UInt32 inBusNumber,
        UInt32 inNumberFrames
        AudioBufferList * ioData){

MusicPlaybackState *musicPlaybackState = (MusicPlaybackState*) inRefCon;

                //Sample Rate 44.1    
                float a0,a1; 
                double y0, sampleinp;

                    //Delay Gain 
                    a0 = 1; 
                    a1 = 0.5; 

                for (int i = 0; i< ioData->mNumberBuffers; i++){
                AudioBuffer buffer = ioData->mBuffers[i];
                SIn16 *outSampleBuffer = buffer.mData;    
                    for (int j = 0; j < inNumberFrames*2; j++) {  

                            //Delay Left Channel 

                            sampleinp = *musicPlaybackState->samplePtr++; 

                    /* IIR equation of Comb Filter 
                     y[n] = (a*x[n])+ (b*x[n-D]) 
                    */ 

        y0 = (a0*sampleinp) + (a1*sampleinp-D);

                            outSample[j] = fmax(fmin(y0, 32767.0), -32768.0);  


                            j++;            

                    //Delay Right Channel 

        sampleinp = *musicPlaybackState->samplePtr++;

                           y0 = (a0*sampleinp) + (a1*sampleinp-D);

                            outSample[j] = fmax(fmin(y0, 32767.0), -32768.0);  


                        } 
                    } 

                }

好吧,我得到了很多信息,但我在实现它时遇到了困难。有人可以帮忙吗,这可能是我很容易忘记的事情。它只是正常播放,有一点增强,但没有延迟。

最佳答案

您对x0[]的对待变量看起来不正确——按照你的方式,左 channel 和右 channel 将混合在一起。您分配给x0[j]对于左声道,则 覆盖x0[j]具有正确的 channel 数据。所以延迟信号x0[j-D]将要 始终对应右声道,延迟的左声道数据丢失。

您没有说您的采样率是多少,但对于典型的音频应用程序来说, 三个样本的延迟可能不会产生太大的听觉效果。在 44.1 ksamp/秒时, 使用 3 个样本延迟时,滤波器响应的波峰和波谷将位于 14,700 Hz 的倍数。您将得到的只是音频中的单个峰值 范围,在频谱的一部分,几乎没有任何功率(假设 信号是语音或音乐)。

关于iphone - IIR 梳状滤波器帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068832/

相关文章:

matlab - 生成量化矩阵

matlab - MATLAB 中不同长度信号的互相关

iphone - 无法在 UITableView 中为 UITableViewCellAccessoryCheckmark 选择单元格

iphone - 在界面构建器中将颜色应用于uilabel会转到背景?

ios - 在发薪日应用程序中为货币添加逗号

ios - 提交到 App Store 的应用程序和应用程序更新必须使用 Xcode 5.1.1 或更高版本以及 iOS 7 或更高版本的 SDK 构建

iphone - iPhone SDK:设置音频路由,并在静音开关打开时也静音

iPhone dev - 使用 NSDate 对象创建每周、每月或每年的通知?

iphone - 如何停止 Objective C 中的函数递归?

node.js - 如何更改 Node 中 PCM 音频流的音量?