MATLAB'da Sınırlı Gauss Beyaz Gürültüsü Nasıl Üretilir?


16

Bazı makalelerde, katkı gürültüsünün bantla sınırlı Gauss beyazı olduğunu okudum.
MATLAB bu tür gürültü kullanımını nasıl simüle edebilirim?


Sürekli zamanlı sistemlerde, Gausslu olsun olmasın, bant sınırlı beyaz gürültü kavramı iyi tanımlanmış ve iyi anlaşılmıştır. Ayrık zamanlı sistemler için, sorun daha karmaşıktır ve bant sınırlamasının ne olduğunu ve Nyquist frekansı ile nasıl karşılaştırıldığını düşünmeniz gerekir.
Dilip Sarwate

2
@DilipSarwate: Bana göre, "bant sınırlı beyaz gürültü" bir oksimoron! :-)
Peter K.

@PeterK. Bant sınırsız beyaz gürültü kavramı, öncelikle geçiş bandının dışındaki gürültünün özelliklerinin geçiş bandı içinde iken ilgisiz olduğu bant geçiren sistemlerde kullanılır , gürültü, tam olarak frekans bandını geçiren ideal bir bant geçiren filtreden geçen beyaz gürültüden ayırt edilemez. geçiş bandıdır. Beyaz gürültüye göre bir oksimoron değildir (bant sınırlamaları hakkında aşağılayıcı yorumlar olmadan). Ayrıca bakınız, Jason R'nin (buna katılmıyorum) cevabını takiben DRazick'in yorumu (yerinde).
Dilip Sarwate

1
@DilipSarwate: Açıklama için teşekkürler. Anlıyorum, ama yine de bunun çok kötü bir terminoloji seçimi olduğunu düşünüyorum. Bana göre "bant geçiren filtrelenmiş beyaz gürültü" daha doğru, ama sanırım aynı yerde bitiyor.
Peter K.

1
@PeterK. Ne yazık ki, "bant geçiren filtrelenmiş beyaz gürültü" genellikle JasonR'ın cevabında açıklanan süreç anlamına gelir. Beyaz gürültü ile başlayın ve PSD ile orantılı bir işlem elde etmek için aktarım işlevine sahip bir filtreden geçirin . Bant sınırlı beyaz gürültü aynıdır, ancak nin ideal bir bant geçiren filtrenin transfer fonksiyonu olması gerektiğinde ısrar ediyoruz . Beyaz gürültüyle anahtar nokta, sinyalin bantta kalması için kısıtlandığımız sürece, sinyali sınırlı bantlı beyaz gürültüye uygulanan gürültünün nereye koyamayacağımızdır. 'H(f)|'H(f)|2'H(f)
Dilip Sarwate

Yanıtlar:


19

Önce beyaz gürültü üretip sonra istediğiniz bant genişliğine göre filtreleyerek sınırsız Gauss gürültüsü elde edersiniz. Örnek olarak:

% design FIR filter to filter noise to half of Nyquist rate
b = fir1(64, 0.5);
% generate Gaussian (normally-distributed) white noise
n = randn(1e4, 1);
% apply to filter to yield bandlimited noise
nb = filter(b,1,n);

Bunu hep merak ettim, ama eğer böyle bir şey yapılırsa, artık bu konuda Gauss nedir? PDF'nin bu noktada olduğunu sanmıyorum ...
Spacey

8
Gauss rasgele değişkenlerinin özel özelliklerinden biri, iki bağımsız Gauss RV'nin toplamının da Gauss dağılmış olmasıdır. Giriş gürültüsü beyaz olduğundan, filtre çıkışındaki her örneğe birçok bağımsız Gauss rastgele değişkeninin bir toplamı olarak bakabilirsiniz (burada her bir RV'nin varyansı, giriş gürültüsü varyansına ve karşılık gelen filtre musluğunun değerlerine bağlıdır). Bu nedenle, filtre çıkışındaki örnekler de Gauss dağıtılır. Bununla birlikte, filtre çıkışında birbirini izleyen örnekler arasında korelasyon olduğu için, gürültü artık beyaz değildir.
Jason R

Bu özellik Wikipedia'da daha ayrıntılı olarak açıklanmaktadır . Giriş gürültüsü renkli olsa bile özelliğin hala geçerli olduğunu unutmayın ("İlişkili rasgele değişkenler" bölümüne bakın).
Jason R

1
facepalm . Elbette.
Spacey

3
Ancak bu yöntem Beyaz gürültü oluşturmaz. Bir filtre uygulamaya gerek yoktur, her ayrık örneklenmiş gürültünün başlaması bant sınırlıdır.
Royi

9

Jason'ın cevabına küçük bir eklenti olarak: genellikle verilen bir varyans ile band sınırında gürültü üretmeniz gerekir . Bu kodu Jason'ın cevabında verilen koda ekleyebilirsiniz:σ2

var = 3.0;  % just an example  
scale = sqrt(var)/std(nb);
nb = scale*nb;  % nb has variance 'var'

Filtreleme işleminden sonra ölçeklendirmeyi yapmanız gerektiğini unutmayın, çünkü genel olarak filtre gürültü varyansını değiştirir.


2
İyi bir nokta. Filtre katsayılarını , filtre gürültü varyansını etkilemez. Σn=0N-|h[n]|2=1
Jason R

@Matt Güzel ek!
Spacey

4

