пример iPhone aurioTouch: Удалите DC

Я смотрю на пример iPhone aurioTouch конкретно на следующем коде:

static OSStatus PerformThru(
                        void                        *inRefCon, 
                        AudioUnitRenderActionFlags  *ioActionFlags, 
                        const AudioTimeStamp        *inTimeStamp, 
                        UInt32                      inBusNumber, 
                        UInt32                      inNumberFrames, 
                        AudioBufferList             *ioData)
{
    aurioTouchAppDelegate *THIS = (aurioTouchAppDelegate *)inRefCon;
    OSStatus err = AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
    if (err) { printf("PerformThru: error %d\n", (int)err); return err; }

    // Remove DC component
    for(UInt32 i = 0; i < ioData->mNumberBuffers; ++i)
        THIS->dcFilter[i].InplaceFilter((SInt32*)(ioData->mBuffers[i].mData), inNumberFrames, 1);

    // ...

}

в файле aurioTouchAppDelegate.mm.

Вопрос о новичке: Что делает, "Удаляют постоянную составляющую тока", делают? Любой указатель на учебную статью об этом ценится.

Заранее спасибо за Вашу справку.

6
задан ThomasRS 15 February 2011 в 05:19
поделиться

1 ответ

Вот код для метода InplaceFilter:

void DCRejectionFilter::InplaceFilter(SInt32* ioData, UInt32 numFrames, UInt32 strides) 
{ 
    register SInt32 y1 = mY1, x1 = mX1; 
    for (UInt32 i=0; i < numFrames; i++) 
    { 
        register SInt32 x0, y0; 
        x0 = ioData[i*strides]; 
        y0 = smul32by16(y1, mA1); 
        y1 = smulAdd32by16(x0 - x1, mGain, y0) << 1; 
        ioData[i*strides] = y1; 
        x1 = x0; 
    } 
    mY1 = y1; 
    mX1 = x1; 
} 

По сути, код выполняет фильтр высоких частот на аудио, чтобы удалить постоянный компонент частотного спектра, который также называют DC смещением. Коэффициент (альфа в статье Википедии) для фильтра по умолчанию установлен в коде на 0,975, а типичные значения для фильтров удаления постоянного тока составляют от 0,9 до 1,0. Если вы измените частоту дискретизации, то, возможно, вам захочется изменить этот коэффициент, но я бы не стал слишком беспокоиться об этом.

8
ответ дан 10 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: