Lập trình DSP trong C / C ++


8

Tôi đã tiếp xúc với MATLAB và có một số tiếp xúc cơ bản với xử lý tín hiệu và vẽ đồ thị trong MATLAB ... nhưng tôi cảm thấy thoải mái hơn với C / C ++ so với MATLAB vì tôi đã làm việc trong xử lý hình ảnh với OpenCV ... Tôi chỉ tò mò: có bất kỳ thư viện hoặc nền tảng DSP nào (như OpenCV dành cho xử lý hình ảnh) để xử lý tín hiệu trong C / C ++ không?


1
Một ví dụ bị lệch về các ứng dụng truyền thông không dây là GNU Radio .
Jason R

1
Có rất nhiều thư viện FFT trong C / C ++. FFTW là một trong những đặc biệt nhanh chóng.
Jim Clay

3
Một vấn đề với việc nhận được câu trả lời tốt cho câu hỏi này là "xử lý tín hiệu" là một thuật ngữ cực kỳ rộng bao gồm nhiều trường con dành riêng cho miền. Tôi sẽ gọi OpenCV là thư viện xử lý tín hiệu, nhưng điều đó không hữu ích với người sử dụng DSP để liên lạc, chẳng hạn. Có lẽ bạn có thể thu hẹp truy vấn của bạn.
Jason R

1
Re: Nhận xét của @JimClay: FFTW là một thư viện tuyệt vời. Nếu bạn cần sử dụng mã nguồn C trong một dự án, bạn có thể muốn kiểm tra KissFFT. Nó không được tối ưu hóa tốt, nhưng nó khá tốt và vì cái tên có thể gợi ý việc đọc mã nguồn khá đơn giản. sourceforge.net/projects/kissfft
Dave C

Câu trả lời:


7

Octave là một bộ công cụ toán học và ma trận mã nguồn mở đa nền tảng. Nó có một trình thông dịch dòng lệnh nhằm rất giống với MATLAB, nhưng cũng có một API C ++ có sẵn để sử dụng. Vì bạn đề cập đến xử lý tín hiệu trái ngược với xử lý hình ảnh, tôi giả sử bạn có nghĩa là xử lý âm thanh, do đó bạn có thể cần xem xét các gói "tín hiệu" và "âm thanh" trong quãng tám (cung cấp ví dụ như wavread). Tuy nhiên, hãy nhớ rằng API được thiết kế chủ yếu để sử dụng nội bộ trong CLI quãng tám và nó được coi là không ổn định (tức là các ràng buộc có thể thay đổi). Ngoài ra, vì thư viện không chủ yếu được liên kết với, nên tài liệu rất kém để nói.

Ngoài ra, còn có Thư viện Khoa học GNU , chủ yếu không nhằm mục đích xử lý tín hiệu, nhưng cung cấp các số phức, ma trận, fft, v.v. Trên Windows, bạn sẽ phải tự biên dịch bằng Cygwin.


4

Bạn đã kiểm tra gnur Arena ? Chúng có các khối tương tự như những gì được sử dụng trong xử lý tín hiệu. Khi tôi đã sử dụng một vài năm trước đây, có một số lượng lớn các khối đã có sẵn và nhiều hơn nữa trong các tác phẩm, tất cả được viết bằng C ++. Các khối được dán lại với nhau bằng python, nhưng việc thực hiện C ++ hoàn chỉnh đã được thực hiện.



2

Tôi chưa sử dụng nó, nhưng đã nghe thấy những điều hay về armadillo ( http://arma.sourceforge.net/ ) cho chức năng giống như matlab. Có một vài người khác thích nó, nhưng có vẻ như armadillo được tối ưu hóa và phát triển tích cực.

Một phần của sự hấp dẫn của octave, matlab hoặc python / numpy / scipy (đôi khi được gọi là "pylab") là cú pháp đơn giản cùng với trình thông dịch tương tác với các hoàn thành tab. Điều này có thể tăng tốc độ phát triển khá một chút.

Với python / numpy, có thể bọc một dll bằng trình bao bọc python và sử dụng nó từ bên trong trình thông dịch tương tác. Tôi tin rằng điều này cũng có thể được thực hiện với MATLAB, nhưng tôi không chắc liệu điều này có thể được thực hiện trong quãng tám hay không. Tuy nhiên, được cảnh báo rằng điều này có thể hơi phức tạp trong python / numpy mặc dù tôi đã thấy những lợi ích đáng giá trong quá khứ khi hiệu suất là rất quan trọng.


2

Armadillo thực hiện một công việc tuyệt vời cho đại số tuyến tính trong C ++ (khá nhanh thông qua các mẫu biểu thức) và chắc chắn cũng có thể được sử dụng để xử lý tín hiệu. Ngoài các ma trận hỗ trợ với các loại phần tử khác nhau, nó còn hỗ trợ cho các tenxơ bậc 3 (hình khối), rất hữu ích trong xử lý hình ảnh.

Ngoài ra còn có một thư viện C ++ có liên quan được gọi là IT ++ , không nhanh như Armadillo, nhưng nó có nhiều lớp được xây dựng trước hơn hướng đến xử lý tín hiệu và giao tiếp.


Cập nhật: kể từ phiên bản 4.0+, Armadillo hiện có các chức năng cho 1D FFT , 2D FFTtích chập
mtall

0

JUCE là một thư viện nền tảng âm thanh C ++ đẹp. Bạn có thể tạo VST khá dễ dàng trong đó nếu bạn muốn nhanh chóng có bộ đệm I / O phát vào soundcard mà bạn có thể làm việc. Ngoài ra, sau đó bạn có thể sử dụng nó như một VST đa nền tảng nếu bạn muốn.

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.