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 (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?
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 (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?
Câu trả lời:
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 đóf 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:
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:
Ở đâu
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.
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.
Đ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
Như Corsini & Saletti trong bài báo của họ, , Ở đâu là tần số lấy mẫu và là 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):