오디오에 대해 이중 (64 비트) 부동 소수점을 고려해야하는 경우


12

최신 프로세서에서 오디오를 합성하고 처리 할 때 단정도 (32 비트) 부동 소수점 이외의 것을 사용하는 것을 고려할 때? 분명히 현실 세계로 들어오고 나가는 오디오는 16/24 비트이므로 소프트웨어의 신호 (오디오 자체 및 필터 계수와 같은 것)의 정밀도에 대해서만 이야기하고 있습니다.

다음을 가정하십시오.

  • CPU / DSP는 단 정밀도 및 배정 밀도 모두를위한 하드웨어 부동 소수점 지원
  • 우선 순위는 고성능이 아닌 고품질 오디오입니다. 예를 들어, 더 나은 (지각 적) 품질을 제공한다면 배정 밀도가 고려 될 것입니다.

답변:


9

IEEE float 싱글은 약 24 비트의 가수 만 제공합니다. 그러나 많은 DSP / 필터링 알고리즘 (단위 원 근처에 극점 / 제로가있는 IIR biquad 등)은 중간 결과 계산 제품 (누산기 등)에 대해 24 비트 이상의 가수를 필요로합니다. 24 비트 이러한 유형의 알고리즘의 경우 32, 40 및 48 비트 스케일 정수 누산기가 종종 FPU가없는 DSP와 함께 사용되었습니다.

그러나 현재 많은 프로세서 (PC, 스마트 폰 등)에서 배정 밀도 FPU는 알고리즘에 24 비트 이상의 중간 제품이 필요한 경우 32 비트 또는 64 비트 스케일 정수를 사용하는 것보다 훨씬 빠릅니다.

데이터 캐시가 손상되지 않도록 원시 데이터는 짧은 정수 또는 단 정밀도 부동 소수점 형식 일 수 있지만 더 많은 로컬 계산 커널 만 더 높은 해상도 형식을 사용할 수 있습니다. 그러나 DSP 모듈간에 중간 계산 결과를 공유하는 경우 모듈 간 교환 프로토콜이 더 높은 해상도 (24 비트 가수) 버스 또는 데이터 형식의 이점을 얻을 수도 있습니다.


이것은 내가 찾은 정보의 종류입니다. 필터를 작동시키기 위해 배정 밀도가 필요한 경우의 구체적인 예를 친절하게 제공 할 수 있다면이 대답을 받아 들일 것입니다. 즉, 단 정밀도로 나쁜 소리 (또는 적어도 평범한 소리)이지만 버터처럼 부드럽습니다 배정도.
user1849104

또한 캐시 를 휴지통으로 이동 한다는 것은 정확히 무엇을 의미 합니까? 데이터를 두 배나 많이 사용하면 상황이 끔찍하게 느려질 것입니까?
user1849104

단위 원 근처에 극점 / 제로 점을 가진 IIR을 예로 들었습니다. 캐시가 있으면이 캐시에 맞는 알고리즘 및 작업 데이터 세트가 그렇지 않은 것보다 훨씬 빠를 수 있습니다.
hotpaw2

9

CPU / DSP에는 단 정밀도 및 배정 밀도 모두에 대한 하드웨어 부동 소수점 지원이 있습니다.

그것은 실제로 어떤 종류의 지원에 대해 이야기하고 있는지에 달려 있습니다. x86에서 x87 스타일 부동 소수점 명령어를 사용하면 단 정밀도 또는 배정 밀도로 작업하든 전체 80 비트 내부 정밀도와 동일한 처리 시간을 얻을 수 있습니다.

그러나 SIMD 명령어를 사용할 때는 64 비트 부동 소수점보다 32 비트 부동 소수점을 사용하여 두 배 더 많은 작업을 수행 할 수 있습니다. 큰 문제입니다.

고려해야 할 또 다른 사항은 메모리입니다. 배정도 나누기는 가장 빠른 수준의 캐시 메모리에 맞는 데이터 양을 두 배로 나눕니다.

