-
SISO 통신시스템 오류 확률 프로그램 (python)전공공부/통신 2021. 1. 11. 15:03
안녕하세요. 개알못입니다.
SISO 통신시스템 오류 확률 프로그램을 짜보았습니다.
Colab을 통해 Python으로 코드를 작성하였습니다.
SISO (Single-Input, Single-Output)이므로 송수신 안테나 개수는 1개입니다.
판정법은 ML (Maximum likelihood) detection으로 진행했습니다.
변조는 QPSK이고, 2-bit data symbol은 Gray code로 하였습니다.
그래프의 x축은 SNR[dB]이고 y축은 SER 입니다.
1.
- 코드에 사용된 모듈입니다.
- 루트2를 자주 사용하기에 간편하게 C로 정의했습니다.
2.
- QPSK, Gray code를 s로 반영했습니다.
- x축을 P의 dB 값으로 표현했습니다.
- y축은 아직 값이 없기에, 일단 나중에 추가할 계획으로 SER 변수만 만들었습니다.
3.
- 각 P_dB마다 SER을 계산하기 위해 for을 사용했습니다.
- 계싼할때는 dB값이 아니므로 P_dB를 P로 변환했습니다.
- 오류 검사할 때 쓰이는 변수들을 정의했습니다.
4.
- num_frame을 100000으로 잡았기에, nframe이 num_frame이 넘고 num_error가 100이 넘을 때 종료되게 하였습니다.
- 발생하는 메세지는 uniformly, randomly하게 2bit로 나오게 설정했습니다.
- 랜덤하게 나온 x값을 계싼하기 위해, data symbol로 변경했습니다.
5.
- fading channel(h), AWGN noise(n)을 python gaussian distribution randomd으로 사용했습니다.
- Receiver의 signal을 y로 표현했습니다.
6.
- s가 4개 있으므로 4번 비교를 해주게 for문을 이용했습니다.
- ML 판정법을 비교를 통해 표현했습니다. (index 저장)
- 랜덤으로 생성된 x값과 ML을 거친 s값을 비교하여, 동일하지 않을 경우 error을 더했습니다.
- SER은 전체 error에서 전체 frame으로 나누었습니다.
- P_dB의 for문이 끝날때마다 SER을 SER변수에 추가했습니다.
7.
- 그래프를 만들기위해 코드를 작성했습니다.
8. 결과
- SNR이 커질수록 오류가 감소함을 볼 수 있습니다.
[ 전체 코드 ]
코드 전체 복사하는걸 몰라서 캡쳐로 올립니다.
궁금한 점 있으시면 댓글 달아주세요~