Pembe ( ) sözde rastgele gürültü üretimi


20

(pembe) gürültüye iyi bir sözde rastgele yaklaşım oluşturmak için , ancak bir tamsayı DSP'de düşük hesaplama maliyetiyle uygulama için uygun olan bazı algoritmalar nelerdir ?1/f


Hafızaya ne dersin? Bu bir endişe değilse, ancak hesaplama ise, istenen frekans eğrisinin rastgele fazlı bir iDFT'si yapın ve bunu cihazınızda statik bir sabit dalga tablosu olarak kaydedin.
leftaroundabout

@leftaroundabout - Ya da rastgele beyaz gürültünün DFT'sini 1 / f frekans eğrisiyle çarpıp IDFT yapmak daha iyi rastgele özelliklere sahip mi?
hotpaw2

1
Beyaz gürültü olduğu çok fark yaratmaz bu yüzden, esasen sabit fonksiyonunun rastgele fazlı IFT.
leftaroundabout

Yanıtlar:


11

6
Bu site kapanırsa, cevabınız kaybolursa, her çözümün temellerini getirmeniz halinde , site referans olarak kullanılarak cevap çok geliştirilecektir.
Kortuk

@Kortuk: Cevap topluluk wiki'si, bu yüzden kendin yap! Buradaki bilgiler diğer web referanslarına işaret etmek için yeterli olmalıdır ( datageist'in ilk seçenek için cevabı gibi ). Yine de daha fazla detayın iyi olacağını kabul ediyorum.
Peter K.

20

Doğrusal Filtreleme

Peter'ın cevabındaki ilk yaklaşım (yani beyaz gürültüyü filtrelemek) çok basit bir yaklaşımdır. Gelen Spektral ses Sinyal İşleme , JOS üretmek için kullanılabilecek bir düşük dereceden filtre veren iyi bir yaklaşım , bir birlikte, analiz elde edilen güç spektrumu yoğunluk ideal bir eşleşen ne kadar iyi. Doğrusal filtreleme her zaman yaklaşık bir değer verir, ancak bu pratikte önemli olmayabilir. JOS'u yorumlamak için:

Beyaz gürültüden pembe gürültü üretebilecek kesin (rasyonel, sonlu sipariş) filtre yoktur. Bunun nedeni filtrenin ideal genlik yanıtının irrasyonel fonksiyon ile orantılı olması gerektiğidir , burada Hz cinsinden frekansı gösterir. Bununla birlikte, algısal olarak kesin de dahil olmak üzere, istenen herhangi bir yaklaşık dereceye kadar pembe gürültü üretmek yeterince kolaydır. f1/ff

Verdiği filtrenin katsayıları aşağıdaki gibidir:

B = [0.049922035, -0.095993537, 0.050612699, -0.004408786];
A = [1, -2.494956002, 2.017265875, -0.522189400];

MATLAB filtre işlevine parametre olarak biçimlendirildiklerinden , netlik sağlamak için aşağıdaki aktarım işlevine karşılık gelirler:

H(z)=.041.096z1+.051z2.004z312.495z1+2.017z2.522z3

Açıkçası, katsayıların tam hassasiyetini pratikte kullanmak daha iyidir. Bu filtreyi kullanarak üretilen pembe gürültünün nasıl göründüğüne bir bağlantı:

Sabit nokta uygulaması için, [-1,1) aralığındaki katsayılarla çalışmak genellikle daha uygun olduğu için, transfer fonksiyonunun bir miktar yeniden işlenmesi uygun olacaktır. Genel olarak, öneri işleri ikinci dereceden bölümlere ayırmaktır , ancak bunun nedeninin bir kısmı (birinci dereceden bölümleri kullanmanın aksine), kökler karmaşık olduğunda gerçek katsayılarla çalışmanın rahatlığı içindir. Bu özel filtre için, tüm kökler gerçektir ve daha sonra ikinci dereceden bölümlere birleştirmek muhtemelen hala bazı payda katsayıları> 1 verir, bu nedenle aşağıdaki gibi üç birinci dereceden bölüm makul bir seçimdir:

H(z)=1b1z11a1z1 1b2z11a2z1 1b3z11a3z1

nerede

bir 1 = 0,99516897 , bir 2 = 0.94384177 , bir 3 = 0.55594526

b1=0.98223157, b2=0.83265661, b3=0.10798089
a1=0.99516897, a2=0.94384177, a3=0.55594526

Taşmalarını önlemek için bu bölümler için bazı makul sıralama seçenekleri ve her bölüm için bazı kazanç faktörleri seçimi gerekecektir. Peter'ın cevabındaki bağlantıda verilen diğer filtreleri denemedim , ancak benzer düşünceler muhtemelen geçerli olacaktır.

Beyaz Gürültü

Açıkça görülüyor ki, filtreleme yaklaşımı ilk etapta birörnek rasgele sayılar kaynağı gerektirir. Belirli bir platform için bir kütüphane rutini mevcut değilse, en basit yaklaşımlardan biri doğrusal bir uyumlu jeneratör kullanmaktır . Etkin bir sabit nokta uygulamasına bir örnek TI tarafından TMS320C5x (pdf) üzerinde Rastgele Sayı Üretimi'nde verilmiştir . Diğer çeşitli yöntemlerin detaylı teorik tartışması, James Gentle tarafından Random Number Generation ve Monte Carlo Method'larında bulunabilir.

kaynaklar

