Bagaimana Menghasilkan Band Gaussian White Noise Limited di MATLAB?
16
Dalam beberapa makalah, saya membaca bahwa noise tambahan adalah pita Gaussian white.
Bagaimana saya bisa mensimulasikan jenis kebisingan ini menggunakan MATLAB?
Dalam sistem waktu kontinu, konsep white noise terbatas-band, apakah Gaussian atau tidak, didefinisikan dengan baik dan dipahami dengan baik. Untuk sistem waktu diskrit, masalahnya lebih rumit dan Anda perlu mempertimbangkan apa batasan band itu dan bagaimana perbandingannya dengan frekuensi Nyquist.
Dilip Sarwate
2
@DilipSarwate: Bagi saya, "white noise terbatas band" adalah sebuah oxymoron! :-)
Peter K.
@PeterK. Gagasan white noise bandlimited digunakan terutama dalam sistem bandpass di mana karakteristik noise di luar passband tidak relevan sedangkan di dalam passband, noise tidak dapat dibedakan dari white noise yang telah melewati filter bandpass ideal yang melewati tepat pita frekuensi yang adalah passband. Ini tidak lebih dari sebuah oxymoron daripada white noise (tanpa komentar merendahkan tentang pembatasan pita). Lihat juga, komentar DRazick (yang sangat tepat) mengikuti jawaban Jason R (yang tidak saya setujui).
Dilip Sarwate
1
@DilipSarwate: Terima kasih atas penjelasannya. Saya mengerti, tetapi saya masih berpikir itu adalah pilihan terminologi yang sangat buruk. Bagi saya "band-pass filter white noise" lebih akurat, tetapi saya kira itu berakhir di tempat yang sama.
Peter K.
1
@PeterK. Sayangnya, "band-pass filter white noise" umumnya berarti proses yang dijelaskan dalam jawaban JasonR. Mulailah dengan white noise dan filter melalui filter dengan fungsi transfer untuk mendapatkan proses dengan PSD sebanding dengan | H ( f ) | 2 . Band white-noise terbatas adalah sama kecuali bahwa kami bersikeras bahwa H ( f ) harus menjadi fungsi transfer filter bandpass ideal . Poin kunci dengan white noise adalah bahwa kita tidak dapat menempatkan sinyal di mana noise tidak ada yang berlaku untuk white noise band-terbatas juga selama kita dibatasi untuk memiliki sinyal kita tetap di band.H( f)|H(f) |2H( f)
Dilip Sarwate
Jawaban:
19
Anda akan menghasilkan noise Gaussian bandlimited dengan terlebih dahulu menghasilkan white noise, kemudian memfilternya ke bandwidth yang Anda inginkan. Sebagai contoh:
% 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);
Saya selalu bertanya-tanya ini, tetapi jika sesuatu seperti ini dilakukan, lalu apa yang begitu Gaussian tentang itu lagi? Saya tidak berpikir PDF sama sekali pada saat ini ...
Spacey
8
Salah satu fitur khusus dari variabel acak Gaussian adalah bahwa jumlah dua RV Gaussian independen juga terdistribusi Gaussian. Karena noise input berwarna putih, Anda dapat melihat setiap sampel pada output filter sebagai jumlah dari banyak variabel acak Gaussian independen (di mana varians dari setiap RV bergantung pada varian noise input dan nilai-nilai tap filter yang sesuai). Oleh karena itu, sampel pada keluaran filter juga terdistribusi Gaussian. Namun, suara itu jelas tidak lagi putih, karena ada korelasi antara sampel berturut-turut pada output filter.
Jason R
Properti ini dijelaskan lebih detail di Wikipedia . Perhatikan bahwa properti masih berlaku bahkan jika noise input diwarnai (lihat bagian "Variabel acak yang berkorelasi").
Jason R
1
facepalm . Tentu saja.
Spacey
3
Namun metode ini tidak akan menghasilkan white noise. Tidak perlu menerapkan filter, setiap noise sampel diskrit adalah pita terbatas untuk memulai.
Royi
9
Sama seperti tambahan kecil untuk jawaban Jason: biasanya Anda perlu menghasilkan derau tanpa batas dengan varian yang diberikan . Anda dapat menambahkan kode ini ke kode yang diberikan dalam jawaban Jason:σ2
var = 3.0; % just an example
scale = sqrt(var)/std(nb);
nb = scale*nb; % nb has variance 'var'
Perhatikan bahwa Anda harus melakukan penskalaan setelah pemfilteran, karena secara umum filter mengubah varians noise.
Poin bagus. Jika Anda menskalakan koefisien filter sedemikian rupa sehingga , maka filter tidak akan memengaruhi varians noise. ∑Nn = 0| h[n] |2= 1
Jason R
@ Mat Tambahan yang bagus!
Spacey
4
Setiap kali Anda menghasilkan sampel noise diskrit (Menggunakan MATLAB's randn/ randmisalnya) Anda benar-benar menghasilkan band noise terbatas.
Yang perlu Anda lakukan adalah menyesuaikan varians dari sampel diskrit dengan varians dari noise "Continuous" yang diduga diambil dari sampel tersebut.
Mengapa seseorang tidak dapat menggunakan pendekatan yang disebutkan dalam posting ini ?
Ini dimulai dengan frekuensi yang diinginkan dan bekerja mundur untuk membangun sinyal, bukannya menyaring. Ini menggunakan kode python, tetapi juga tautan ke kode Matlab asli.
Apakah ada kelemahan untuk melakukannya dengan cara itu?
melihat kode matlab asli, ia bekerja untuk ukuran blok n, panjang fft Anda. Jika saya ingin sampel 2n, Anda dapat menggandakan panjang fft, yang lebih dari melakukan 2 ffts. jika Anda melakukan 2 blok terpisah, akan ada transisi yang terputus-putus dari blok pertama ke blok kedua. Anda dapat menggunakan jendela untuk memperlancar transisi, tetapi kemudian Anda perlu melakukan lebih dari 2 blok untuk menghindari scalloping time series Anda. Dengan menggunakan metode filter, setelah filter dalam kondisi mapan, Anda dapat memberinya angka acak selama yang Anda inginkan. Peningkatan pemrosesan untuk metode filter berskala linear.
0
Saya menyadari pertanyaan ini muncul dalam tampilan saat ini karena @Drazick mengubah / nya 2013 jawabannya.
xrand()frand()0 ≤ x < 1
"white noise" , tentu saja keliru, bahkan untuk sinyal analog. "sinyal daya" dengan spektrum datar hingga tak terhingga juga memiliki daya tak terbatas. sinyal hampir-gaus dan "putih" yang dihasilkan seperti yang dijelaskan memiliki daya terbatas (yang merupakan varian dan 1) dan bandwidth terbatas yang, dinyatakan sebagai satu sisi, adalah Nyquist. (jadi 'kerapatan spektral daya "atau daya per satuan frekuensi adalah 1 / Nyquist.) skala dan offset itu sesuka Anda.
Saya kira saya dapat mengedit ini nanti dan menambahkan beberapa kode pseudo seperti C untuk menunjukkan ini secara eksplisit.
Menghasilkan white noise spektrum penuh dan kemudian memfilternya seperti Anda ingin mengecat dinding rumah Anda putih, jadi Anda memutuskan untuk mengecat seluruh rumah putih dan mengecat kembali semua rumah kecuali dinding. Apakah idiot. (Tetapi memiliki akal dalam elektronik).
Saya membuat program C kecil yang dapat menghasilkan white noise pada frekuensi dan bandwidth apa pun (misalkan pada frekuensi pusat 16kHz dan 2 kHz "lebar"). Tidak ada penyaringan yang terlibat.
Apa yang saya lakukan adalah sederhana: di dalam loop (tak terhingga) utama saya menghasilkan sinusoid pada frekuensi tengah +/- angka acak antara -half bandwidth dan + halfbandwidth, maka saya menjaga frekuensi itu untuk jumlah sampel acak (granularity) dan ini hasilnya:
White noise lebar 2kHz pada frekuensi pusat 16kHz
Kode palsu:
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
}
}
STFT tidak rata di seluruh band. Anda belum menunjukkan mengapa ada manfaat untuk teknik Anda. Btw sebagian besar cat diisi sebagai putih keabu-abuan dan kemudian dicampur dengan pigmen. Cat oranye tidak dibuat hanya dengan menggunakan bahan oranye. Tidak ada pekerjaan ekstra dalam menghasilkan white noise.
@StanleyPawlukiewicz Dalam elektronik Anda benar karena generator suara dan filter adalah dua "objek" yang sangat sederhana. Dalam pemrograman, filter rumit dalam jumlah instruksi jauh lebih dari sekadar menghasilkan data yang dibutuhkan. Jadi ketika pemrograman lebih disukai pendekatan saya jika Anda punya waktu aplikasi kritis. Jika Anda tidak memilih saya sarankan Anda untuk memikirkannya lagi.
Zibri
1
kebisingan Anda tidak disukai. spektrumnya tidak rata di seluruh pita. memanggil fungsi transendental dengan cepat tidak lebih cepat daripada memfilter. argumen Anda tidak berdasar
1
Sebenarnya inband ripple adalah parameter desain. Mengatakan mereka memuncak pada frekuensi tengah juga salah
1
karena teknik Anda sangat mudah untuk dimodifikasi, mengapa Anda tidak menulis rutinitas gelombang sinus Anda sendiri daripada menautkannya dan mengklaim bahwa kode Anda kurang kompleks dan membandingkannya dengan biquad. saat Anda menambahkannya, bagaimana dengan versi titik tetap. Anda mungkin juga berpikir tentang bagaimana skala teknik Anda saat Anda meningkatkan jumlah sampel
Jawaban:
Anda akan menghasilkan noise Gaussian bandlimited dengan terlebih dahulu menghasilkan white noise, kemudian memfilternya ke bandwidth yang Anda inginkan. Sebagai contoh:
sumber
Sama seperti tambahan kecil untuk jawaban Jason: biasanya Anda perlu menghasilkan derau tanpa batas dengan varian yang diberikan . Anda dapat menambahkan kode ini ke kode yang diberikan dalam jawaban Jason:σ2
Perhatikan bahwa Anda harus melakukan penskalaan setelah pemfilteran, karena secara umum filter mengubah varians noise.
sumber
Setiap kali Anda menghasilkan sampel noise diskrit (Menggunakan MATLAB's
randn
/rand
misalnya) Anda benar-benar menghasilkan band noise terbatas.Yang perlu Anda lakukan adalah menyesuaikan varians dari sampel diskrit dengan varians dari noise "Continuous" yang diduga diambil dari sampel tersebut.
Deskripsi lengkap diberikan di sini - Cara Mensimulasikan AWGN (Additive White Gaussian Noise) dalam Sistem Komunikasi untuk Bandwidth Tertentu .
sumber
Mengapa seseorang tidak dapat menggunakan pendekatan yang disebutkan dalam posting ini ?
Ini dimulai dengan frekuensi yang diinginkan dan bekerja mundur untuk membangun sinyal, bukannya menyaring. Ini menggunakan kode python, tetapi juga tautan ke kode Matlab asli.
Apakah ada kelemahan untuk melakukannya dengan cara itu?
sumber
Saya menyadari pertanyaan ini muncul dalam tampilan saat ini karena @Drazick mengubah / nya 2013 jawabannya.
rand()
frand()
"white noise" , tentu saja keliru, bahkan untuk sinyal analog. "sinyal daya" dengan spektrum datar hingga tak terhingga juga memiliki daya tak terbatas. sinyal hampir-gaus dan "putih" yang dihasilkan seperti yang dijelaskan memiliki daya terbatas (yang merupakan varian dan 1) dan bandwidth terbatas yang, dinyatakan sebagai satu sisi, adalah Nyquist. (jadi 'kerapatan spektral daya "atau daya per satuan frekuensi adalah 1 / Nyquist.) skala dan offset itu sesuka Anda.
Saya kira saya dapat mengedit ini nanti dan menambahkan beberapa kode pseudo seperti C untuk menunjukkan ini secara eksplisit.
sumber
Menghasilkan white noise spektrum penuh dan kemudian memfilternya seperti Anda ingin mengecat dinding rumah Anda putih, jadi Anda memutuskan untuk mengecat seluruh rumah putih dan mengecat kembali semua rumah kecuali dinding. Apakah idiot. (Tetapi memiliki akal dalam elektronik).
Saya membuat program C kecil yang dapat menghasilkan white noise pada frekuensi dan bandwidth apa pun (misalkan pada frekuensi pusat 16kHz dan 2 kHz "lebar"). Tidak ada penyaringan yang terlibat.
Apa yang saya lakukan adalah sederhana: di dalam loop (tak terhingga) utama saya menghasilkan sinusoid pada frekuensi tengah +/- angka acak antara -half bandwidth dan + halfbandwidth, maka saya menjaga frekuensi itu untuk jumlah sampel acak (granularity) dan ini hasilnya:
White noise lebar 2kHz pada frekuensi pusat 16kHz
Kode palsu:
sumber