Bạn đã có một loạt các tình huống khá tốt ở đây; bạn sẽ có thể đạt được mục tiêu của mình mà không gặp quá nhiều khó khăn. Tôi không thấy bất cứ điều gì trong mô tả của bạn rằng sẽ loại bỏ một lớp học toàn bộ điều chế (ví dụ keying dịch pha , tần số chuyển keying , vv). Một số yếu tố sẽ đưa ra lựa chọn định dạng phù hợp sẽ bao gồm:
- Hiệu suất phổ cần thiết (nghĩa là bạn cần bao nhiêu thông lượng dữ liệu so với băng thông có sẵn)
- Các yêu cầu phức tạp cho máy thu của bạn (thường là phần phức tạp nhất của hệ thống)
- Bạn sẵn sàng bỏ ra bao nhiêu nỗ lực để phát triển việc thực hiện.
- Các trường hợp khác dành riêng cho ứng dụng của bạn (ví dụ: nếu bạn có độ chính xác về thời gian kém ở một hoặc cả hai đầu, nhiễu đã biết hoặc phản hồi kênh kém)
Vì vậy, đánh dấu từng cái một cho hệ thống của bạn, chúng tôi có thể đưa ra một vài hướng dẫn:
Có vẻ như hạn chế lớn nhất của bạn là phản hồi kênh của bạn (bị giới hạn bởi bộ xử lý âm thanh của card âm thanh của bạn). Nếu bạn có sẵn 40 kHz băng thông một phía, thì bạn sẽ bị giới hạn ở tốc độ ký hiệu thấp hơn một chút. Đối với tốc độ dữ liệu đích ít nhất 40 kilobit mỗi giây, bạn sẽ muốn một số sơ đồ truyền nhiều bit trên mỗi ký hiệu.
Với điều kiện nền tảng nhúng của bạn không được tải xuống với quá nhiều chức năng khác, bộ xử lý ARM 120 MHz hiện đại có thể dễ dàng xử lý giải điều chế hầu hết mọi định dạng trong phạm vi hàng chục kilobits mỗi giây.
Tôi không chắc chắn cụ thể bạn đang chạy với mô hình nào, nhưng nhiều bộ xử lý gần đây cung cấp tích hợp rất chặt chẽ các ADC trên bo mạch với bộ nhớ và hệ thống con bị gián đoạn, có lẽ cho phép bạn (không can thiệp CPU thủ công) tự động lấy mẫu tín hiệu đầu vào theo một chỉ định xếp hạng, lưu trữ các mẫu trong bộ nhớ trên bo mạch và chỉ kích hoạt bộ xử lý ngắt khi có sẵn một khối mẫu có kích thước nhất định để xử lý. Tôi biết rằng một số thiết bị Atmel ở mức tối thiểu cung cấp loại chức năng này; Tôi đã có thành công tốt đẹp với họ trong quá khứ.
Tôi cho rằng đây có lẽ là một thành phần của một số hệ thống lớn hơn, vì vậy bạn không muốn phải xây dựng một cái gì đó thực sự phức tạp để đáp ứng yêu cầu của bạn. May mắn thay, dựa trên những gì bạn đã nói, tôi nghĩ bạn sẽ có thể thực hiện một cái gì đó đáp ứng yêu cầu của bạn khá đơn giản. Tôi cho rằng vì hai thiết bị được kết nối với nhau, nên bạn có thể có tỷ lệ nhiễu tín hiệu rất cao (40 dB trở lên), đối với điều chế kỹ thuật số thường được đo là . Điều đó làm cho cuộc sống dễ dàng hơn nhiều, vì bạn có thể bỏ qua các bổ sung như mã hóa sửa lỗi hoàn toàn (hoặc ít nhất là thực hiện một sơ đồ rất đơn giản sẽ bắt được các lỗi rất không thường xuyên mà bạn mong đợi ở SNR như vậy).EbN0
Đối với các trường hợp đặc biệt, đối với hệ thống này, tôi sẽ không mong đợi gì nhiều. Tôi hy vọng độ chính xác của bộ dao động ở phía PC là khá tốt (ở mức tối thiểu được điều khiển bằng tinh thể , vì vậy bạn ở trong phạm vi <50 ppm hoặc hơn; có thể tốt hơn nhiều nếu bộ dao động được hiệu chỉnh bằng một số nguồn chính xác khác ). Mặt nhúng có khả năng giống nhau; Tôi giả sử bạn đang sử dụng bộ tạo dao động tinh thể làm nguồn đồng hồ. Vì hai đầu được kết nối với nhau, tôi sẽ cho rằng bạn không có sự can thiệp của ghi chú.
Vì vậy, kết hợp tất cả những điều này lại với nhau thành một khuyến nghị duy nhất, có lẽ tôi sẽ bắt đầu con đường của cách tiếp cận khóa dịch pha cầu phương (QPSK) ở mức 24 kilosym mỗi giây . Với 2 bit cho mỗi ký hiệu, điều này mang lại tốc độ dữ liệu 48 kilobits mỗi giây, vượt quá yêu cầu của bạn. Tỷ lệ cụ thể này làm cho việc thực hiện của bạn dễ dàng hơn một chút; do bộ xử lý đầu ra đang chạy ở 96 kHz, điều này dẫn đến 4 mẫu trên mỗi ký hiệu (luôn luôn dễ dàng hơn để chạy với số lượng mẫu trên mỗi thời gian ký hiệu). Tôi có lẽ sẽ cố gắng thiết kế mặt nhúng để nó sẽ lấy mẫu ở cùng tốc độ 96 kHz nếu có thể; điều này tránh sự cần thiết phải thực hiện bất kỳ việc lấy lại mẫu nào ở phần cuối bị thiếu tài nguyên.
Để tránh bất kỳ vấn đề nào với notch DC mà card âm thanh của bạn sử dụng, bạn có thể điều chỉnh tín hiệu QPSK lên sóng mang ở tần số 24 kHz. Sau đó, phổ của tín hiệu được điều chế sẽ có giá trị null tại DC, nó sẽ thẳng hàng với notch của bạn. Có thể là notch cuối cùng không phải là một vấn đề (đặc biệt là nếu nó thực sự chỉ rộng vài Hz như đề xuất của bạn). Trong trường hợp đó, bạn có khả năng có thể nhận được bằng một sơ đồ thậm chí đơn giản hơn, chỉ hoạt động ở băng cơ sở, bỏ qua điều chế sóng mang hoàn toàn.
QPSK là một lựa chọn tốt vì tính đơn giản của nó, cả ở máy phát và máy thu. Tại SNR của bạn, bạn có thể đạt được hiệu quả phổ lớn hơn bằng cách sử dụng sơ đồ phức tạp hơn như điều chế biên độ cầu phương (QAM) , nhưng tính chất bao phủ không đổi của tín hiệu PSK hấp dẫn từ quan điểm độ phức tạp của máy thu. Lưu ý, nếu bạn thực sự cần nhiều bit hơn cho mỗi biểu tượng trong tương lai, bạn có thể chuyển sang chòm sao PSK bậc cao hơn như 8- hoặc 16-PSK. Tuy nhiên, đây là tối ưu từ quan điểm hiệu suất tỷ lệ lỗi bit khi so sánh với các chòm sao QAM.
Theo như triển khai thư viện, tôi không biết bất cứ điều gì bạn có thể thả vào và đi, đặc biệt là đối với một nền tảng nhúng. Việc triển khai máy thu của bạn có khả năng được gắn với giao diện phần cứng ở một mức độ nào đó. Bạn có thể tìm thấy một số triển khai hiện có cho các bước khác nhau cần thiết cho bộ giải mã, nhưng ít nhất bạn sẽ cần phải điều chỉnh những gì bạn có thể tìm thấy để hoạt động tốt trên nền tảng của mình. Các GNU Radio dự án là một nơi tốt để nhìn nếu bạn chỉ muốn xem C ++ triển khai nhiều thông tin liên lạc khác nhau là dấu hiệu hoạt động chế biến, và nó thậm chí có thể tạo ra một khuôn khổ hữu ích cho việc thực hiện phát onboard PC của bạn. Tóm lại, các bước cấp cao mà người nhận của bạn cần thực hiện sẽ bao gồm:
Điều này có vẻ như là một quá trình phức tạp, nhưng việc xây dựng một máy thu thực tế cho ngay cả một tình huống đơn giản như thế này có thể rất sáng sủa. Chỉ cần bình luận nếu có bất cứ điều gì khác tôi rời khỏi.