Làm thế nào để tạo ra tiếng ồn trắng hạn chế Gaussian trong MATLAB?


16

Trong một số bài báo, tôi đọc rằng nhiễu phụ gia là dải trắng Gaussian giới hạn.
Làm cách nào tôi có thể mô phỏng loại tiếng ồn này bằng MATLAB?


Trong các hệ thống thời gian liên tục, khái niệm nhiễu trắng giới hạn băng tần, cho dù là Gaussian hay không, được xác định rõ và hiểu rõ. Đối với các hệ thống thời gian rời rạc, vấn đề phức tạp hơn và bạn cần xem xét giới hạn băng tần là gì và so sánh với tần số Nyquist.
Dilip Sarwate

2
@DilipSarwate: Đối với tôi, "tiếng ồn trắng giới hạn băng tần" là một oxymoron! :-)
Peter K.

@PeterK. Khái niệm nhiễu trắng được phân tách bằng băng được sử dụng chủ yếu trong các hệ thống băng thông trong đó các đặc tính của nhiễu bên ngoài băng thông là không liên quan trong khi trong băng thông, nhiễu không thể phân biệt được với nhiễu trắng được truyền qua bộ lọc băng thông lý tưởng truyền chính xác băng tần. là băng thông. Nó không hơn một oxymoron so với tiếng ồn trắng (không có bất kỳ bình luận mang tính miệt thị nào về giới hạn băng tần). Xem thêm, bình luận của DRazick (hiện tại) theo câu trả lời của Jason R (mà tôi không đồng ý).
Dilip Sarwate

1
@DilipSarwate: Cảm ơn bạn đã giải thích. Tôi hiểu nó, nhưng tôi vẫn nghĩ rằng đó là một sự lựa chọn thuật ngữ rất kém. Đối với tôi "tiếng ồn trắng được lọc băng thông" chính xác hơn, nhưng tôi cho rằng nó kết thúc tại cùng một nơi.
Peter K.

1
@PeterK. Thật không may, "tiếng ồn trắng được lọc băng thông" thường có nghĩa là quá trình được mô tả trong câu trả lời của JasonR. Bắt đầu với nhiễu trắng và lọc nó qua bộ lọc có chức năng truyền để có được một quy trình với PSD tỷ lệ với | H ( f ) | 2 . Nhiễu trắng giới hạn băng là như nhau ngoại trừ việc chúng tôi khẳng định rằng H ( f ) phải là hàm truyền của bộ lọc băng thông lý tưởng . Điểm mấu chốt với nhiễu trắng là chúng ta không thể đặt tín hiệu trong đó nhiễu không áp dụng cho nhiễu trắng giới hạn băng tần miễn là chúng ta bị hạn chế để tín hiệu của mình ở trong dải.H(f)|H(f)|2H(f)
Dilip Sarwate

Câu trả lời:


19

Bạn sẽ tạo ra nhiễu Gaussian được phân vùng bằng cách đầu tiên tạo ra nhiễu trắng, sau đó lọc nó theo băng thông mà bạn mong muốn. Ví dụ:

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

Tôi đã luôn tự hỏi điều này, nhưng nếu một cái gì đó như thế này được thực hiện, vậy thì Gaussian về nó là gì nữa? Tôi không nghĩ rằng PDF hoàn toàn ở thời điểm này ...
Spacey

8
Một trong những tính năng đặc biệt của các biến ngẫu nhiên Gaussian là tổng của hai RV Gaussian độc lập cũng được phân phối theo Gaussian. Do nhiễu đầu vào là màu trắng, bạn có thể xem từng mẫu ở đầu ra của bộ lọc dưới dạng tổng của nhiều biến ngẫu nhiên Gaussian độc lập (trong đó phương sai của mỗi RV phụ thuộc vào phương sai nhiễu đầu vào và các giá trị của vòi lọc tương ứng). Do đó, các mẫu ở đầu ra bộ lọc cũng được phân phối Gaussian. Tuy nhiên, nhiễu rõ ràng không còn là màu trắng nữa, vì có sự tương quan giữa các mẫu liên tiếp ở đầu ra của bộ lọc.
Jason R

Khách sạn này được mô tả chi tiết hơn tại Wikipedia . Lưu ý rằng thuộc tính vẫn giữ ngay cả khi nhiễu đầu vào được tô màu (xem phần "Biến ngẫu nhiên tương quan").
Jason R