최신 프로세서에서 오디오를 합성하고 처리 할 때

어떤 종류의 합성 및 처리를하는지 알려줍니다. IIR 필터 (또는 일반적으로 상태 변수 및 / 또는 피드백이있는 항목)와 관련이있는 경우 32 비트를 사용하지 않으면 발자국 (계수 잘림으로 인한 즉시 성 또는 낮은 컷오프 부정확성)을보다 쉽게 ​​포착 할 수 있습니다. 하고있는 일에 대해 너무 많이 생각하십시오. 일부 필터 토폴로지는 32 비트에서 완벽하게 작동합니다.

어쨌든, 그것은 수치 정밀도 문제입니다-품질면에서 지각 적 차이는 없습니다. 하드웨어 오디오 체인이 20 비트 이상의 정밀도를 가질 것으로 기대한다는 것은 우스운 일임을 명심하십시오 (보드가 완벽하게 라우팅되고 모든 부품이 이상적이라고 가정 할 때 우리는 여전히 Johnson 노이즈의 한계에 도달하고 있습니다!) 이 정밀도는 주로 단 정밀도 부동 소수점으로 덮여 있습니다. 하이 엔드 믹싱 데스크의 신호 경로에는 50 개의 연산 증폭기가 있으며 단 정밀도 플로트에서 산술 연산의 양자화 노이즈보다 개별적으로 몇 배 더 많은 왜곡이 있습니다.


SIMD 명령어와 함께 단 정밀도를 사용하면 항상 배정도보다두 배 의 성능을 제공한다고 말할 수 있습니까?
user1849104

이전 주석을 더 이상 편집 할 수 없으므로 SIMD 명령어 세트를 (직접) 사용할 기회가 없었습니다. 단 정밀도를 사용하고 두 배의 성능을 얻을 수 있습니까? 아니면 현실이 방해가 되나요?
user1849104

6

알고리즘의 수치 요구 사항을 알고 그에 따라 정밀도를 선택해야합니다.

32 비트 부동 소수점은 24 비트 가수와 8 비트 지수를 갖습니다. 이는 약 1540dB의 동적 범위에서 약 150dB의 신호 대 잡음비를 제공합니다. 대부분의 오디오에는 충분합니다. 배정 밀도는 대략 두 배나됩니다.

각 알고리즘에는 수치 정밀도에 대한 특정 요구 사항이 있습니다. 내가 알고있는 모든 오디오 알고리즘을 올바르게 설계하면 32 비트 부동 소수점으로 잘 작동합니다. "올바로 디자인되었습니다"는 키워드입니다. 예를 들어 II IIR bi-quad 필터에서 직접 구현 된 44.1kHz에서 샘플링 된 40-200Hz의 6 차 대역 통과는 실제로 32 비트에서 약간의 노이즈 문제가 있습니다. 그러나 전치 형태 II 또는 직접 형태 I 필터로 완벽하게 작동합니다.

예를 들어 Matlab의 residuez () 함수를 사용하여 동일한 대역 통과 필터의 부분 분수 확장을 시도하면 배정 밀도로도 나쁜 결과를 얻을 수 있습니다. 이 특정 입력 데이터에 대한 알고리즘의 수치 요구 사항은 배정 밀도가 제공하는 것을 초과합니다. 이 문제를 해결하는 열쇠는 정밀도를 맹목적으로 높이는 것이 아니라 더 나은 알고리즘을 사용하는 것입니다.

