2012-12-19 3 views
4

나는 ffmpeg에서 나온 샘플을 가지고 있는데, 매우 자주 16 비트 샘플 (짧은 타입)이다. dbGain과 함께 iir band pass 필터를 사용했다. here으로 필터링 한 후 가끔씩 짧은 타입 오버플로가 발생하고 그 결과가 일부 발생한다. 계산 된 샘플 값이 32767/-32767에서 벗어날 때 노이즈가 발생합니다. 오디오 pcm 샘플 클리핑을 벗어나는 방법은 없습니다. 어떤 접근법이 존재할 수 있습니까?등화 후 오디오 샘플 16 비트 클리핑을 피하는 방법은 무엇입니까?

내가 봤지만 어떤 실제 예제를 찾을 수 없습니까? I 정수하고 노이즈가 계속 발생 ::

int result = A1 * ((int) Rx) + A2 * ((int) Rxx) + A3 * ((int) Rxxx) 
        - B1 * ((int) Ryy) - B2 * ((int) Ryyy); 
if (result > 32767) 
    result = 32767; 
if (result < -32700) 
    result = -32700; 
y = (short) result; 
+0

필터의 게인이 양수이면 채도가 높아질 위험이 있습니다. 구체적인 질문을 더 잘 설명 할 수 있습니까? –

+0

구체적으로 무엇을 알고 싶습니까? – testCoder

+0

글쎄, 만약 당신이 이득을 적용한다면, 왜 그것이 때때로 오버플로/포화 될 것이라고 기대하지 않습니까? –

답변

2

PCM 샘플의 범위에 있어야한다 16 비트 [-32768 오버플 확인 전달 함수의 연산 결과를 전송할

UPDATE

.. + 32767]. 입력 신호에 수학 (바이 쿼드 필터)을 적용하면 출력이 범위 내에 머물러 있다는 보장이 없으며, 이는 긍정적 인 이득을 적용 할 경우 필연적 인 결과입니다.

  • 메이크업 :

    범위의 경계를 타격하는 처리의 이런 종류의 자연적인 부작용 때문에

    는, 당신은 (는) 방법 중 하나 (목록이 안된다 가득합니다)를 사용하여 돌봐로되어있다 귀하의 입력 신호가 충분히 조용하고/또는 출력을 큰 가치에 대한 여유를 제공하기 위해 몇 비트 오른쪽으로 값을 이동
  • 는 24 비트 PCM과 같은 출력 신호에 대해 높은 비트 니스를 사용합니다.
  • 부동 소수점 PCM 용 PCM 범위 밖에서 정밀한 손실로 출력 신호
관련 문제