1
khẩu trang . Tất nhiên.
Spacey

3
Tuy nhiên, phương pháp này sẽ không tạo ra tiếng ồn trắng. Không cần áp dụng bộ lọc, mọi tiếng ồn được lấy mẫu rời rạc đều bị giới hạn băng tần.
Royi

9

Chỉ là một bổ sung nhỏ cho câu trả lời của Jason: thông thường bạn cần tạo ra nhiễu có giới hạn băng tần với phương sai cho trước . Bạn có thể thêm mã này vào mã được đưa ra trong câu trả lời của Jason:σ2

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

Lưu ý rằng bạn phải thực hiện chia tỷ lệ sau khi lọc, vì nói chung bộ lọc thay đổi phương sai nhiễu.


2
Điểm tốt. Nếu bạn chia tỷ lệ các hệ số bộ lọc sao cho , sau đó bộ lọc sẽ không ảnh hưởng đến phương sai nhiễu. Σn= =0N|h[n]|2= =1
Jason R

@Matt Bổ sung tốt đẹp!
Spacey

4

Mỗi khi bạn tạo các mẫu tiếng ồn riêng biệt (Sử dụng MATLAB randn / rand), bạn thực sự tạo ra tiếng ồn giới hạn băng tần.

Tất cả những gì bạn cần làm là điều chỉnh phương sai của các mẫu rời rạc thành phương sai của tiếng ồn "Liên tục" mà các mẫu được cho là lấy từ.

Cho một White Noise liên tục (Sense Wide) với phương sai σcn2δ(t) và bạn muốn mẫu nó ở tốc độ fS bạn nên tạo mẫu tạp âm rời rạc với phương sai của fSσcn2 .

Kết quả này là hợp lệ giả định trước khi lấy mẫu tiếng ồn liên tục mà bạn đã áp dụng bộ lọc LPF lý tưởng với băng thông fS/2 .

Mô tả đầy đủ được đưa ra ở đây - Cách mô phỏng AWGN (Tiếng ồn Gaussian trắng phụ gia) trong các hệ thống truyền thông cho băng thông cụ thể .


Thêm thông tin tại đây: dsp.stackexchange.com/questions/17494/ Kẻ
Royi

2

Tại sao người ta không thể sử dụng cách tiếp cận được đề cập trong bài viết này ?

Nó bắt đầu với tần số mong muốn và hoạt động ngược để xây dựng tín hiệu, thay vì lọc. Nó sử dụng mã python, nhưng cũng liên kết đến mã Matlab gốc.

Có bất kỳ nhược điểm để làm điều đó theo cách đó?


Nhìn vào mã MATLAB ban đầu, nó hoạt động với kích thước khối n, chiều dài fft của bạn. Nếu tôi muốn 2n mẫu, bạn có thể tăng gấp đôi chiều dài fft, nhiều hơn so với thực hiện 2 lần chụp. nếu bạn thực hiện 2 khối riêng biệt, sẽ có một sự chuyển tiếp không liên tục từ khối thứ nhất sang khối thứ hai. bạn có thể sử dụng một cửa sổ để làm mượt quá trình chuyển đổi, nhưng sau đó bạn cần thực hiện nhiều hơn 2 khối để tránh làm mất chuỗi thời gian của bạn. Sử dụng phương pháp bộ lọc, một khi bộ lọc ở trạng thái ổn định, bạn có thể cung cấp cho nó các số ngẫu nhiên miễn là bạn muốn. Sự gia tăng xử lý cho phương pháp lọc quy mô tuyến tính.

0

Tôi nhận ra câu hỏi này xuất hiện trong chế độ xem hiện tại vì @Drazick đã sửa đổi câu trả lời năm 2013 của anh ấy / cô ấy.

nếu bạn tạo ra một số giả ngẫu nhiên đồng phục pdf tốtx(nói sử dụng rand()hoặc frand(), nếu đó là phiên bản tốt) nằm trong khoảng từ 0 đến 1 (đó là0x<1), Sau đó nếu bạn làm điều đó 12 lần, cộng tất cả 12 của các giá trị được cho là độc lập và không tương quan, và trừ 6,0 từ tổng điều đó, bạn sẽ có cái gì đó là rất gần với một đơn vị sai và zero-mean số ngẫu nhiên gaussian. nếu các số giả ngẫu nhiên pdf thống nhất là "tốt" (nghĩa là chúng thể hiện tính độc lập với nhau), thì tổng này sẽ là "màu trắng" khi bạn có thể nhận được tín hiệu thời gian rời rạc.