마지막으로 플로팅 (32 비트 또는 64 비트)을 취약하게 만드는 요소를 살펴 보겠습니다. 다이나믹 레인지가 넓습니다. 즉, 신호를 200dB로 축소하고, 500dB로 증폭하고, 다시 300dB로 축소하고, 시작한 위치를 정확하게 종료 할 수 있습니다 정밀도의 손실이 거의 없습니다. 그래서 그렇지 않습니다. 부동 소수점은 크기가 크게 다른 숫자를 추가하는 데 문제가 있습니다. 작은 숫자를 추가해도 아무런 차이가 없습니다. 즉, 1 + dx = 1이됩니다. 이 숫자 "dx"는 32 비트 부동 소수점의 경우 약 1.2e-7이고 64 비트의 경우 2.2e-16입니다. 알고리즘에 크기가 큰 숫자를 더하거나 빼는 것이 포함되면 문제가 발생할 수 있습니다.

이에 대한 좋은 예는 앞에서 언급 한 Direct Form II 필터입니다. Direct From II 필터 (예 : https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html 참조 )는 기본적으로 입력을 필터링하여 상태 변수를 계산합니다. 극 전용 전송 기능을 먼저 사용한 다음 0으로 필터링하여 출력을 만듭니다. 이제 극점이 단위 원에 가까워지면 극 전용 전달 함수가 매우 커집니다. 따라서 상태 변수는 입력보다 훨씬 클 수 있으며 (80db ~ 100dB 더 커짐) 입력과 상태 변수를 합하면 많은 노이즈가 발생합니다.

여기서 해결책은 전치 된 Form II 또는 Direct Form I 필터로 이동하는 것입니다. 분석에 따르면 상태 변수는 입 / 출력보다 12dB 또는 그 이상의 값보다 클 수 없으므로 문제 크기 불일치가 처음에 발생하지 않습니다.


2

단 정밀도에 비해 배정 밀도를 높이면 범위가 넓어지고 해상도가 향상되는 두 가지 이점이 있습니다. 범위가 넓어지면 응용 프로그램에 차이가 생기면 매우 놀랍습니다. 그렇다면 스케일링에 문제가있을 수 있습니다.

개선이 있다면 해결책이 될 것입니다. 해상도가 높을수록 양자화 노이즈가 줄어 듭니다 . 양자화 노이즈가 다른 모든 노이즈 소스와 같은 레벨에 근접하지 않으면 차이가 없을 것입니다. 양자화 오류에서 발생하는 노이즈의 양을 파악하기 위해 노이즈 및 신호 레벨에 대한 분석을 수행 할 수 있습니다. 차이가 있는지 확인하십시오.


2

생성과 렌더링 (16/24 비트 정수로 변환) 사이에서 많은 처리를 수행하는 합성 오디오를 사용하는 경우 컴퓨터의 최상의 수치 정밀도로 작업하는 것이 좋습니다.

정수와 부동 소수점 숫자를 근본적으로 구분하는 것도 중요합니다. 배정 밀도 부동 소수점 (64 비트)은 64 비트 정수와 다르며 사용하는 소프트웨어 도구에 따라 소프트웨어의 임의 정밀도 정수로 작업 할 수도 있습니다. 내가 아는 한, AD 변환은 항상 샘플링 된 사운드를 정수 형식으로 저장합니다.

완전히 확신 할 수는 없지만 이미 부동 소수점에서 사운드를 생성하는 경우 더 일반적인 아티팩트는 정의에 따라 표시되지 않으며 훨씬 더 "오디오 품질"로 처리 할 수 ​​있습니다. 어쩌면 이미 일부 효과를 생성기 자체에 적용한 후에 만 ​​사운드 샘플을 생성 할 수도 있습니다. 잠재적 인 아티팩트를 실제로 소개하는 유일한 순간은 예를 들어 .WAV와 같은 정수 파일 형식으로 출력하기 위해 변환하는 경우입니다.

실제로 오늘날 대부분의 컴퓨터에는 기본 "이중"(64 비트) 정밀도가 있기 때문에 더 이상 32 비트로 작업 할 이유가 없습니다 ...

희망이 도움이됩니다!


3
SIMD를 사용하지 않으면 "더 이상 32 비트로 작업 할 이유가 없습니다 ..."
pichenettes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.