가능한 소음 형성으로 제한?


9

100kHz, 16 비트 애플리케이션에서 노이즈 쉐이핑을 수행하여 DC-25kHz 대역에서 최소 노이즈로 모든 양자화 노이즈를 25khz-50kHz 대역으로 전환하려고합니다.

강화 학습을 통해 31 샘플 오류 필터 커널을 생성하도록 수학을 설정했습니다. 중심선은 비정형 디더 노이즈 레벨입니다. 이것은 "Gerzon-Craven"노이즈 쉐이핑 정리와 일치합니다.

학습 후 발생하는 노이즈 스펙트럼

이제 내 문제 :

Gerzon-Craven 정리가 그것을 금지하지는 않지만 광범위한 학습 후에도 소음을 더 많이 형성 할 수는 없습니다. 예를 들어, 저 대역에서 40dB 감소 및 고 대역에서 40dB 향상을 달성 할 수 있어야 합니다.

그래서 또 다른 근본적인 한계가 있습니까?

나는 Shannon의 소음 / 샘플링 / 정보 정리를 살펴 보았지만, 잠시 후, 그로부터 단 한도를 도출 할 수있었습니다. Gerzon-Craven 정리는 Shannon 정리의 직접적인 결과 인 것 같습니다.

도움을 주시면 감사하겠습니다.

편집 : 추가 정보

먼저, 위의 노이즈 쉐이핑을 생성하는 필터 커널입니다. 가장 최근 샘플은 오른쪽 에 있습니다. BarChart의 숫자 값은 .01로 반올림되었습니다 : {-0.16, 0.51, -0.74, 0.52, -0.04, -0.25, 0.22, -0.11, -0.02, 0.31, -0.56, 0.45, -0.13, 0.04, -0.14, 0.12, -0.06, 0.19, -0.22, -0.15, 0.4, 0.01, -0.41, -0.1, 0.84, -0.42, -0.81, 0.91, 0.75, -2.37, 2.29} (정확한 막대 문자는 아니지만 유사한 곡선을 생성 함) )

RIGHT에서 가장 최근 샘플 인 커널을 필터링합니다.

오류 피드백 구현에 대한 또 다른 참고 사항 :

나는 오류 피드백의 두 가지 다른 구현을 시도했다. 먼저 둥근 출력 샘플을 원하는 값과 비교하고이 편차를 오류로 사용했습니다. 두 번째로 반올림 된 출력 샘플을 (입력 + 오류 피드백)과 비교했습니다. 두 방법 모두 매우 다른 커널을 생성하지만 두 가지 방법 모두 거의 동일한 노이즈 쉐이핑 강도에서 수평을 유지하는 것으로 보입니다. 여기에 게시 된 데이터는 두 번째 구현을 사용합니다.

다음은 디지털 웨이브 샘플을 계산하는 데 사용되는 코드입니다. step은 반올림을위한 stepize입니다. wave는 디지털화되지 않은 파형입니다 (신호가 적용되지 않은 경우 일반적으로 0).

TestWave[kernel_?VectorQ] := 
 Module[{k = kernel, nf, dith, signals, twave, deltas},
  nf = Length@k;
  dith = RandomVariate[TriangularDistribution[{-1, 1}*step], l];
  signals = deltas = Table[0, {l}];
  twave = wave;
  Do[
   twave[[i]] -= k.PadLeft[deltas[[;; i - 1]], nf];
   signals[[i]] = Round[twave[[i]] + dith[[i]], step];
   deltas[[i]] = signals[[i]] - twave[[i]];
   , {i, l}];
  signals
  ]

강화 방법 :

"점수"는 잡음 전력 스펙트럼을보고 계산됩니다. 목표는 DC-25kHz 대역에서 잡음 전력을 최소화하는 것입니다. 나는 고주파 대역에서 노이즈를 페널티 하지 않으므로 임의로 높은 노이즈는 점수를 줄이지 않습니다. 커널 가중치에 노이즈를 도입하여 배우고 있습니다. 따라서, 나는 (매우 넓고 깊은) 최소 지역에 있지만 어쩌면 이것을 거의 고려하지 않을 것입니다.

표준 필터 설계와 비교 :

