2009-03-11 32 views
32

Tôi muốn tính toán mật độ phổ công suất của chuỗi thời gian; làm một số bộ lọc băng thông, lowpass và highpass; có thể một số công cụ cơ bản khác.Thư viện xử lý tín hiệu trong Java?

Có thư viện Java mã nguồn mở tốt đẹp để thực hiện việc này không?

Tôi đã tìm kiếm một chút không thành công (ví dụ: Googling "mật độ phổ công suất java" hoặc "xử lý tín hiệu java" và nhấp qua liên kết, tìm trong Apache Commons, Sourceforge, java.net, v.v.).

Có rất nhiều applet, sách, hướng dẫn, sản phẩm thương mại, v.v., không đáp ứng được nhu cầu của tôi.

Cập nhật: Tôi tìm thấy org.apache.commons.math.transform cho biến đổi Fourier. Điều này không thực hiện mật độ phổ công suất, băng thông, vv, nhưng nó là cái gì đó.

+1

có ai biết thư viện tương tự cho C/C++ không? – devin

+1

fftw, http://www.fftw.org/ – basszero

+1

Đầu tiên, câu hỏi này là về Java, chứ không phải C. :) Thứ hai, FFTW trông giống như nó có FFT. Điều gì về bandpass, lowpass, lọc highpass, mật độ quang phổ điện, vv? Rõ ràng FFT tạo cơ sở, nhưng không phải là giao diện cấp cao cho các hoạt động đó. – dfrankow

Trả lời

3

Có vẻ khá thưa thớt. Hãy thử Signalgo hoặc jein hoặc Intel Signal Processing Library, mặc dù tôi nghĩ rằng cái cuối cùng chỉ là trình bao bọc JNI.

Tôi thấy rất nhiều các ứng dụng mà bạn đang nói đến. Tôi nghĩ rằng bạn có thể có được các JAR cho họ và sử dụng các API lớp bên trong. Có thể phải sử dụng nhật thực và jad để dịch ngược và tìm ra những gì họ làm, tuy nhiên, do thiếu tài liệu. Hãy thử nguồn trên this page chẳng hạn.

+0

Cảm ơn bạn đã chỉnh sửa. Thành thật mà nói, tôi đánh giá cao họ. tín hiệu là "alpha (tức là không được thử nghiệm chút nào !!)" jein không có mã nguồn mà tôi có thể tìm thấy. Intel sẽ không phải là nguồn mở. – dfrankow

8

Tôi tìm thấy cuốn sách Java Digital Signal Processingexample source code của sách. Bạn có thể xem qua mã để xem nó có phù hợp với nhu cầu của bạn hay không.

Bạn cũng có thể xem DSP Laboratory.

Do duffymo và basszero được đề cập trong các nhận xét, đã có những thay đổi đối với Java kể từ khi xuất bản Java DSP có thể ảnh hưởng đến một số ví dụ mã. Đặc biệt, (tương đối) mới Concurrency Utilties package có thể hữu ích.

+0

Wow, cuốn sách này là cổ điển năm 1997. Tôi không chắc chắn tôi muốn giới thiệu nó. Các ý tưởng xử lý tín hiệu đã không thay đổi, nhưng Java chắc chắn có. – duffymo

+0

Những thay đổi nào đã được thực hiện mà bạn cho rằng sẽ có ảnh hưởng đến xử lý tín hiệu số? –

+0

@duffymo: Tạm ứng CHỈ trong Java kể từ đó là một số nguyên tố đồng thời (kể từ dsp BEGS cho đa luồng). Nói chung dsp là toán trên các mảng nguyên thủy. Tôi e/Bill. – basszero

2

Tôi đã tìm thấy một tài nguyên khác, mặc dù đây không phải là thư viện: http://www.dickbaldwin.com/tocdsp.htm. Nó chỉ là một cuộc thảo luận cơ bản về xử lý tín hiệu và biến đổi Fourier, với một số ví dụ Java. Xem các hướng dẫn ví dụ 1478, 1482, 1486. ​​Không chắc chắn về giấy phép trên mã.

21

Đề xuất đầu tiên của tôi là không thực hiện DSP trong Java. Đề xuất thứ hai của tôi là tự triển khai DSP đơn giản của riêng bạn trong Java.


Tại sao không sử dụng Java:

Tôi có rất nhiều kinh nghiệm viết mã DSP trên 10+ năm qua ... và hầu như không ai trong số các mã DSP là trong Java ... vì vậy tha thứ cho tôi khi tôi do dự để đọc về một người muốn thực hiện DSP trong Java.

Nếu bạn định thực hiện DSP không đặc biệt thì bạn không nên sử dụng Java. Lý do mà DSP thực sự đau đớn khi thực hiện trong Java là vì tất cả các triển khai DSP tốt đều sử dụng các thủ thuật quản lý bộ nhớ mức thấp, con trỏ (số lượng con trỏ điên), mảng dữ liệu thô lớn, v.v.

Tại sao phải sử dụng Java:

Nếu bạn đang làm đơn giản thứ DSP cuộn thực hiện Java của riêng bạn. Những thứ DSP đơn giản như PSD và lọc đều tương đối dễ thực hiện (dễ thực hiện nhưng chúng sẽ không nhanh) vì có nhiều ví dụ triển khai và lý thuyết trực tuyến. Trong trường hợp của tôi, tôi đã thực hiện một chức năng PSD trong Java một lần vì tôi đã vẽ đồ thị PSD trong một GUI Java vì vậy nó dễ dàng nhất để thực hiện cú đánh hiệu suất trong Java và có PSD được tính toán trong GUI java và sau đó vẽ nó .


Làm thế nào để thực hiện một PSD:

PSD thường chỉ là tầm quan trọng của FFT hiển thị bằng dB. Có rất nhiều ví dụ từ học thuật, thương mại và nguồn mở cho thấy cách tính toán độ lớn của FFT theo dB. Ví dụ: Apache has a Java implementation that gives you the FFT đầu ra và sau đó bạn chỉ cần chuyển đổi sang cường độ và dB. Bất cứ điều gì sau khi FFT nên được điều chỉnh theo những gì bạn cần/muốn.


Làm thế nào để thực hiện lowpass, bandpass lọc:

Việc thực hiện đơn giản nhất (không phải tính toán hiệu quả nhất) sẽ theo ý kiến ​​của tôi được sử dụng một bộ lọc FIR và làm miền thời gian chập.

Việc hòa giải rất dễ thực hiện, nó được lồng ghép hai vòng lặp và có hàng triệu mã ví dụ trên mạng.

Bộ lọc FIR sẽ là một phần khó khăn nếu bạn không biết gì về thiết kế bộ lọc. Phương pháp đơn giản nhất là sử dụng Matlab để tạo bộ lọc FIR của bạn và sau đó sao chép các hệ số vào java. Tôi đề nghị sử dụng firpmord() và firpm() từ Matlab. Chụp cho sự suy giảm -30 dB đến -50 dB trong băng dừng và 3 dB gợn trong băng thông.

+6

Tôi không làm việc này nữa, nhưng nó sẽ không thích hợp để bắt đầu từ Numerical Recipes cho một ứng dụng thương mại. Apache Commons Math có một FFT: http://commons.apache.org/math/userguide/transform.html. – dfrankow

+1

@dfrankow https://github.com/JorenSix/TarsosDSP nên là một khởi đầu tốt hơn – kervin

+0

Tôi tự hỏi về tuyên bố rằng "không làm điều đó trong Java". Java có một cách tuyệt vời để xử lý bất kỳ tác vụ quản lý bộ nhớ nào, bao gồm các tệp ánh xạ bộ nhớ tốc độ cực nhanh. Mặc dù bản thân Java không thể sử dụng con trỏ thô, nhưng nó cung cấp cho bạn tất cả các cấu trúc mức cao và an toàn hơn để quản lý bộ nhớ đệm. Một cách đơn giản, một mảng đơn giản có thể được sử dụng làm bộ đệm tròn. Đơn giản chỉ cần truy cập vào một phần tử của mảng, thay vì sử dụng số học con trỏ lộn xộn để tìm ra nơi nó thực sự được lưu trữ trong bộ nhớ. –

9

Tôi đã viết một bộ sưu tập một số lớp Java DSP, ví dụ: Bộ lọc IIR:

Java DSP collection

+0

Mặc dù các ví dụ là tối thiểu, API dường như rất linh hoạt. Cảm ơn! – Charlie

Các vấn đề liên quan