วิธีสร้างสัญญาณรบกวนแบบเกาส์เซียนใน MATLAB ได้อย่างไร


16

ในเอกสารบางเล่มฉันได้อ่านว่าเสียงรบกวนเพิ่มเติมนั้น จำกัด อยู่ที่สีขาวแบบเกาส์เซียน
ฉันจะจำลองเสียงประเภทนี้ใช้ MATLAB ได้อย่างไร


ในระบบเวลาต่อเนื่องแนวคิดของสัญญาณรบกวนสีขาวที่มีวง จำกัด ไม่ว่าจะเป็นเกาส์เซียนหรือไม่นั้นได้รับการกำหนดและเข้าใจดี สำหรับระบบที่ไม่ต่อเนื่องปัญหานี้มีความซับซ้อนมากขึ้นและคุณต้องพิจารณาว่าข้อ จำกัด ของวงคืออะไรและเปรียบเทียบกับความถี่ของ Nyquist ได้อย่างไร
Dilip Sarwate

2
@DilipSarwate: สำหรับฉัน "เสียงสีขาว จำกัด วงดนตรี" เป็นบทกวี! :-)
Peter K.

@PeterK แนวคิดเรื่องเสียงรบกวนแบบไม่ จำกัด แบนด์สีขาวนั้นถูกนำไปใช้ในระบบ bandpass เป็นหลักซึ่งลักษณะของเสียงที่อยู่นอก passband นั้นไม่เกี่ยวข้องในขณะที่อยู่ใน passband เสียงนั้นแยกไม่ออกจากสัญญาณรบกวนสีขาวที่ผ่านตัวกรอง bandpass ในอุดมคติ เป็น passband มันไม่มากไปกว่าเสียงสีขาว (ไม่มีความคิดเห็นที่ดูถูกเกี่ยวกับข้อ จำกัด ของวงดนตรี) ดูความคิดเห็นของ DRazick (ซึ่งเป็นจุดที่) ตามคำตอบของ Jason R (ซึ่งฉันไม่เห็นด้วย)
Dilip Sarwate

1
@DilipSarwate: ขอบคุณสำหรับคำอธิบาย ฉันเข้าใจแล้ว แต่ฉันก็ยังคิดว่ามันเป็นคำศัพท์ทางเลือกที่แย่มาก สำหรับฉัน "สัญญาณรบกวนสีขาวที่กรองด้วยแถบ" นั้นแม่นยำกว่า แต่ฉันคิดว่ามันจะจบลงในที่เดียวกัน
ปีเตอร์เค

1
@PeterK น่าเสียดายที่ "โดยทั่วไปสัญญาณรบกวนสีขาวที่กรองแล้ว" หมายถึงกระบวนการที่อธิบายไว้ในคำตอบของ JasonR เริ่มด้วยสัญญาณรบกวนสีขาวและกรองผ่านตัวกรองด้วยฟังก์ชั่นการถ่ายโอนเพื่อรับกระบวนการที่มี PSD เป็นสัดส่วนกับ| H ( f ) | 2 . เสียงสีขาวที่มีวง จำกัด นั้นเหมือนกันยกเว้นว่าเรายืนยันว่าH ( f )จะต้องเป็นฟังก์ชั่นการถ่ายโอนของตัวกรอง bandpass ในอุดมคติ จุดสำคัญที่มีเสียงสีขาวคือเราไม่สามารถใส่สัญญาณในกรณีที่เสียง a'i'nt ซึ่งใช้กับเสียงสีขาวแบบ จำกัด วงด้วยตราบใดที่เราถูก จำกัด ให้สัญญาณของเราอยู่ในวงH(f)|H(f)|2H(f)
Dilip Sarwate

คำตอบ:


19

คุณจะสร้างเสียงเกาส์แบนด์แบบเกาส์ จำกัด โดยการสร้างเสียงสีขาวก่อนจากนั้นกรองให้แบนด์วิดท์ที่คุณต้องการ ตัวอย่างเช่น:

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

