Come generare rumore bianco gaussiano a banda limitata in MATLAB?


16

In alcuni articoli, ho letto che il rumore additivo è bianco gaussiano a banda limitata.
Come posso simulare questo tipo di rumore usando MATLAB?


Nei sistemi a tempo continuo, il concetto di rumore bianco a banda limitata, che sia gaussiana o no, è ben definito e ben compreso. Per i sistemi a tempo discreto, il problema è più complicato e è necessario considerare quale sia la limitazione della banda e come si confronta con la frequenza di Nyquist.
Dilip Sarwate,

2
@DilipSarwate: Per me, il "rumore bianco limitato dalla banda" è un ossimoro! :-)
Peter K.

@PeterK. La nozione di rumore bianco a banda larga viene utilizzata principalmente nei sistemi a banda passata in cui le caratteristiche del rumore all'esterno della banda passante sono irrilevanti mentre all'interno della banda passante, il rumore è indistinguibile dal rumore bianco che è stato passato attraverso un filtro passa-banda ideale che passa esattamente la banda di frequenza che è la banda passante. Non è più un ossimoro del rumore bianco (senza commenti peggiorativi sui limiti di banda). Vedi anche il commento di DRazick (che è perfetto) dopo la risposta di Jason R (con cui non sono d'accordo).
Dilip Sarwate,

1
@DilipSarwate: grazie per la spiegazione. Capisco, ma continuo a pensare che sia una pessima scelta di terminologia. Per me il "rumore bianco filtrato passa-banda" è più preciso, ma suppongo che finisca nello stesso posto.
Peter K.

1
@PeterK. Sfortunatamente, "rumore bianco filtrato passa-banda" generalmente indica il processo descritto nella risposta di JasonR. Inizia con il rumore bianco e filtralo attraverso un filtro con la funzione di trasferimento per ottenere un processo con PSD proporzionale a . Il rumore bianco a banda limitata è lo stesso, tranne per il fatto che insistiamo sul fatto che deve essere la funzione di trasferimento di un filtro passa-banda ideale . Il punto chiave con il rumore bianco è che non possiamo collocare il segnale dove il rumore non si applica al rumore bianco limitato in banda anche se siamo vincolati a mantenere i nostri segnali in banda. | H ( f ) | 2 H ( f )H(f)|H(f)|2H(f)
Dilip Sarwate,

Risposte:


19

Genererai rumore gaussiano senza limiti generando prima il rumore bianco, quindi filtrandolo in base alla larghezza di banda che desideri. Come esempio:

% 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);

Mi sono sempre chiesto questo, ma se si fa qualcosa del genere, che cosa c'è di più così gaussiano? Non credo che il PDF sia affatto a questo punto ...
Spacey,

8
Una delle caratteristiche speciali delle variabili casuali gaussiane è che la somma di due camper gaussiani indipendenti è anche distribuita gaussiana. Poiché il rumore in ingresso è bianco, è possibile guardare ogni campione in uscita dal filtro come una somma di molte variabili casuali gaussiane indipendenti (in cui la varianza di ciascun RV dipende dalla varianza del rumore in ingresso e dai valori del rubinetto del filtro corrispondente). Pertanto, anche i campioni all'uscita del filtro sono distribuiti gaussiani. Tuttavia, il rumore ovviamente non è più bianco, poiché esiste una correlazione tra campioni successivi all'uscita del filtro.
Jason R,

Questa proprietà è descritta in maggior dettaglio su Wikipedia . Si noti che la proprietà rimane valida anche se il rumore in ingresso è colorato (consultare la sezione "Variabili casuali correlate").
Jason R,

1
facepalm . Ovviamente.
Spacey,

3
Tuttavia, questo metodo non genererà rumore bianco. Non è necessario applicare un filtro, per iniziare ogni rumore discreto campionato è limitato alla banda.
Royi,

9

σ2

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

Si noti che è necessario eseguire il ridimensionamento dopo il filtro, poiché in generale il filtro modifica la varianza del rumore.


2
Σn=0N|h[n]|2=1

@Matt bella aggiunta!
Spacey,

4

Ogni volta che si generano campioni di rumore discreto (utilizzando MATLAB randn/ randad esempio) si genera effettivamente un rumore a banda limitata.

Tutto quello che devi fare è l'adattamento della varianza dei campioni discreti alla varianza del rumore "Continuo" da cui presumibilmente vengono prelevati i campioni.

σcn2δ(t)fSfSσcn2