Mathematica는 반복적으로 필터를 생성 할 수 있습니다. 주파수 응답을 플롯 할 때 36dB보다 훨씬 더 나은 대비를 가질 수 있습니다. 최대 80-100dB. 숫자 값 : {0.024, -0.061, -0.048, 0.38, -0.36, -0.808, 2.09, -0.331, -4.796, 6.142, 3.918, -17.773, 11.245, 30.613, -87.072, 113.676, -87.072, 30.613, 11.245 , -17.773, 3.918, 6.142, -4.796, -0.331, 2.09, -0.808, -0.36, 0.38, -0.048, -0.061, 0.024}

여기에 이미지 설명을 입력하십시오

그러나 실제 노이즈 쉐이핑에 적용 할 때는 (a) 동일한 ~ 40dB 대비로 고정되어 있으며 (b) 실제로 노이즈 감쇠가없는 학습 된 필터보다 성능이 떨어집니다.

파란색 : 학습 된 필터, 노랑 : 즉시 사용 가능한 등 리플 필터, 이동되지 않음 ... 정말 더 나쁩니다.


2
+1, 매우 흥미로운 질문입니다. 31 번의 탭 이상으로 필터 순서를 늘려 보셨습니까? 31 탭 FIR의 경우 40dB 억제 사운드가 약간 높습니다.
A_A

1
@Olli, 나는 완전히 이해한다고 믿지 않습니다. 필터 커널을 관심이 있다면 게시 할 수 있습니다. 무의미한 말로, 대안으로 오류를 강제하는 진동 가중치가 있습니다.-> 고주파로 바꿉니다.
tobalt

2
"클래식"필터 설계의 @tobalt는 더 긴 필터가 정지 대역에서 가파르고 /거나 감쇠가 더 많고 / 또는 통과 대역에서 리플이 적을 것으로 예상되는 결과입니다. 내 생각에 당신의 강화 방법은 어느 시점 이후의 감쇠보다 가파른 것을 보상합니다. 강화하기 위해 사용하는 방법은 무엇입니까?
Marcus Müller

1
Mathematica 의 필터 설계 섹션을 살펴볼 수 있습니다 . 아마도 필터의 사양을 정의하고 기존 기술 중 하나를 사용하여 필터를 만족시키는 필터를 반환 할 수 있습니다.
A_A

1
그 다음입니다 확실히 (선택적 반복) 필터 설계. 필터 사양 (여기에서 게시 한 그대로)을 가져 와서이 함수 (가장 간단한 유형) 를 통해 필터를 만들고 그 결과를 확인하십시오. 강화 학습이 다시 제공하는 계수와 함께 함수의 계수를 보는 것이 좋을 것입니다. 또한 필터 순서와 관련하여 31보다 높을 것으로 예상됩니다. 그런데 신호에 "적응"해야합니까?
A_A

답변:


12

노이즈 쉐이핑없는 기본 디더링

노이즈 쉐이핑이없는 기본 디더링 양자화는 다음과 같이 작동합니다.


그림 1. 기본 디더링 양자화 시스템 다이어그램 잡음은 최대 절대 값이 1 인 제로 평균 삼각 디더입니다. 반올림은 가장 가까운 정수입니다. 잔차 오차는 출력과 입력의 차이이며 분석을 위해서만 계산됩니다.

삼각 디더는 결과 잔차 오차의 분산을 3 배 ( 에서 )만큼 증가 시키지만 순 양자화 오차의 평균과 분산을 값에서 분리합니다 입력 신호의. 즉, 순 오류 신호는 입력과 관련이 없지만 더 높은 모멘트는 분리되지 않으므로 완전히 독립적 인 임의의 오류는 아니지만 아무도 순 오류 신호에 대한 더 높은 모멘트의 의존성을들을 수 있다고 판단한 사람은 아무도 없습니다. 오디오 응용 프로그램에서 입력 신호.11214

독립 가산 잔류 오차를 사용하면 시스템의 간단한 모델을 갖게됩니다.


그림 2. 기본 디더링 양자화의 근사치 잔류 오차는 백색 잡음입니다.

근사 모델에서 출력은 단순히 입력과 독립적 인 백색 잡음 잔류 오차입니다.

노이즈 쉐이핑으로 디더링

Mathematica를 잘 읽을 수 없으므로 시스템 대신 Lipshitz 의 시스템을 분석합니다 . " 최소 가청 잡음 형성 "J. Audio Eng. Soc., Vol.39, No.11, 1991 년 11 월 :

