Đề 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.
có ai biết thư viện tương tự cho C/C++ không? – devin
fftw, http://www.fftw.org/ – basszero
Đầ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