Ayrık gürültü örnekleri (MATLAB'leri randn/ randörneğin kullanarak ) her oluşturduğunuzda bant sınırlı gürültü üretirsiniz.

Tek yapmanız gereken, ayrı örneklerin varyansının, bu örneklerin alındığı iddia edilen "Sürekli" gürültünün varyansına ayarlanmasıdır.

σcn2δ(t)fsfsσcn2

fs/2

Tam açıklama burada verilmiştir - Spesifik Bant Genişliği için İletişim Sistemlerinde AWGN (Katkı Beyaz Gauss Gürültüsü) Simülasyonu .



2

Neden kimse bahsedilen yaklaşım kullanamıyorum bu yazı ?

İstenen frekanslarla başlar ve filtreleme yerine sinyali oluşturmak için geriye doğru çalışır. Python kodu kullanır, ancak orijinal Matlab koduna da bağlanır.

Bu şekilde yapmanın herhangi bir dezavantajı var mı?


1
orijinal matlab koduna bakıldığında, n, blok uzunluğunuz olan bir blok boyutu için çalışır. 2n örnek istersem, 2 fft yapmaktan daha fazla olan fft uzunluğunu ikiye katlayabilirsiniz. 2 ayrı blok yaparsanız, birinci bloktan ikinci bloğa süreksiz bir geçiş olacaktır. geçişi yumuşatmak için bir pencere kullanabilirsiniz, ancak zaman dizinizi taraklamaktan kaçınmak için 2'den fazla blok yapmanız gerekir. Filtre yöntemini kullanarak, filtre sabit duruma geldiğinde, rastgele sayıları istediğiniz kadar besleyebilirsiniz. Filtre yöntemi için işleme artışı doğrusal olarak ölçeklenir.

0

@Drazick 2013 cevabını değiştirdiği için bu sorunun şu anki görünümünde ortaya çıktığını anlıyorum.

xrand()frand()0x<1

"beyaz gürültü" elbette analog sinyaller için bile yanlış bir isimdir. sonsuzluğa kadar düz spektrumlu bir "güç sinyali" de sonsuz güce sahiptir. açıklandığı gibi üretilen neredeyse gauss ve "beyaz" sinyalin sonlu bir gücü (varyans ve 1'dir) ve tek taraflı olarak ifade edilen sonlu bant genişliği Nyquist'tir. (böylece 'güç spektral yoğunluğu' veya birim frekans başına güç 1 / Nyquist'tir.) ölçeklendirin ve istediğiniz gibi dengeleyin.

i daha sonra bu düzenlemek ve açıkça göstermek için bazı C benzeri sözde kod ekleyebilirsiniz.


-1

Tam spektrumlu beyaz gürültü üretmek ve daha sonra filtrelemek, evinizin beyaz bir duvarını boyamak istediğiniz gibidir, böylece tüm evi beyaza boyamaya ve daha sonra duvar dışındaki tüm evleri boyamaya karar verirsiniz. Aptalca. (Ama elektronikte bir anlamı var).

Herhangi bir frekansta ve herhangi bir bant genişliğinde beyaz gürültü üretebilen küçük bir C programı yaptım (diyelim ki 16kHz merkezi frekans ve 2 kHz "geniş"). Filtreleme yok.

Yaptığım şey basit: ana (sonsuz) döngü içinde merkez frekansta bir sinüsoid üretiyorum +/- yarım bant genişliği ve + yarım bant genişliği arasında rastgele bir sayı, sonra bu frekansı rasgele sayıda örnek (taneciklik) için saklıyorum ve bu sonuç:

16kHz merkez frekansta 2kHz genişliğinde beyaz gürültü

16kHz merkez frekansta 2kHz genişliğinde beyaz gürültü

Sahte kod:

while (true)
{

    f = center frequency
    r = random number between -half of bandwidth and + half of bandwidth

<secondary loop (for managing "granularity")>

    for x = 0 to 8 (or 16 or 32....)

    {

        [generate sine Nth value at frequency f+r]

        output = generated Nth value
    }


}

1
STFT grup boyunca düz değil. Tekniğinizin neden bir avantajı olduğunu göstermediniz. Çoğu boya grimsi beyaz olarak stoklanır ve daha sonra pigment ile karıştırılır. Turuncu boya sadece turuncu malzemeler kullanılarak yapılmaz. Beyaz gürültü yaratmada fazladan bir çalışma yoktur.

@StanleyPawlukiewicz Elektronikte bir gürültü üreteci ve bir filtre iki basit "nesne" olduğundan titizsiniz. Programlamada, bir filtre, sadece gerekli verileri üretmekten çok daha fazla talimat açısından karmaşıktır. Programlama tercih edildiğinde zaman açısından kritik uygulamalarınız varsa yaklaşımım. Düşürdüyseniz, tekrar düşünmenizi öneririm.
Zibri

1
gürültünüz tercih edilmez. spektrum bant boyunca düz değildir. anında bir aşkın fonksiyon çağırmak filtrelemekten daha hızlı değildir. argümanlarınız asılsız

1
Aslında bant içi dalgalanma bir tasarım parametresidir. Merkez frekansta zirve yaptıklarını söylemek yanlıştır

1
Tekniğinizin değiştirilmesi çok kolay olduğu için, neden bir sinyale bağlanmak ve kodunuzun daha az karmaşık olduğunu iddia etmek yerine kendi sinüs dalgası rutininizi yazmıyorsunuz ve bunu iki kişilik ile karşılaştırmıyorsunuz. Siz eklerken, sabit nokta sürümüne ne dersiniz? örnek sayısını artırdıkça tekniğinizin nasıl ölçeklendiğini de düşünebilirsiniz
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.