Lipshitz 등 1991 시스템
그림 3. Lipshitz et al. 1991 시스템 다이어그램 (그림 1에서 수정). 필터 (텍스트로 표시됨)에는 오류 피드백 필터로 사용할 수 있도록 1 개의 샘플 지연이 포함되어 있습니다. 노이즈는 삼각 디더입니다.

잔류 오차가 신호 A의 현재 및 과거 값과 독립적 인 경우 시스템이 더 간단합니다.


그림 4. Lipshitz 등의 대략적인 모델. 1991 년 시스템. 필터는도 3에서와 동일하며 하나의 샘플 지연을 포함한다. 더 이상 피드백 필터로 사용되지 않습니다. 잔류 오차는 백색 잡음입니다.

이 답변에서는 좀 더 쉽게 분석 된 근사 모델로 작업 할 것입니다 (그림 4). 원래 Lipshitz et al. 1991 시스템 인 Filter 에는 IIR 및 FIR (Finite Impulse Response) 필터를 모두 포함하는 일반 무한 임펄스 응답 (IIR) 필터 형식이 있습니다. 다음에서는 필터 가 FIR 필터 라고 가정합니다 . 시스템에 대한 계수에 대한 실험을 기반으로 믿습니다. 필터 의 전달 기능 은 다음과 같습니다.

HFilter(z)=b1z1b2z2b3z3

계수 는 1- 표본 지연을 나타냅니다. 근사 모델에는 잔차 오차에서 출력되는 직접 합산 경로도 있습니다. 이것은 Filter 의 부정 출력과 합쳐져 전체 노이즈 쉐이핑 필터 전달 함수를 형성합니다.z1

H(z)=1HFilter(z)=1+b1z1+b2z2+b3z3+.

당신의에서 이동하려면 필터 당신이 순서대로 나열 계수, , 전체 잡음 정형 필터의 전달 함수에 대한 다항식 계수 , 계수의 부호 시스템 다이어그램에서 Filter 출력 의 부정을 설명하기 위해로 변경되고 계수 이 끝에 추가되고 ( 아래 Octave 스크립트에서) 마지막으로 목록이 (by ) 로 바뀝니다 .,b3,b2,b11,b1,b2,b3,b0=1horzcatflip

pkg load signal
b = [-0.16, 0.51, -0.74, 0.52, -0.04, -0.25, 0.22, -0.11, -0.02, 0.31, -0.56, 0.45, -0.13, 0.04, -0.14, 0.12, -0.06, 0.19, -0.22, -0.15, 0.4, 0.01, -0.41, -0.1, 0.84, -0.42, -0.81, 0.91, 0.75, -2.37, 2.29];
c = flip(horzcat(-b, 1));
freqz(c)
zplane(c)

이 스크립트는 크기 주파수 응답과 전체 노이즈 형성 필터의 제로 위치를 표시합니다.

Freqz 플롯
그림 5. 전체 노이즈 형성 필터의 진폭 주파수 응답.

Z 평면 플롯
그림 6. 필터 의 극점 ( )과 영점 ( )의 Z 평면 플롯 . 모든 0은 단위 원 안에 있으므로 전체 노이즈 형성 필터는 최소 위상입니다.×

필터 계수를 찾는 문제는 리딩 계수가 1 인 최소 위상 필터를 설계하는 문제로 재구성 할 수 있다고 생각합니다. 이러한 필터의 주파수 응답에 고유 한 한계가있는 경우 이러한 한계는 동등한 한계로 넘어갑니다. 이러한 필터를 사용하는 노이즈 쉐이핑

전 극 설계에서 최소 위상 FIR로 변환

상이하지만 다른 방식으로 등가 필터를 설계하는 절차는 Stojanović et al. , "초 구형 다항식에 기반한 올폴 재귀 디지털 필터 설계", Radioengineering, vol 23, no 3, 2014 년 9 월. IIR 전 극 저역 통과 필터의 전달 함수에 대한 분모 계수를 계산합니다. 이들은 항상 1의 선행 분모 계수를 가지며 안정적인 IIR 필터의 요구 사항 인 단위 원 안에 모든 극이 있습니다. 이러한 계수가 최소 위상 FIR 노이즈 형성 필터의 계수로 사용되는 경우, 저역 IIR 필터 (반송 함수 분모 계수가 분자 계수가 됨)와 비교하여 역 고역 주파수 응답을 제공합니다. 표기법에서 해당 기사의 계수 세트 {-0.0076120, 0.0960380, -0.5454670, 1.8298040, -3.9884220, 5.8308660, -5.6495140, 3.3816780}는 사양에 정확히 맞지 않지만 노이즈 형성 응용 프로그램에 대해 테스트 할 수 있습니다.