"Tiếng ồn trắng" , tất nhiên là một cách gọi sai, ngay cả đối với các tín hiệu tương tự. một "tín hiệu năng lượng" với phổ phẳng cho đến vô tận cũng có sức mạnh vô hạn. tín hiệu hầu như gaussian và "trắng" được tạo ra như mô tả có công suất hữu hạn (là phương sai và là 1) và băng thông hữu hạn, được biểu thị dưới dạng một phía, là Nyquist. (vì vậy 'mật độ phổ công suất "hoặc công suất trên mỗi đơn vị tần số là 1 / Nyquist.) chia tỷ lệ và bù cho nó theo ý bạn.

Tôi cho rằng tôi có thể chỉnh sửa nó sau và thêm một số mã giả giống như C để hiển thị rõ ràng điều này.


-1

Tạo ra tiếng ồn trắng toàn phổ và sau đó lọc nó giống như bạn muốn sơn tường màu trắng của ngôi nhà của bạn, vì vậy bạn quyết định sơn toàn bộ ngôi nhà màu trắng và sau đó sơn lại toàn bộ ngôi nhà trừ bức tường. Là ngu ngốc. (Nhưng có ý nghĩa trong điện tử).

Tôi đã tạo một chương trình C nhỏ có thể tạo ra nhiễu trắng ở bất kỳ tần số và bất kỳ băng thông nào (giả sử ở tần số trung tâm 16kHz và "rộng" 2 kHz). Không có lọc liên quan.

Những gì tôi đã làm rất đơn giản: bên trong vòng lặp chính (vô hạn) tôi tạo ra một hình sin ở tần số trung tâm +/- một số ngẫu nhiên giữa băng thông -half và + nửa băng thông, sau đó tôi giữ tần số đó cho một số lượng mẫu tùy ý (độ chi tiết) và điều này là kết quả:

Nhiễu trắng rộng 2kHz ở tần số trung tâm 16kHz

Nhiễu trắng rộng 2kHz ở tần số trung tâm 16kHz

Mã giả:

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 không phẳng trên băng tần. Bạn đã không chỉ ra tại sao có bất kỳ lợi thế cho kỹ thuật của bạn. Hầu hết các loại sơn Btw được lưu trữ dưới dạng màu trắng xám và sau đó trộn với bột màu. Sơn màu cam không được thực hiện bằng cách chỉ sử dụng các thành phần màu cam. Không có bất kỳ công việc bổ sung nào trong việc tạo ra tiếng ồn trắng.

@StanleyPawlukiewicz Trong thiết bị điện tử, bạn rất thích thú vì máy tạo tiếng ồn và bộ lọc là hai "đối tượng" rất đơn giản. Trong lập trình, một bộ lọc phức tạp về số lượng hướng dẫn hơn là chỉ tạo dữ liệu cần thiết. Vì vậy, khi lập trình là cách tiếp cận tốt hơn của tôi nếu bạn có thời gian ứng dụng quan trọng. Nếu bạn đánh giá thấp tôi khuyên bạn nên suy nghĩ lại về nó.
Zibri

1
tiếng ồn của bạn không thích hợp hơn. quang phổ không bằng phẳng trên dải. gọi một chức năng siêu việt trên bay không nhanh hơn lọc. đối số của bạn là không có căn cứ

1
Trên thực tế Ripple inband là một tham số thiết kế. Để nói rằng họ đạt cực đại ở tần số trung tâm cũng là sai

1
vì kỹ thuật của bạn rất dễ sửa đổi, tại sao bạn không viết thói quen sóng hình sin của riêng mình thay vì liên kết với một và tuyên bố rằng mã của bạn ít phức tạp hơn và so sánh nó với một biquad. trong khi bạn thêm nó, làm thế nào về một phiên bản điểm cố định. bạn cũng có thể nghĩ về cách kỹ thuật của bạn mở rộng khi bạn tăng số lượng mẫu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.