2011-09-30 26 views
5

Tôi hiện đang làm việc trên một dự án tương đối dễ dàng, cho đến bây giờ. Dự án cơ bản là truyền dữ liệu/thông điệp qua laser bằng cách sử dụng chuyển đổi âm thanh. Tóm lại quá trình này hiện nay là như thế nàyChuyển âm thanh bằng Python qua các laser

  1. Các người dùng nhập vào một thông điệp
  2. nhắn được biến thành nhị phân
  3. Đối với mỗi 1 và 0 trong thông điệp nhị phân, nó đóng một giai điệu tương ứng với tín hiệu mà đó là, trong trường hợp của tôi 250Hz cho một 1 và 450 hz cho một 0.
  4. Âm báo đi được gửi qua cáp âm thanh nổi đến máy biến áp âm thanh được gắn vào một laser
  5. Một bảng điều khiển năng lượng mặt trời hoạt động như micrô và ghi lại "âm thanh" đến dưới dạng tệp
  6. Nó sẽ phát lại tệp và đọc các âm và cố gắng khớp với mỗi 250 và 450 hz đến 1 hoặc 0 (đây là nơi mà vấn đề của tôi nằm).

Cho đến khi xử lý âm thanh thực sự tốt, vấn đề hiện tại của tôi là như sau.

Tôi phát các âm mỗi thời gian x, trên đầu nhận được ghi lại theo thời gian y, thời gian y được cắt lấy mẫu nhiều lần rồi phân tích mẫu theo mẫu rồi ghi lại từng tần số. Điều này không hiệu quả và không chính xác. Tôi đã có nhiều vấn đề bất kể thời gian tôi chơi các âm thanh cho nó thường nghe một giai điệu hai lần hoặc không nghe thấy ở tất cả, mà hoàn toàn ném ra toàn bộ tin nhắn.
Tôi đã cố gắng so khớp với tốc độ mà nó lấy mẫu theo thời gian mỗi giai điệu phát, nhưng trừ khi được căn chỉnh cho phù hợp, nó không hoạt động. Tôi chỉ có một vài bài kiểm tra thành công cho các bài viết như 'test' và 'hi'. Tôi đã nhìn vào bpsk và fsk, nhưng tôi cảm thấy như thể tôi đã làm một cái gì đó như nó nhưng tôi có một kết thúc nhận được xấu để giải mã tất cả.

Đây là tất cả được viết bằng Python và tôi rất biết ơn về mọi mẹo, đề xuất hoặc triển khai có thể mà bạn có thể cung cấp. Ngoài ra đối với phát xạ âm, tôi đang sử dụng pyaudiere và để ghi âm, tôi đang sử dụng pyaudio.

Cảm ơn!

-Steve

+3

Câu hỏi hay - liên quan đến DSP nhiều hơn liên quan đến lập trình, vì vậy bạn có thể thử http://DSP.stackexchange.com –

+0

Mỗi giai điệu và phương pháp bạn hiện đang sử dụng để phát hiện là bao lâu? –

+0

có thể trùng lặp của [Binary Phase Shift Keying in Python] (http://stackoverflow.com/questions/7466715/binary-phase-shift-keying-in-python) –

Trả lời

2

Điều này nghe giống như sự cố phần cứng. Tôi chắc chắn rằng nó một công việc cho FSK. Hầu hết các hệ thống kiểu FSK hiện đại đều sử dụng PLL (chip vòng lặp khóa pha) để phát hiện thực tế. Các mạch tần số tới điện áp hoặc tần số tới dòng cũng có thể sử dụng được.

Tôi đã xem các mạch thực hành trong hàng tá sách về sở thích và trong bảng dữ liệu và trên trang web.Dưới đây là một vài ví dụ:

Circuit for demodulating an FSK signal

PLL Tutorial

Tôi hy vọng điều này không chỉ là một chuyến đi xuống hang thỏ cho bạn - chúc may mắn!

0

Sử dụng biểu diễn tín hiệu tự đồng hồ như Manchester code. Bằng cách đó, thời gian của bạn chỉ phải là "đủ tốt" và bạn chủ yếu lo lắng về việc phát hiện thay đổi, trong trường hợp này là tần suất. Trong bài báo liên kết mức cao và thấp đề cập đến điện áp, nhưng không có lý do gì họ phải làm. Bạn có thể dễ dàng sử dụng tần số cao và thấp hoặc bật/tắt một tia laser.

+0

Mã Manchester là một gợi ý tốt, nhưng vẫn còn vấn đề phát hiện âm thanh thực tế. –

+0

Bạn có thể ném một mạng thần kinh vào vấn đề, cho nó một cửa sổ trượt của mẫu và hỏi nó tại mỗi chu kỳ đồng hồ những gì bản chất của tín hiệu là tại thời điểm đó. Bạn sẽ phải đưa ra các quyết định này theo cách thủ công trên dữ liệu đào tạo. – wberry

1

Bạn đã thực hiện kiểm tra độ chính xác bằng cách nghe các tập tin âm thanh (cả truyền và nhận), hoặc xem dạng sóng với trình chỉnh sửa âm thanh để xem chúng có âm thanh hoặc trông giống nhau không? Bằng cách đó bạn có thể thu hẹp vấn đề gây ra lỗi do kênh gây ra so với phân tích phần mềm của bạn.

Phần mềm giải mã/giải điều chế của bạn sẽ cần một phương pháp đồng bộ có thể xác định và theo dõi thời gian tín hiệu âm thanh thay đổi từ tần số điều chế này sang điều chế khác, sau đó bạn sẽ phải kiểm tra riêng phương pháp đồng bộ hóa này.

1

Tôi sẽ giải quyết đầu nhận bằng cách sử dụng hai bộ lọc FIR, một cho mỗi tần suất mà bạn đang cố gắng phát hiện. Các hệ số của các bộ lọc chỉ là một bản sao của tín hiệu bạn đang tìm kiếm (tức là 250Hz trong một trường hợp và 450Hz trong một bộ lọc khác). Bạn sẽ phải nhìn vào đầu ra của bảng điều khiển năng lượng mặt trời của bạn để quyết định xem đó là một làn sóng vuông, sóng sin, hoặc một cái gì đó ở giữa. Độ dài của bộ lọc tương ứng với thời lượng của giai điệu (tức là 'x' trong câu hỏi của bạn). Các mẫu được đưa vào cả hai bộ lọc song song.

Đầu ra của mỗi bộ lọc cần phải được sửa chữa (nghĩa là lấy giá trị tuyệt đối) và làm phẳng. Làm mịn có thể được thực hiện bằng cách sử dụng một trung bình di chuyển đơn giản trong khoảng thời gian khoảng một nửa x (bạn có thể thử nghiệm để tìm giá trị tốt nhất). Sau đó, nếu bạn so sánh các giá trị được làm mịn (tức là a> b, hoặc b> a), bạn sẽ nhận được luồng 0 và 1.

Những điều cần lưu ý: Điều này giả định kênh hoạt động giống nhau cho cả hai tần số (tức là bạn nhận được mức độ tương tự như mức độ lệch và suy giảm). Bạn có thể cần phải tinh chỉnh tần số của bạn một chút vì 450Hz là khá gần với 500Hz đó là một điều hòa của 250Hz.

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