Gürültü şekillendirme olmadan temel renk taklidi
Gürültü şekillendirme olmadan temel renk taklidi ölçümü şu şekilde çalışır:
Şekil 1. Temel renklendirilmiş nicemleme sistemi diyagramı. Gürültü, maksimum mutlak değeri 1 olan sıfır ortalama üçgen renk taklididir. Yuvarlama en yakın tam sayıdır. Kalan hata çıktı ve girdi arasındaki farktır ve sadece analiz için hesaplanır.
Üçgen renk taklidi, ortaya çıkan artık hatanın varyansını 3 kat arttırır ( 112 için 14) ancak net nicemleme hatasının ortalamasını ve varyansını giriş sinyalinin değerinden ayırır. Bu, net hata sinyalinin girişle ilişkisiz olduğu, ancak daha yüksek anların ayrıştırılmadığı anlamına gelir, bu yüzden tamamen bağımsız rastgele bir hata değildir, ancak hiç kimse insanların net hata sinyalindeki daha yüksek anlara herhangi bir bağımlılığı duyabileceğini belirlemedi. bir ses uygulamasında giriş sinyali.
Bağımsız katkı maddesi kalıntı hatası ile sistemin daha basit bir modeli olurdu:
Şekil 2. Temel renk taklidi miktarının yaklaştırılması. Kalan hata beyaz gürültüdür.
Yaklaşık modelde, çıktı basitçe giriş artı bağımsız beyaz gürültü kalıntı hatasıdır.
Gürültü şekillendirme ile titreme
Mathematica'yı çok iyi okuyamıyorum, bu yüzden sisteminiz yerine sistemi Lipshitz ve ark. "En az duyulabilir gürültü şekillendirme " J. Audio Eng. Soc., Cilt 39, Sayı 11, Kasım 1991:
Şekil 3. Lipshitz ve diğ. 1991 sistem şeması (Şekil 1'den uyarlanmıştır). Filtre (metinde italik olarak yazılmıştır), içinde bir hata geri besleme filtresi olarak kullanılabilmesi için bir örnek gecikme içerir. Gürültü üçgen renk taklididir.
Kalan hata A sinyalinin mevcut ve geçmiş değerlerinden bağımsızsa, daha basit bir sistemimiz var:
Şekil 4. Lipshitz ve ark. 1991 sistemi. Filtre, Şekil 3'tekiyle aynıdır ve içine bir örnek gecikme içerir. Artık geri bildirim filtresi olarak kullanılmamaktadır. Kalan hata beyaz gürültüdür.
Bu cevapta daha kolay analiz edilen yaklaşık model ile çalışacağım (Şekil 4). Orijinal Lipshitz ve ark. 1991 sistemi, Filter , hem IIR hem de sonlu dürtü yanıtı (FIR) filtrelerini kapsayan genel bir sonsuz dürtü yanıtı (IIR) filtre formuna sahiptir. Biz varsayar aşağıdaki Filtre O sisteminizde ne var o senin katsayıları ile benim deneylere dayanarak inanmak gibi bir FIR filtresi. Filtrenin transfer fonksiyonu :
'HF i l t e r( z) = -b1z- 1-b2z- 2-b3z- 3- …
Faktör z- 1bir örnek gecikmeyi temsil eder. Yaklaşık modelde, artık hatadan çıkış için doğrudan bir toplama yolu vardır. Bu, filtrenin reddedilen çıktısı ile toplanır ve tam gürültü şekillendirme filtresi transfer işlevini oluşturur:
'H( z) = 1 -'HF i l t e r( z) = 1 +b1z- 1+b2z- 2+b3z- 3+ … .
Sırayla listelediğiniz Filtre katsayılarınızdan gitmek için… , -b3, -b2, -b1, tam gürültü şekillendirme filtresi transfer fonksiyonu polinom katsayılarına 1 ,b1,b2,b3, …, katsayıların işareti , sistem diyagramında Filtre çıktısının olumsuzlanmasını ve katsayıyı hesaba katacak şekilde değiştirilir.b0= 1sonuna eklenir ( horzcat
aşağıdaki Oktav komut dosyasında) ve son olarak liste tersine çevrilir (tarafından flip
):
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)
Komut dosyası, tam gürültü şekillendirme filtresinin büyüklük frekans yanıtını ve sıfır konumlarını çizer:
Şekil 5. Tam gürültü şekillendirme filtresinin büyüklük frekans yanıtı.
Şekil 6. Kutupların Z-düzlemi çizimi (x) ve sıfırlar (∘) seçin. Tüm sıfırlar birim çemberin içindedir, bu nedenle tam gürültü şekillendirme filtresi minimum fazdır.
Filtre katsayılarını bulma probleminin, önde gelen katsayısı 1 olan minimum fazlı bir filtre tasarlama problemi olarak yeniden biçimlendirilebileceğini düşünüyorum. Bu tür filtrelerin frekans tepkisinde doğal sınırlamalar varsa, bu sınırlamalar eşdeğer sınırlamalara aktarılır bu tür filtreleri kullanan gürültü şekillendirme.
Tüm kutuplu tasarımdan minimum faz FIR'ya dönüşüm
Farklı fakat birçok yönden eşdeğer filtrelerin tasarım prosedürü Stojanović et al. , "Ultrasonik Polinomlara Dayalı All-Pole Özyinelemeli Dijital Filtreler Tasarımı", Radioengineering, cilt 23, no 3, Eylül 2014. Bir IIR tüm kutuplu alçak geçiren filtrenin transfer fonksiyonunun payda katsayılarını hesaplarlar. Bunlar her zaman önde gelen payda katsayısına 1 sahiptir ve birim dairenin içindeki tüm kutuplara sahiptir, bu da kararlı IIR filtreleri gerektirir. Bu katsayılar minimum faz FIR gürültü şekillendirme filtresinin katsayıları olarak kullanılırsa, düşük geçişli IIR filtresine (aktarım fonksiyonu payda katsayıları pay katsayıları haline gelir) kıyasla ters yüksek geçiş frekansı yanıtı verecektir. Gösteriminizde {-0.0076120, 0.0960380, -0.5454670, 1.8298040, -3.9884220, 5.8308660, -5.6495140, 3.3816780}
, tam olarak şartnameye uygun olmasa da, gürültü şekillendirme uygulaması için test edilebilen bu makaleden bir katsayı seti :
Şekil 7. Stojanović ve ark.'nın katsayıları kullanılarak FIR filtresinin büyüklük frekans yanıtı. 2014.
Şekil 8. Stojanović ve ark.nın katsayıları kullanılarak FIR filtresinin kutup sıfır grafiği. 2014.
Tüm kutuplu transfer fonksiyonu:
'H( z) =11 +bir1z- 1+bir2z- 2+bir3z- 3+ …
Böylece, kararlı bir tüm kutuplu IIR alçak geçiren filtre tasarlayabilir ve bir katsayıları b önde gelen katsayısı 1 olan minimum faz yüksek geçişli FIR filtresi elde etmek için katsayılar.
Tüm kutuplu bir filtre tasarlamak ve bunu minimum fazlı FIR filtresine dönüştürmek için, analog prototip filtreden başlayan IIR filtre tasarım yöntemlerini kullanamayacak ve bilinear dönüşümü kullanarak kutupları ve sıfırları dijital etki alanına eşleyemeyeceksiniz. . Yani içerir cheby1
, cheby2
ve ellip
Octave ve Python'un SciPy içinde. Bu yöntemler sıfırları z-düzlemi orijininden uzaklaştıracak, böylece filtre gerekli tüm kutuplu tipte olmayacaktır.
Teorik sorunun cevabı
Örnekleme frekansının dörtte birinden daha yüksek frekanslarda ne kadar gürültü olacağını umursamıyorsanız, Lipshitz ve ark. 1991 sorunuzu doğrudan ele alıyor:
Bandın bir kısmı üzerinde sıfıra giden bu ağırlıklandırma fonksiyonları için, Şekil 1'in devresinden elde edilebilen ağırlıklı gürültü gücü azaltımında teorik bir sınır yoktur. kulak, örneğin 20 kHz ve Nyquist Frekansı arasında sıfır hassasiyete sahiptir ve bu gerçeği yansıtmak için ağırlıklandırma fonksiyonunu seçer.
Şekil 1, şu anda sahip olduğunuz FIR yapısından çok farklı olan, hem kutuplara hem de sıfırlara sahip genel bir IIR filtre yapısına sahip bir gürültü şekillendiriciyi gösterir, ancak söyledikleri de bunun için geçerlidir, çünkü bir FIR filtresi dürtü yanıtı olabilir herhangi bir kararlı IIR filtresinin dürtü tepkisine keyfi olarak yakın bir şekilde yapılır.
Filtre tasarımı için oktav komut dosyası
İşte Stojanovici ve ark.na eşdeğer olduğunu düşündüğüm başka bir yöntemle katsayı hesabı için bir Octave betiği. 2014 yöntemi olarak parametrelendirildiν= 0dip
parametremin doğru seçimi ile .
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
Katsayılar olarak Dolph-Chebyshev penceresi ile başlar, transfer fonksiyonu sıfırlarını iki katına çıkarmak için onu kendiliğinden döndürür, orta musluğa frekans cevabını "kaldıran" bir sayı ekler (orta musluğu sıfır zamanında dikkate alarak) her yerde pozitif olduğunu, sıfırları bulur, birim çemberin dışındaki sıfırları kaldırır, sıfırları katsayılara (en önde gelen katsayı poly
her zaman 1'dir) dönüştürür ve filtreyi yüksek geçiş yapmak için her ikinci katsayının işaretini döndürür . Komut dosyasının görünümünün (eski ama neredeyse eşdeğer bir sürümü) sonuçları ümit verici:
Şekil 9. Yukarıdaki komut dosyasından filtrenin (daha eski fakat neredeyse eşdeğer bir sürümü) büyüklük frekans yanıtı.
Şekil 10. Yukarıdaki komut dosyasından filtrenin kutup sıfır grafiği (eski ama neredeyse eşdeğer bir sürümü).
Dan katsayıları (eski ama neredeyse eşdeğer bir sürüm) gösterimde yukarıdaki komut dosyası: {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}
. Sayılar büyüktür ve bu da sayısal sorunlara yol açabilir.
Gürültü şekillendirmenin oktav uygulaması
Sonunda, Octave'de kendi gürültü şekillendirme uygulamamı yaptım ve sizin gibi sorunlara kapılmadım. Yorumlardaki tartışmamıza dayanarak, uygulamanızdaki sınırlamanın, gürültü spektrumunun, yüksek frekans spektrumunu düşük frekanslara döktüğü "pencere yok" olarak adlandırılan dikdörtgen bir pencere kullanılarak değerlendirildiğini düşünüyorum .
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');
Şekil 11. Sabit sıfır giriş sinyali için gürültü şekillendirmenin yukarıdaki Octave uygulamasından nicemleme gürültü spektral analizi. Yatay eksen: Normalleştirilmiş frekans. Siyah: gürültü şekillendirme yok ( c = [1];
), kırmızı: orijinal filtreniz, mavi: "Filtre tasarımı için oktav komut dosyası" bölümündeki filtre.
Şekil 12. Sabit sıfır giriş sinyali için gürültü şekillendirmenin yukarıdaki Octave uygulamasından zaman alanı çıkışı. Yatay eksen: örnek sayısı, dikey eksen: örnek değeri. Kırmızı: orijinal filtreniz, mavi: "Filtre tasarımı için oktav komut dosyası" bölümündeki filtre.
Daha aşırı gürültü şekillendirme filtresi (mavi), sıfır giriş için bile çok büyük miktarlarda çıktı örnek değerleri ile sonuçlanır.