주파수 응답
그림 7. Stojanović 등의 계수를 사용한 FIR 필터의 크기 주파수 응답. 2014.

극점 그림
그림 8. Stojanović 등의 계수를 사용한 FIR 필터의 극점 플롯. 2014.

전 극 전송 기능은 다음과 같습니다.

H(z)=11+a1z1+a2z2+a3z3+

그래서, 안정한 모든 극 IIR 저역 통과 필터를 설계하고 사용 로 계수 1의 선두 계수 최소 위상 고역 통과 FIR 필터를 얻을 계수.ab

전 극 필터를 설계하고이를 최소 위상 FIR 필터로 변환하기 위해 아날로그 프로토 타입 필터에서 시작하여 극선과 영점을 쌍 선형 변환을 사용하여 디지털 도메인에 매핑하는 IIR 필터 설계 방법을 사용할 수 없습니다 . 여기에는 cheby1, cheby2ellip옥타브와 Python의 SciPy가 포함됩니다. 이러한 방법은 z 평면 원점에서 0을 제거하므로 필터는 필수 전극 유형이 아닙니다.

이론적 질문에 대한 답변

샘플링 주파수의 1/4 이상의 주파수에서 얼마나 많은 노이즈가 발생하는지 신경 쓰지 않는다면 Lipshitz et al. 1991은 귀하의 질문을 직접 해결합니다.

대역의 일부에 걸쳐 0이되는 가중 함수의 경우, 그림 1의 회로에서 얻을 수있는 가중 잡음 전력 감소에 대한 이론적 한계는 없다. 예를 들어, 귀는 20 kHz와 나이 퀴 스트 주파수 사이의 감도가 0이며이 사실을 반영하기 위해 가중치 기능을 선택합니다.

그들의 그림 1은 극점과 영점이 모두있는 일반적인 IIR 필터 구조의 노이즈 셰이퍼를 보여줍니다. 현재 FIR 구조와는 다르지만 FIR 필터 임펄스 응답은 주어진 안정적인 IIR 필터의 임펄스 응답에 임의로 근접합니다.

필터 설계를위한 옥타브 스크립트

다음은 Stojanovici et al.과 같은 다른 방법으로 계수 계산을위한 Octave 스크립트입니다. 내 매개 변수를 올바르게 선택하여 2014 메소드를 으로 매개 변수화했습니다.ν=0dip

pkg load signal
N = 14; #number of taps including leading tap with coefficient 1
att = 97.5; #dB attenuation of Dolph-Chebyshev window, must be positive
dip = 2; #spectrum lift-up multiplier, must be above 1
c = chebwin(N, att);
c = conv(c, c);
c /= sum(c);
c(N) += dip*10^(-att/10);
r = roots(c);
j = (abs(r(:)) <= 1);
r = r(j);
c = real(poly(r));
c .*= (-1).^(0:(N-1)); #if this complains, then root finding has probably failed
freqz(c)
zplane(c)
printf('%f, ', flip(-c(2:end))), printf('\n'); #tobalt's format

계수로 Dolph-Chebyshev 창으로 시작하여 전달 함수 0을 두 배로 늘리고 주파수 응답을 "상승"하는 숫자를 중간 탭에 추가합니다 (중간 탭은 0으로 간주 됨). 그것은 모든 곳에서 양수이고, 0을 찾고, 단위 원 밖에있는 0을 제거하고, 0을 다시 계수로 변환하고 (선행 계수 poly는 항상 1 임) 필터를 고역으로 만들기 위해 모든 2 차 계수의 부호를 뒤집습니다. . 스크립트의 결과는 (구식이지만 거의 동일한 버전) 스크립트가 유망 해 보입니다.

크기 주파수 응답
그림 9. 위 스크립트에서 필터의 진폭 주파수 응답 (이전 버전이나 거의 동일한 버전).

극점 그림
그림 10. 위 스크립트에서 필터의 폴-제로 플롯 (오래되었지만 거의 동일한 버전).