ฉันสงสัยมาตลอด แต่ถ้ามีอะไรทำนองนี้ก็ทำแบบนั้นเสียนเกี่ยวกับเรื่องนี้อีกแล้ว? ฉันไม่คิดว่ารูปแบบไฟล์ PDF เป็นที่ทุกคนที่จุดนี้ ...
สเปซีย์

8
หนึ่งในคุณสมบัติพิเศษของตัวแปรสุ่มแบบเกาส์คือผลรวมของ RVs แบบเกาส์สองแบบอิสระนั้นก็มีการแจกแบบเกาส์กันด้วย เนื่องจากสัญญาณรบกวนเป็นสีขาวคุณสามารถดูแต่ละตัวอย่างที่เอาต์พุตตัวกรองเป็นผลรวมของตัวแปรสุ่มแบบเกาส์อิสระจำนวนมาก (ซึ่งความแปรปรวนของแต่ละ RV ขึ้นอยู่กับความแปรปรวนของเสียงอินพุตและค่าของก๊อกตัวกรองที่สอดคล้องกัน) ดังนั้นตัวอย่างที่เอาต์พุตของตัวกรองจึงกระจายแบบเกาส์เซียนด้วย อย่างไรก็ตามเสียงรบกวนนั้นไม่มีสีขาวอีกต่อไปเนื่องจากมีความสัมพันธ์ระหว่างตัวอย่างต่อเนื่องที่เอาต์พุตของตัวกรอง
Jason R

คุณสมบัตินี้จะอธิบายในรายละเอียดเพิ่มเติมที่วิกิพีเดีย โปรดทราบว่าคุณสมบัติยังคงอยู่แม้จะมีสัญญาณรบกวนที่เป็นสี (ดูส่วน "ตัวแปรสุ่มที่สัมพันธ์กัน")
Jason R

1
facepalm แน่นอน.
Spacey

3
แต่วิธีนี้จะไม่สร้างเสียงสีขาว ไม่จำเป็นต้องใช้ตัวกรองเสียงทุกตัวอย่างที่ไม่ต่อเนื่องนั้น จำกัด วงไว้ตั้งแต่แรก
Royi

9

σ2. You can add this code to the code given in Jason's answer:

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

โปรดทราบว่าคุณต้องทำการปรับขนาดหลังจากกรองเนื่องจากโดยทั่วไปตัวกรองจะเปลี่ยนความแปรปรวนของเสียงรบกวน


2
จุดดี. หากคุณปรับสเกลค่าสัมประสิทธิ์ตัวกรองเช่นนั้นn=0ยังไม่มีข้อความ|ชั่วโมง[n]|2=1แล้วตัวกรองจะไม่ส่งผลกระทบต่อความแปรปรวนของเสียง
Jason R

@Matt นอกจากนี้ที่ดี!
Spacey

4