fS/2

La descrizione completa è fornita qui - Come simulare AWGN (rumore bianco gaussiano additivo) nei sistemi di comunicazione per una larghezza di banda specifica .


Maggiori informazioni qui: dsp.stackexchange.com/questions/17494/…
Royi,

2

Perché non si può usare l'approccio menzionato in questo post ?

Inizia con le frequenze desiderate e lavora all'indietro per costruire il segnale, invece di filtrare. Utilizza il codice Python, ma si collega anche al codice Matlab originale.

Ci sono degli svantaggi nel farlo in questo modo?


1
guardando il codice matlab originale, funziona con una dimensione del blocco di n, la lunghezza del tuo fft. Se voglio 2n campioni, puoi raddoppiare la lunghezza del fft, che è più che fare 2 fft. se fai 2 blocchi separati, ci sarà una transizione discontinua dal primo al secondo blocco. potresti usare una finestra per appianare la transizione, ma poi devi fare più di 2 blocchi per evitare di smascherare le tue serie temporali. Utilizzando il metodo del filtro, una volta che il filtro è in stato stazionario, è possibile alimentare numeri casuali per tutto il tempo desiderato. L'aumento di elaborazione per il metodo di filtro viene ridimensionato in modo lineare.

0

mi rendo conto che questa domanda è spuntata nella vista attuale perché @Drazick ha modificato la sua risposta del 2013.

Xrand()frand()0X<1

"rumore bianco" è, ovviamente, un termine improprio, anche per segnali analogici. un "segnale di potenza" con spettro piatto fino all'infinito ha anche una potenza infinita. il segnale virtualmente gaussiano e "bianco" generato come descritto ha un potere finito (che è la varianza ed è 1) e una larghezza di banda finita che, espressa come unilaterale, è Nyquist. (quindi la "densità spettrale di potenza" o la potenza per unità di frequenza è 1 / Nyquist.) ridimensionala e compensa come preferisci.

intendo di poterlo modificare in seguito e aggiungere qualche pseudo-codice simile a C per mostrarlo esplicitamente.


-1

Produrre rumore bianco a spettro completo e quindi filtrarlo è come se volessi dipingere un muro della tua casa bianco, quindi decidi di dipingere l'intera casa bianca e quindi ridipingere tutta la casa tranne il muro. È idiota (Ma ha senso nell'elettronica).

Ho realizzato un piccolo programma C in grado di generare rumore bianco a qualsiasi frequenza e larghezza di banda (diciamo a frequenza centrale 16kHz e 2 kHz "wide"). Nessun filtro coinvolto.

Quello che ho fatto è semplice: all'interno del ciclo principale (infinito) generi una sinusoide a frequenza centrale +/- un numero casuale tra-metà larghezza di banda e + metà larghezza di banda, quindi mantengo quella frequenza per un numero arbitrario di campioni (granularità) e questo è il risultato:

Rumore bianco largo 2kHz a frequenza centrale 16kHz

Rumore bianco largo 2kHz a frequenza centrale 16kHz

Pseudo codice:

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
Lo STFT non è piatto in tutta la banda. Non hai dimostrato perché ci sia qualche vantaggio nella tua tecnica. A proposito la maggior parte della vernice viene fornita come un bianco grigiastro e quindi miscelata con pigmento. La vernice arancione non è fatta usando solo ingredienti arancioni. Non c'è lavoro extra nel generare rumore bianco.

@StanleyPawlukiewicz In elettronica sei righe perché un generatore di rumore e un filtro sono due "oggetti" molto semplici. Nella programmazione, un filtro è complesso in numero di istruzioni molto più che generare semplicemente i dati necessari. Quindi, quando la programmazione è preferibile, il mio approccio se si dispone di applicazioni time-critical. Se hai effettuato il downgrade, ti consiglio di ripensarci.
Zibri,

1
il tuo rumore non è preferibile. lo spettro non è piatto in tutta la banda. chiamare al volo una funzione trascendentale non è più veloce del filtraggio. i tuoi argomenti non sono

1
In realtà l'ondulazione in-band è un parametro di progettazione. Anche dire che hanno un picco alla frequenza centrale è falso

1
dato che la tua tecnica è così facile da modificare, perché non scrivi la tua routine sinusoidale invece di collegarti a una e affermare che il tuo codice è meno complesso e confrontarlo con un biquad. mentre lo aggiungi, che ne dici di una versione a virgola fissa. potresti anche pensare a come
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.