2014-07-19 38 views
9

Tôi hiện đang viết một ứng dụng Android có chức năng như một đài phát thanh internet. Một phần của chức năng của ứng dụng là nó có thể điều khiển thông qua điều khiển từ xa hồng ngoại. Các mã từ xa hồng ngoại xuất hiện dưới dạng âm thanh analog thông qua cổng micrô. Nếu tôi ghi lại một số tín hiệu và nhìn vào chúng trong Audacity, nó rất dễ dàng cho tôi để xem mỗi mã là gì. Ví dụ: sau đây là 0111111010011001011111101000001 hoặc 0x3F4CBF41. enter image description here Câu hỏi của tôi là làm cách nào để tôi có thể phát hiện các tín hiệu này theo chương trình khi chúng đến và chuyển đổi chúng thành số mã nguyên. Tôi đã xem xét một số giải pháp đóng gói như LIRC, nhưng chúng được viết bằng C và sẽ rất khó để tích hợp. Nó cũng có vẻ như với tôi như bản địa sẽ được hơn giết để làm phân tích đơn giản như vậy. Tôi cũng nhìn vào các thư viện như musicg, nhưng tôi không thể tìm thấy bất kỳ cách nào dễ dàng để chuyển đổi các mã trong thời gian thực.Giải mã các mã điều khiển từ xa thông qua đầu vào âm thanh

+1

Tôi không chắc mình hiểu thông tin nào bị thiếu ở đây. Tôi có nên đính kèm tệp âm thanh chứa dữ liệu không? Cho đến nay ứng dụng của tôi không ghi và lưu dữ liệu. Nó đi kèm như một tín hiệu tương tự thông qua cổng micro. Sau khi nó được xử lý đầu ra duy nhất tôi mong đợi là một số nguyên đại diện cho mã từ xa như tôi đã đề cập trong câu hỏi. Bạn có thể cụ thể hơn về những gì còn thiếu? Đối với sự phức tạp, tôi dành rất nhiều thời gian viết các ứng dụng thị giác máy tính. Tôi giả định rằng điều này sẽ tương tự về độ phức tạp. Là tôi sai? – krispy

+2

@Xaver là một người đã phát triển các giải pháp độc quyền cho một nhu cầu tương tự, tôi phải đồng ý với người đăng, thông tin cần thiết đã được cung cấp. Câu hỏi của bạn là sự tò mò chỉ tiếp tuyến với câu hỏi của bài đăng. –

Trả lời

5

Có vẻ như rõ ràng từ câu hỏi của bạn rằng bạn đã quen thuộc với PWM và phương pháp đọc tín hiệu nhận được từ bộ thu IR. Như vậy, tôi đã xem xét cách bạn có thể sử dụng java để lưu trữ dữ liệu trong một phương thức mà bạn có thể giải thích dễ dàng như cửa sổ audacity của bạn.

Có một vài phương pháp trong javax.sound.sampled.spi Điều tôi nghĩ sẽ hữu ích.

Đầu tiên là getAudioStream() trong AudioFileReader. Điều này trả về một AudioStream có một vài phương pháp có thể hữu ích hơn. Cái tôi thấy là tiện dụng nhất cho mục đích của bạn là read() sẽ trả về byte tiếp theo trong luồng. Bạn có thể cung cấp một mảng byte để đọc các phần hoặc thậm chí toàn bộ luồng trong cũng nếu điều đó thuận tiện hơn. Vì vậy, bây giờ bạn có một danh sách hoặc một mảng các byte, và bạn có thể diễn giải chúng cao hay thấp theo chu kỳ đều đặn (vì đây là âm thanh lấy mẫu, thời gian giữa mỗi byte là hằng số), tất cả những gì bạn cần để giải mã PWM !

Bằng cách tìm điểm cuối gần đúng, bạn có thể biến mẫu byte theo thời gian thành mẫu có thời lượng cao/thấp. Vì tôi biết bạn có thể đọc điều đó (được minh họa trong câu hỏi của bạn), tôi sẽ bỏ qua chuyển đổi theo nghĩa đen, nhưng nó là tầm thường để chuyển đổi hhhlhllhhhhhhlllhh thành biểu diễn mã thập lục phân.

TL; DR: Ghi luồng, đọc từng byte, chuyển đổi theo thời gian, chuyển đổi thành nhị phân.

+0

Cảm ơn bạn đã trả lời. Tôi đã theo lời khuyên của bạn và tôi chắc chắn đang tiến bộ. Ngay bây giờ những gì tôi hiểu là cách các khung hình dường như dao động nhiều hơn so với trong Audacity. Chúng dội ngược lại giữa các số dương và âm trong vài lần trong một xung. Bạn có thể nghĩ ra lời giải thích không? – krispy

+0

thử thay đổi tỷ lệ mẫu của bạn. –

+0

Bạn có thể cần phải xử lý dữ liệu cảm biến hồng ngoại. Lấy mẫu ở một tỷ lệ rất cao, sau đó thời gian trung bình mẫu để có được một tín hiệu trơn tru. ví dụ t = 9/10 * t + 1/10 * t0 –

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