Peter'ın cevabındaki aşağıdaki bağlantılara dayanan çeşitli kaynaklar vurgulamaya değer.

  • Filtre temelli ilk kod grubu Orfanidis tarafından Sinyal İşlemeye Giriş . Tam metin bu linkte mevcuttur ve [Ek B'de] hem pembe hem de beyaz gürültü oluşumunu kapsamaktadır. Yorumda belirtildiği gibi, Orfanidis çoğunlukla Voss algoritmasını kapsar.

  • Voss-McCartney Pembe Gürültü Üreticisi Tarafından Üretilen Spektrum . Sayfanın altına doğru, Voss algoritmasının varyantları hakkında kapsamlı bir tartışmadan sonra, bu bağlantıya dev pembe harflerle referans verilir . Önceki ASCII diyagramlarından bazılarından daha kolay okuma.

  • Wentian Li tarafından hazırlanan 1 / f Gürültü hakkında bir Kaynakça . Buna hem Peter'ın kaynağında hem de JOS tarafından atıfta bulunulur. Genel olarak 1 / f gürültüsü üzerinde 1918'e kadar uzanan baş döndürücü bir referansa sahiptir.


Bu filtre katsayılarını nasıl bulduğu hakkında bir fikrin var mı? Sanırım sadece istenen eğime doğrusal olmayan bir uyum, ancak daha spesifik bir algoritma olup olmadığını bilmek oldukça ilgi çekiciydi.
nibot

Benim en iyi tahminim tezinde belirtilen yaklaşım tekniklerinden biri olurdu . Her iki şekilde de harika bir okuma.
datageist

Vay, bu oldukça bir belge! Bağlantı için teşekkürler.
nibot

1
Filtre beyaz gürültü yöntemindeki sorun, otokorelasyonlu zaman serileriyle aynı büyüklük faz ilişkilerini elde etmemenizdir. Bu nedenle, doğal süreçleri taklit etmeye çalışıyorsanız, beyaz gürültü üretmemeli ve filtrelememelisiniz. Aslında zaman serisi olarak otokorelasyonlu gürültü oluşturmalısınız, yani mevcut değer önceki değere + gürültüye bağlıdır. İstatistiklere bakınız "AR" süreçleri. Her iki yöntemi, ardından FFT'yi kullanarak parazit oluşturarak bunu test edebilir ve gerçekle hayali (frekans alanının karmaşık düzlemi) çizebilirsiniz. Desende büyük bir fark göreceksiniz
Paul S

Merhaba Paul, DSP.SE'ye hoş geldiniz. Gürültünün nasıl ses çıkardığını önemsiyorsanız (örneğin, ses çalışmasında), o zaman büyüklük spektrumu birincil sorundur. Yine de düşüncelerinizi yeni bir cevapta detaylandırabilmeniz harika olurdu. Sitede henüz bu tekniği açıklayan hiçbir şeyimiz olduğunu düşünmüyorum.
datageist

1

1990'dan beri Corsini ve Saletti'nin algoritmasını kullanıyorum: G. Corsini, R. Saletti, "A 1 / f ^ gama Güç Spektrumu Gürültü Dizisi Üreteci", IEEE Enstrümantasyon ve Ölçüm İşlemleri, 37 (4), Aralık, 1988, 615 -619. Gama üssü -2 ile +2 arasındadır. Benim amacım için iyi çalışıyor. Ed

Bu ekran görüntüsü ekleme girişimi işe yararsa, aşağıdaki şekil Corsini ve Saletti algoritmasının ne kadar iyi performans gösterdiğine dair bir örnek göstermektedir (en azından 1990'da programladığım gibi). Örnekleme frekansı 1 kHz, gama = 1 ve 1000 32k FFT PSD'lerin ortalaması alınmıştır.

Corsini ve Saletti algoritması ile 1 / f gürültü için PSD


Bu Corsini ve Saletti (C&S) gürültü jeneratörü önceki yazı kadar takip eder. Sonraki iki şekil, C&S jeneratörünün düşük frekanslı (gama> 0) ve yüksek frekanslı (gama <0) gürültüleri açısından ne kadar iyi performans gösterdiğini göstermektedir. Üçüncü şekil, C&S jeneratörünün 1 / f gürültü PSD'lerini (ilk gönderimle aynı) ve Prof. Orfanidis'in mükemmel kitabında verilen Örnek B.9 1 / f jeneratörünü karşılaştırır (eqn B.29, s. 736). Bu PSD'lerin tümü ortalama 1000 32k FFT PSD'dir. Hepsi tek taraflı ve kötü niyetli. C&S PSD'ler için 3 kutup / on yıl kullandım ve 4 yıl (0,05 ila 500 Hz) istenen kullanılabilir aralık olarak belirledim. Böylece C&S jeneratörü n = 12 kutuplu ve sıfır çiftine sahipti. Örnekleme frekansı 1 kHz, Nyquist 500 Hz ve çözünürlük elemanı 0.0305 Hz'in biraz üzerindeydi. Ed V Düşük frekanslı PSD'ler Yüksek frekanslı PSD'ler 2 1 / f gürültü üretecinin karşılaştırılması

fc10fMfcfM

ai=exp[2π10(iN)/hγ/2hc]
bi=exp[2π10(iN)/hc]
fM=0.5fc


1
Corsini ve Saletti durumu "Bu filtre, her biri gerçek kutup sıfır çiftine sahip N basamaklı birinci dereceden bölümlerden oluşur" ve N kutupları, frekans onayı başına h kutup yoğunluğu ile frekans logaritmasına göre eşit olarak dağıtılır (p / d) ve N sıfırları bunu izler. " Makalenin Tartışma bölümü son derece güzel bir şekilde yapıldı, bu yüzden sadece yaptıklarını programlamakta sorun yoktu. Sahip olduğum tek şey benim eski basılı kopyam ve taranmış bir kopyası. Yukarıdaki PSD için 3 kutup / on yıl kullandım ve PSD ortalama çıkarılmış ve tek taraflı. Ed V
Ed V
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.