Every time you generate discrete noise samples (Using MATLAB's randn / rand for instance) you actually generate a band limited noise.

All you need to do is the adjustment of the variance of the discrete samples to the variance of the "Continuous" noise those samples are allegedly taken from.

Given a continuous White Noise (Wide Sense) with variance σcn2δ(t) and you want sample it at rate of fs you should generate discrete noise samples with variance of fsσcn2.

This result is valid assuming before sampling the continuous noise you applied an ideal LPF filter with bandwidth of fs/2.

Full description is given here - How to Simulate AWGN (Additive White Gaussian Noise) in Communication Systems for Specific Bandwidth.



2

Why can one not use the approach mentioned in this post?

It starts with the desired frequencies and works backwards to build the signal, instead of filtering. It uses python code, but also links to the original Matlab code.

Are there any drawbacks to doing it that way?


1
looking at the original matlab code, it works for a block size of n, your fft length. If I want 2n samples, you can double the fft length, which is more than doing 2 ffts. if you do 2 separate blocks, there will be a discontinuous transition from the first to the second block. you could use a window to smooth out the transition, but then you need to do more than 2 blocks to avoid scalloping your time series. Using the filter method, once the filter is in steady state, you can feed it random numbers as long as you want. The processing increase for the filter method scales linearly.

0

i realize this question popped up in current view because @Drazick modified his/her 2013 answer.

if you generate a good uniform p.d.f. pseudo-random number x (say using rand() or frand(), if it's a good version) that ranges from 0 to 1 (that is 0x<1), then if you do that 12 times, add up all 12 of the supposedly independent and uncorrelated values, and subtract 6.0 from that sum, you will have something that is very close to a unit-variance and zero-mean gaussian random number. if the uniform p.d.f. pseudo-random numbers are "good" (that is they exhibit independence from each other), this sum will be as "white" as you can get a discrete-time signal to be.

"white noise" is, of course a misnomer, even for analog signals. a "power signal" with flat spectrum all the way to infinity also has infinite power. the virtually-gaussian and "white" signal generated as described has a finite power (which is the variance and is 1) and finite bandwidth which, expressed as one-sided, is Nyquist. (so the 'power spectral density" or power per unit frequency is 1/Nyquist.) scale it and offset it however you please.

i s'pose i can edit this later and add some C-like pseudo-code to show this explicitly.


-1

ผลิตเสียงคลื่นความถี่สีขาวเต็มรูปแบบแล้วกรองเหมือนว่าคุณต้องการทาสีผนังบ้านสีขาวคุณจึงตัดสินใจทาสีบ้านทั้งหลังสีขาวแล้วทาสีบ้านทั้งหมดยกเว้นผนัง เป็นคนงี่เง่า (แต่มีความรู้สึกในอุปกรณ์อิเล็กทรอนิกส์)

ฉันสร้างโปรแกรม C ขนาดเล็กที่สามารถสร้างสัญญาณรบกวนสีขาวที่ความถี่ใด ๆ และแบนด์วิดธ์ใด ๆ (สมมติว่าที่ความถี่กลาง 16kHz และกว้าง 2 kHz ")" ไม่มีการกรองที่เกี่ยวข้อง

สิ่งที่ฉันทำนั้นง่าย: ภายในลูปหลัก (ไม่มีที่สิ้นสุด) ฉันสร้างไซน์ที่ความถี่กลาง +/- จำนวนสุ่มระหว่าง -half แบนด์วิดท์และ + ครึ่งแบนด์วิดท์จากนั้นฉันจะเก็บความถี่นั้นสำหรับจำนวนตัวอย่างโดยสุ่ม (granularity) และนี่ คือผลลัพธ์:

เสียงสีขาวกว้าง 2kHz ที่ความถี่กลาง 16kHz

White noise 2kHz wide at 16kHz center frequency

รหัสหลอก:

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
The STFT isn’t flat across the band. You have not shown why there is any advantage to your technique. Btw most paint is stocked as a grayish white and then mixed with pigment. Orange paint isn’t made by just using orange ingredients. There isn’t any extra work in generating white noise.

@StanleyPawlukiewicz In electronics you are righe because a noise generator and a filter are two very simple "objects". In programming, a filter is complex in number of instructions way more than just generating the needed data. So when programming is preferable my approach if you have time critical applications. If you downvoted I suggest you to think again about it.
Zibri

1
เสียงของคุณไม่เป็นที่ต้องการ คลื่นความถี่ไม่แบนทั่วทั้งวง การเรียกฟังก์ชั่นยอดเยี่ยมในทันทีนั้นไม่เร็วไปกว่าการกรอง ข้อโต้แย้งของคุณไม่แน่นอน

1
อันที่จริงระลอก inband เป็นพารามิเตอร์การออกแบบ จะบอกว่าพวกเขาสูงสุดที่ความถี่กลางเป็นเท็จ

1
เนื่องจากเทคนิคของคุณง่ายต่อการปรับเปลี่ยนทำไมคุณไม่เขียนรูทีนคลื่นไซน์ของคุณเองแทนการเชื่อมโยงไปที่หนึ่งและอ้างว่ารหัสของคุณซับซ้อนน้อยกว่าและเปรียบเทียบกับ biquad ในขณะที่คุณเพิ่มวิธีการเกี่ยวกับรุ่นจุดคงที่ คุณอาจจะคิดว่าเทคนิคของคุณปรับขนาดอย่างไรเมื่อคุณเพิ่มจำนวนตัวอย่าง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.