표기법에서 위 스크립트의 계수 (이전 버전은 거의 동일한 버전) : {0.357662, -2.588396, 9.931419, -26.205448, 52.450624, -83.531276, 108.508775, -116.272581, 102.875781, -74.473956, 43.140431, -19.131434, 5.923468}. 숫자가 커서 숫자 문제가 발생할 수 있습니다.

노이즈 쉐이핑의 옥타브 구현

마지막으로 옥타브에서 노이즈 셰이핑을 구현했으며 사용자와 같은 문제가 발생하지 않습니다. 의견에 대한 논의를 바탕으로 구현의 한계는 고주파 스펙트럼을 저주파로 흘린 "윈도 잉 없음" 이라는 직사각형 창을 사용하여 노이즈 스펙트럼을 평가 한 것 입니다.

pkg load signal
N = length(c);
M = 16384; #signal length
input = zeros(M, 1);#sin(0.01*(1:M))*127;
er = zeros(M, 1);
output = zeros(M, 1);
for i = 1:M
  A = input(i) + er(i);
  output(i) = round(A + rand() - rand());
  for j = 2:N
    if (i + j - 1 <= M)
      er(i + j - 1) += (output(i) - A)*c(j);
    endif
  endfor
endfor
pwelch(output, max(nuttallwin(1024), 0), 'semilogy');

여기에 이미지 설명을 입력하십시오
그림 11. 일정한 제로 입력 신호를위한 노이즈 쉐이핑의 상기 옥타브 구현으로부터의 양자화 노이즈 스펙트럼 분석. 가로축 : 정규화 된 주파수. 검은 색 : 노이즈 형성 없음 ( c = [1];), 빨간색 : 원래 필터, 파란색 : "필터 디자인을위한 옥타브 스크립트"섹션의 필터.

대체 테스트 시간 도메인
그림 12. 일정한 제로 입력 신호에 대한 노이즈 쉐이핑의 상기 옥타브 구현으로부터의 시간 도메인 출력. 가로 축 : 샘플 번호, 세로 축 : 샘플 값. 빨간색 : 원래 필터, 파란색 : "필터 디자인을위한 옥타브 스크립트"섹션의 필터.

보다 극단적 인 노이즈 쉐이핑 필터 (파란색)는 제로 입력에도 매우 큰 양자화 된 출력 샘플 값을 제공합니다.


1
@MattL. 처음에는 tobalt에 전 극 필터가 있다고 잘못 생각했습니다. 첫 번째 계수 1을 갖는 FIR 필터라는 것을 깨달았을 때 답을 다시 썼습니다. 또한 Gerzon-Craven은 필터가 최적의 위상을 유지하기 위해 최소 위상이어야하고 tobalt의 최적화 된 계수도 최소 위상 필터를 제공한다고합니다. 이러한 요구 사항은 IIR 전 극 필터의 계수와 동일하므로 차용 설계 방법을 제안합니다. 표준 IIR도 옵션입니다.
Olli Niemitalo

1
오류를 격리했습니다. 구현할 때와 동일한 파형이 시간에 맞춰 생성됩니다. 그러나 Abs [Fourier [wave]] 함수는 내부 오버 플로우 / 언더 플로우로 실행되는 것 같습니다. 반환 된 스펙트럼이 다르게 보이므로 (높은 층)
tobalt

1
@Olli Niemitalo 옥타브의 FFT가 자동 윈도 잉을 사용하는 것 같습니다. Hann 윈도우를 파형에 적용한 후 "올바른"FFT를 얻을 수 있습니다. 이 접근 방식의 무결성을 간단히 테스트하고 결국 학습을 계속하고 결과를 게시합니다. 모든 노력에 감사드립니다. 귀하의 게시물을 답변으로 표시했습니다.
tobalt

1
@ robertbristow-johnson 나는 그것이 모두 일관성이 있다고 생각합니다. H (z)가 분자로 1을 갖는 재귀 필터에 대한 방정식을 제거했습니다. 그러나 그것은 tobalt의 경우 FIR 필터입니다. 피드백 루프가 있기 때문에 재귀 필터가 될 것이라고 생각할 수도 있습니다. 그러나 디더링 된 양자화는 루프에서 필터 출력에서 ​​잔차로가는 경로를 줄이는 일을합니다.
Olli Niemitalo

1
Lipshitz et al. 1991 사용 와 반대의 의미를 가진이 연습이 나는되었다 여기서 스쿨 표준이 아닌 것에 대해 dsp.stackexchange.com에. ab
Olli Niemitalo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.