代码之家  ›  专栏  ›  技术社区  ›  coneybeare

利用核心音频实现后处理低通滤波器

  •  2
  • coneybeare  · 技术社区  · 14 年前

    我已经使用基于时间的值实现了一个基本的低通滤波器。这是可以的,但试图找到正确的时间片是猜测工作,并根据不同的输入音频文件给出不同的结果。以下是我现在拥有的:

    - (void)processDataWithInBuffer:(const int16_t *)buffer outBuffer:(int16_t *)outBuffer sampleCount:(int)len {   
        BOOL positive;
        for(int i = 0; i < len; i++) {
            positive = (buffer[i] >= 0);
            currentFilteredValueOfSampleAmplitude = LOWPASSFILTERTIMESLICE * (float)abs(buffer[i]) + (1.0 - LOWPASSFILTERTIMESLICE) * previousFilteredValueOfSampleAmplitude;
            previousFilteredValueOfSampleAmplitude = currentFilteredValueOfSampleAmplitude; 
            outBuffer[i] = currentFilteredValueOfSampleAmplitude * (positive ? 1 : -1);
        }
    }
    

    我该怎么做才能把这段代码转换成允许我把某个赫兹的频率降低一个分贝的代码呢?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Stephen Furlani    14 年前
        2
  •  2
  •   lucius    14 年前

    y = sin (x * bandwidth) / (sin (x) * windowWidth)

    bandwidth = 2 * frequency * n / sampleRate;

    推荐文章