Tạo tiếng ồn giả ngẫu nhiên màu hồng (


20

Một số thuật toán để tạo ra một xấp xỉ giả ngẫu nhiên tốt với nhiễu 1/f (màu hồng), nhưng phù hợp để thực hiện với chi phí tính toán thấp trên DSP số nguyên?


Làm thế nào về bộ nhớ? Nếu đó không phải là vấn đề đáng lo ngại mà là tính toán, tôi sẽ nói hãy thực hiện một iDFT pha ngẫu nhiên của đường cong tần số mong muốn và lưu nó dưới dạng hằng số tĩnh trong thiết bị của bạn.
leftaroundabout

@leftaroundabout - Hoặc sẽ nhân DFT của nhiễu trắng ngẫu nhiên với đường cong tần số 1 / f, sau đó thực hiện IDFT có các đặc tính ngẫu nhiên tốt hơn?
hotpaw2

1
Tiếng ồn trắng cơ bản một IFT ngẫu nhiên pha của hàm liên tục, vì vậy nó không nên thực hiện nhiều sự khác biệt.
leftaroundabout

Câu trả lời:


11

6
Nếu trang web đó không hoạt động, câu trả lời của bạn sẽ biến mất, nếu bạn đưa ra những điều cơ bản của từng giải pháp, câu trả lời sẽ được cải thiện hơn nhiều , sử dụng trang này làm tài liệu tham khảo.
Kortuk

@Kortuk: Câu trả lời là wiki cộng đồng, vì vậy hãy tự mình làm điều đó! Thông tin cần có đủ để trỏ đến các tham chiếu web khác (như câu trả lời của datageist cho tùy chọn đầu tiên). Tôi đồng ý, mặc dù, rằng nhiều chi tiết sẽ tốt.
Peter K.

20

Lọc tuyến tính

Cách tiếp cận đầu tiên trong câu trả lời của Peter (tức là lọc tiếng ồn trắng) là cách tiếp cận rất đơn giản. Trong Xử lý tín hiệu âm thanh phổ , JOS cung cấp bộ lọc bậc thấp có thể được sử dụng để tạo ra một xấp xỉ khá , cùng với phân tích mật độ phổ công suất kết quả phù hợp với mức lý tưởng. Lọc tuyến tính sẽ luôn mang lại một xấp xỉ, nhưng điều đó có thể không quan trọng trong thực tế. Để diễn giải JOS:

Không có bộ lọc chính xác (hợp lý, hữu hạn) có thể tạo ra nhiễu hồng từ nhiễu trắng. Điều này là do phản ứng lý tưởng biên độ của bộ lọc phải tương xứng với chức năng hợp lý , trong đóf1/ff biểu thị tần số tính bằng Hz. Tuy nhiên, thật dễ dàng để tạo ra nhiễu hồng đến bất kỳ mức độ gần đúng mong muốn nào, bao gồm cả nhận thức chính xác.

Các hệ số của bộ lọc mà ông đưa ra như sau:

B = [0.049922035, -0.095993537, 0.050612699, -0.004408786];
A = [1, -2.494956002, 2.017265875, -0.522189400];

Chúng được định dạng dưới dạng tham số cho hàm bộ lọc MATLAB , vì vậy để rõ ràng, chúng tương ứng với hàm truyền sau:

H(z)= =.041-.096z-1+.051z-2-0,04z-31-2,495z-1+2.017z-2-.522z-3

Rõ ràng, tốt hơn là sử dụng độ chính xác đầy đủ của các hệ số trong thực tế. Đây là một liên kết đến những gì tiếng ồn màu hồng được tạo ra bằng bộ lọc đó nghe như:

Để thực hiện điểm cố định, vì thường thuận tiện hơn khi làm việc với các hệ số trong phạm vi [-1,1), một số thao tác lại của hàm truyền sẽ theo thứ tự. Nói chung, khuyến nghị là chia mọi thứ thành các phần thứ hai , nhưng một phần lý do cho điều đó (trái ngược với việc sử dụng các phần thứ nhất) là để thuận tiện khi làm việc với các hệ số thực khi các gốc phức tạp. Đối với bộ lọc cụ thể này, tất cả các gốc là có thật và sau đó kết hợp thành các phần bậc hai có thể vẫn mang lại một số hệ số mẫu số> 1, vì vậy ba phần thứ tự đầu tiên là một lựa chọn hợp lý, như sau:

H(z)= =1-b1z-11-một1z-1 1-b2z-11-một2z-1 1-b3z-11-một3z-1

Ở đâu

b1= =0,98223157, b2= =0,83265661, b3= =0,10798089
một1= =0.99516897, một2= =0,94384177, một3= =0,55594526

Một số lựa chọn hợp lý của trình tự cho các phần đó, kết hợp với một số lựa chọn các yếu tố khuếch đại cho từng phần sẽ được yêu cầu để ngăn chặn tràn. Tôi chưa thử bất kỳ bộ lọc nào khác được đưa ra trong liên kết trong câu trả lời của Peter , nhưng những cân nhắc tương tự có thể sẽ được áp dụng.

Tiếng ồn trắng

Rõ ràng, cách tiếp cận lọc đòi hỏi một nguồn số ngẫu nhiên thống nhất ở vị trí đầu tiên. Nếu một thói quen thư viện không có sẵn cho một nền tảng nhất định, một trong những cách tiếp cận đơn giản nhất là sử dụng một trình tạo cộng hưởng tuyến tính . Một ví dụ về triển khai điểm cố định hiệu quả được TI đưa ra trong Tạo số ngẫu nhiên trên TMS320C5x (pdf) . Một cuộc thảo luận lý thuyết chi tiết về các phương pháp khác nhau có thể được tìm thấy trong Phương pháp tạo số ngẫu nhiên và Phương pháp Monte Carlo của James Gentle.

Tài nguyên

Một số nguồn dựa trên các liên kết sau trong câu trả lời của Peter là đáng chú ý.

  • Đoạn mã dựa trên bộ lọc đầu tiên của các tham chiếu mã Giới thiệu về Xử lý tín hiệu của Orfanidis. Toàn bộ văn bản có sẵn tại liên kết đó và [trong Phụ lục B] nó có phạm vi bao phủ cả tiếng ồn hồng và trắng. Như bình luận đề cập, Orfanidis chủ yếu bao gồm thuật toán Voss.

  • Quang phổ được sản xuất bởi Máy tạo tiếng ồn Voss-McCartney Pink . Đường xuống gần cuối trang, sau khi thảo luận rộng rãi về các biến thể của thuật toán Voss, liên kết này được tham chiếu bằng các chữ màu hồng khổng lồ . Nó dễ đọc hơn nhiều so với một số sơ đồ ASCII trước đó.

  • Một thư mục về tiếng ồn 1 / f của Wentian Li. Điều này được tham chiếu cả trong nguồn của Peter và bởi JOS. Nó có số lượng tài liệu tham khảo chóng mặt về tiếng ồn 1 / f nói chung, có niên đại từ năm 1918.


Bất cứ ý tưởng làm thế nào anh ta đưa ra các hệ số bộ lọc? Tôi đoán nó chỉ là một phi tuyến phù hợp với độ dốc mong muốn, nhưng tôi khá muốn biết liệu có một thuật toán cụ thể hơn không.
nibot

Dự đoán tốt nhất của tôi sẽ là một trong những kỹ thuật gần đúng được đề cập trong luận án của ông . Đây là một cách tuyệt vời để đọc.
datageist

Wow, đó là một tài liệu khá! Cảm ơn các liên kết.
nibot

1
Vấn đề với phương pháp nhiễu trắng của bộ lọc là bạn không có được các mối quan hệ pha cường độ giống như bạn làm với chuỗi thời gian tự động tương quan. Do đó, nếu bạn đang cố gắng mô phỏng các quy trình tự nhiên, bạn không nên tạo ra tiếng ồn trắng và lọc nó. Bạn thực sự nên tạo nhiễu tự động tương thích như một chuỗi thời gian, tức là giá trị hiện tại phụ thuộc vào giá trị + nhiễu trước đó. Xem trong thống kê quy trình "AR". Bạn có thể kiểm tra điều này bằng cách tạo ra nhiễu bằng cả hai phương thức, sau đó là FFT và vẽ đồ thị thực so với tưởng tượng (mặt phẳng phức của miền tần số). Bạn sẽ nhận thấy một sự khác biệt lớn trong mẫu
Paul S

Xin chào Paul, chào mừng bạn đến với DSP.SE. Nếu bạn chỉ quan tâm đến cách âm thanh phát ra (ví dụ như trong âm thanh), thì phổ cường độ là mối quan tâm chính. Tuy nhiên, sẽ thật tuyệt nếu bạn có thể nói chi tiết suy nghĩ của mình trong một câu trả lời mới. Tôi không nghĩ rằng chúng tôi có bất cứ điều gì trên trang web mô tả kỹ thuật đó.
datageist

1

Tôi đã sử dụng thuật toán của Corsini và Saletti từ năm 1990: G. Corsini, R. Saletti, "Công cụ tạo chuỗi nhiễu phổ tần số 1 / f ^ gamma", Giao dịch của IEEE về Thiết bị và Đo lường, 37 (4), Tháng 12, 1988, 615 -619. Số mũ gamma nằm trong khoảng -2 đến +2. Nó hoạt động tốt cho mục đích của tôi. Ed

Nếu nỗ lực thêm ảnh chụp màn hình này hoạt động, hình dưới đây cho thấy một ví dụ về việc thuật toán Corsini và Saletti hoạt động tốt như thế nào (ít nhất là khi tôi đã lập trình nó vào năm 1990). Tần số lấy mẫu là 1 kHz, gamma = 1 và 1000 PSD FFT được tính trung bình.

PSD cho nhiễu 1 / f thông qua thuật toán Corsini và Saletti


Điều này tiếp theo bài viết trước của tôi về máy tạo tiếng ồn Corsini và Saletti (C & S). Hai số liệu tiếp theo cho thấy trình tạo C & S hoạt động tốt như thế nào liên quan đến việc tạo ra các tần số thấp (gamma> 0) và tần số cao (gamma <0). Hình thứ ba so sánh các PSD tiếng ồn 1 / f của trình tạo C & S (giống như bài đăng đầu tiên của tôi) và trình tạo ví dụ B.9 1 / f được đưa ra trong cuốn sách tuyệt vời của Giáo sư Orfanidis (eqn B.29, trang 736). Tất cả các PSD này là trung bình của 1000 PSD FFT. Chúng đều là đơn phương và có nghĩa là trừ. Đối với PSD của C & S, tôi đã sử dụng 3 cực / thập kỷ và chỉ định 4 thập kỷ (0,05 đến 500 Hz) là phạm vi có thể sử dụng mong muốn. Vì vậy, bộ tạo C & S có n = 12 cực và cặp không. Tần số lấy mẫu là 1 kHz, Nyquist là 500 Hz và phần tử độ phân giải chỉ hơn 0,0305 Hz. Ed V PSD tần số thấp PSD tần số cao So sánh máy tạo tiếng ồn 2 1 / f

Như Corsini & Saletti trong bài báo của họ, fc10fM, Ở đâu fc là tần số lấy mẫu và fMlà giới hạn trên của dải tần số mà chúng tôi sẽ tạo ra các mẫu nhiễu. Các hệ số bộ lọc kỹ thuật số được đưa ra bởi các phương trình của chúng (5.1):

mộttôi= =exp[-2π10(tôi-N)/h-γ/2h-c]
btôi= =exp[-2π10(tôi-N)/h-c]
Trong đó c = 1. Để có được PSD của C & S như những người được hiển thị ở trên, hãy để c = 0 và fM= =0,5fc.


1
Corsini và Saletti "Bộ lọc này bao gồm N phần thứ tự xếp tầng, mỗi phần có một cặp cực không thực" và các cực N được "phân bố đồng đều theo logarit tần số với mật độ h cực trên mỗi thập kỷ tần số (p / d) và các số 0 N theo sau. " Phần Thảo luận của bài viết được thực hiện đặc biệt độc đáo, vì vậy không có vấn đề gì chỉ là lập trình những gì họ nói phải làm. Tất cả những gì tôi có là bản cứng cũ của tôi và một bản sao được quét của nó. Đối với PSD ở trên, tôi đã sử dụng 3 cực / thập kỷ và PSD có nghĩa là trừ và đơn phương. Ed V
Ed V
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.