어쩌다보니 연구에 OFDM을 써야하게 되었다. 조사한 내용을 정리해본다.

내 사용 목적은 (1)소리로 데이터를 전송하는 것과, (2)녹음된 소리의 Time Sync를 정확하게 맞추기 위함이다.




OFDM (Orthogonal Frequency Division Multiplexing, 직교 주파수 분할 다중화)

직교하는 부반송파(sub-carrier)를 수십~수천 개씩 사용해서 병렬로 정보를 전송하는 기술

기존 기법들은 Single Carrier로써, 주파수 하나만 잡고(예: FM 라디오 등등)데이터를 전송했으나, 단점이 많이 있었음


(carrier와 channel 용어는 서로 섞여서 쓰인다)




장점

  • Multipath 환경에 강하다.
    • 주변 사물에 부딪혀서 여러 번 겹쳐 녹음될 경우, 신호 분리가 까다로운데 이를 해결할 수 있음.
    • Single Carrier 쓸 때는 데이터를 많이 전송하려면 Higher Rate를 썼어야 했고
      그러면 Multipath 환경에서 신호가 너무 쉽게 겹친다. (목욕탕에서 말을 빨리 하는 것과 같음)
    • OFDM은 여러 Carrier에서 데이터를 나눠서 Lower Rate로 전송한다.
      => 한 비트가 오래 유지되니까 알아듣기 쉽고, 앞 신호랑 조금 겹쳐도 그 부분 걍 잘라내면 된다.
  • 특정 채널의 상태가 좋지 않아도, 병렬 전송이라서 영향이 크지 않다.
    • SIngle Channel 였다면 신호가 아예 죽었을 것
  • 대역폭을 굉장히 효율적으로 사용한다
    • Sub-carrier를 겹치게 배치할 수 있으므로

(더 많은 장점은 위키를 참고: https://ko.wikipedia.org/wiki/직교_주파수_분할_다중_방식)




왜 Orthogonal인가?

병렬 전송에 대한 개념으로 FDM이 먼저 나왔으나 단점이 존재했다. 각 sub-carrier들이 겹치지 않아야 했으므로 Guard Band가 필요했다.

결과적으로 대역폭(Bandwidth)를 많이 차치하여 비효율적인 배치가 된다.


근데 어찌어찌 '직교성' 이라는것을 잘 이용하면 sub-carrier들을 겹치게 배치해도 잘 동작하게 된다. 아래처럼...

FDM과 비교했을 때 훨씬 많은 sub-carrier를 이용할 수 있음을 알 수 있다. Guard Band도 없다.




OFDM 채널 배치 구조

한 Carrier의 Amplitude가 최대일 때, 다른 Carrier들의 Amplitude는 0이 되도록 스펙트럼이 절묘하게 겹쳐져 있다. (직교성)

Theoretical BPSK OFDM spectrum



Guard Interval

위에서 Guard Band라는 용어가 쓰였는데, 채널 사이를 분리해 주는 역할이었다. (Frequency domain)
이번 용어는 Guard Interval로 전혀 다른 개념이며, 전송하는 데이터 사이를 분리해 준다. (Time domain)

예를 들어, 사우나에서 한 단어를 말하고 연달하서 다음 단어를 말하면 Multipath에 의해 첫 단어와 두 번째 단어가 겹쳐서 들린다.
그래서 첫 단어를 말하고 잠깐 쉬어주면(Guard Interval) 첫 단어의 Echo가 완전히 사그라 들게 되고, 이 때 두 번째 단어를 말한다.

즉 Guard Interval은 Echo들이 완전히(혹은 충분히) 사그라 들 때까지 기다리는 시간을 의미한다.

아래 그림은 Signal이 Multipath에 의해 3번 수신된 상황을 예시로 든 것이다. 마지막 Reflection까지를 Guard Interval로 설정했다.
물론 Guard Interval은 환경에 따라 매 번 개발자가 직접 지정해 줘야 하는 부분이다. 동굴 안에서는 충분히 길게 해야 할 것이고...




주로 쓰이는 OFDM 송수신부 구조


위 구조에서 Time Sync와 Cyclic Prefix 등은 빠져있음. 실제 구현하려면 위 구조보다 조금 더 복잡함.



Cyclic Prefix

Cyclic Extension (순환 확장)은 Multipath로 인해 발생하는 ISI(Inter Symbol Interference)를 극복하기 위해 고안된 방법이다.

목적은 Sub-carrier 사이의 직교성(Orthogonality)의 파괴를 방지하기 위함이다.

방식은 Cyclic Prefix의 경우 유효 신호의 마지막 부분 신호를 일정 부분 복사해서 앞에다가 삽입한다.


아래와 같은 데이터를 전송한다고 해보자. 3개의 Symbol이 있다.


이를 전송하면 Multipath로 인해서 Delay를 가진 신호들이 여러 번 들어오게 된다. 아래는 Original과 2개의 Multipath를 예로 들었다.

잘 보면 S2의 앞부분이 S1의 Echo와 겹치기 때문에 Inter Symbol Interference가 발생하여 S2를 추출해 낼 수 없게 된다.

따라서 결과를 보면 S2의 앞부분이 손실되고 뒷 부분만 얻어내게 된다.


그래서 Cyclic Prefix를 두게 된다. 어려운 개념은 아니고 Symbol의 뒷부분 일부를 앞에다가 복사하는 것이다.


그리고 신호를 전송해 보면... Multipath로 겹치는 부분이 발생하더라도 결국은 S2 안에서 일어나는 일이기 때문에

Symbol간의 Inter Symbol Interference는 발생하지 않는다는 것을 알 수 있다.




자주 쓰이는 용어 및 개념

  • FFT (Fast Fourier Transform)
    • 시간 도메인 신호를 주파수 도메인으로 바꿔주는 것
  • IFFT (Inverse Fast Fourier Transform)
    • FFT를 역으로 하는것
  • ISI(Inter Symbol Interference), ICI(Inter Channel Interference)
    • Multipath로 인해 신호가 겹쳐 들리는 현상
  • Modulation
    • 신호를 잘 전달하기 위해 적절히 데이터를 변조하는 것 (전자쪽 용어, 신호처리 분야)
    • QPSK, 16-QAM 등등 주로 사용됨
  • Cyclic Prefix
    • Guard Interval(최대 지연시간)동안의 신호를 복사해서 앞에 갖다붙이는 것
    • Guard Interval을 쓰는 이유? Multipath로 신호가 겹쳐봤자 최대 이 시간까지만 겹칠 것이라고 가정하는 것
    • 쉽게 말하면 뒷쪽 신호를 짤라서 앞에 갖다붙이는 것
    • Inter Symbol Interference를 극복하기 위함 - 신호가 어느정도 겹쳐도 걍 CP를 잘라버림 (어차피 뒤에 또 나올거니까)





[출처]

https://ko.wikipedia.org/wiki/직교_주파수_분할_다중_방식 (OFDM 기본 설명 및 장단점)

http://www.whydsp.org/209 (OFDM과 CP에 대한 이해가 쉬운 설명)

https://www.csie.ntu.edu.tw/~hsinmu/courses/_media/wn_11fall/ofdm_new.pdf (영문)(설명이 그림과 함께 아주 잘 되어있음)

https://dsp.stackexchange.com/questions/20132/ofdm-transmitter-bandwidth (영문)(그림 출처)

https://caesarhks.blog.me/70133244891 (OFDM에 대한 간단한 설명)

http://www.ni.com/white-paper/3370/ko (영문)(OFDM에 대한 간단한 설명)

https://www.radio-electronics.com/info/rf-technology-design/ofdm/ofdm-basics-tutorial.php (영문)(OFDM 설명)


http://www.ktword.co.kr/abbr_view.php?m_temp1=3164 (Cyclic Prefix 용어 설명)

http://www.telecomhall.com/what-is-cp-cyclic-prefix-in-lte.aspx (영문)(Cyclic Prefix 기본 개념 설명)


[좋은 코드 예시들]

http://blog.naver.com/PostView.nhn?blogId=ykryu7&logNo=221256145776 (MATLAB. 예시 코드와 설명)(실수, 허수 구조)

http://www.rfwireless-world.com/source-code/MATLAB/OFDM-matlab-code.html (영문)(MATLAB. 단순하며 직관적인 4-channel 코드 예시)

http://www.skydsp.com/publications/4thyrthesis/code.html (MATLAB. WAV 소리 파일로 생성하는 코드. 논문에 사용된 코드라 다소 복잡함)

http://dspillustrations.com/pages/posts/misc/python-ofdm-example.html (Python. 단계별로 아주 자세히 설명해 주는 코드 예시)

http://wisechoding.tistory.com/41 (MATLAB, 단계별 OFDM 시뮬레이션)

[Sampling]

이 세상의 소리(Sound)라는 것은 아날로그이기에 Linear 하다.

그런데 컴퓨터는 디지털이므로 이 Linear한 소리를 Discrete 한 데이터로 변환해야 한다.


아날로그의 오묘하고 복잡한 특성을 전부 그대로 담기에는 용량의 문제가 있으므로

일부분만 채취(샘플링)하여 최대한 원본과 유사한 디지털 데이터를 만들게 된다.

이러한 과정 또는 행위를 샘플링이라 한다.


용어가 몇 개 있다:

(1) 샘플링 레이트(Sampling Rate) : 1초에 몇 개의 샘플을 추출할 것인지

(2) Bit Depth : 한 개의 샘플이 얼마만큼의 크기를 가지는지


당연하게도 샘플링 레이트가 높을 수록 아날로그와 유사한 디지털 값(고음질)을 얻을 수 있다.

아래 그림은 샘플링 레이트에 따른 디지털 데이터의 모양을 나타낸다. 

잘게 쪼갤 수록 아날로그의 것과 같이 부드러운 곡선이 되는 것(=원본에 가까움)을 확인할 수 있다.


(출처: http://www.morphfx.co.uk/music/edu-sampling.htm)


우리가 일반적으로 구입할 수 있는 음반 CD의 스펙은 44,100hz 16bit 이다.

1초에 44100개의 샘플을 추출하고, 각 샘플의 크기는 16bit (= 2byte short) 라는 것이다.




[나이퀴스트 샘플링 이론(Nyquist–Shannon sampling theorem)]

왜 대부분의 MP3 파일, 혹은 하드웨어들이 44,100hz 스펙을 가지고 있는지에 대해 이 것으로 설명이 가능하다.


이론의 결론만을 요약하면 다음과 같다:

A sufficient sample-rate is therefore 2B samples/second, or anything larger. 

충분한 샘플링 레이트는 대역폭의 두 배, 혹은 그 이상이다.


이론에 대한 간략한 설명


사람이 소리로 들을 수 있는 가청 주파수의 범위는 20~20000 Hz 이다.

즉 데이터의 대역폭이 20 KHz라는 것인데, 이를 왜곡(Aliasing 등) 없이 샘플링 하려면

대역폭의 2배인 40 KHz 샘플링 레이트로 샘플링 해야한다.


여기서 오차 10% 및 영상 업계 표준과의 동기화 문제 등으로 인해

현재는 44,100Hz와 48,000Hz가 범용적으로 가장 많이 사용되게 되었다.


아래는 어디서 줏어들은 것:

44,100hz : 25FPS PAL, 30FPS NTSC

48,000hz : 29.97FPS NTSC




[Sources]

https://en.wikipedia.org/wiki/Sampling_(signal_processing)

https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem

https://en.wikipedia.org/wiki/Aliasing

최근 서버가 자꾸 shutdown 되는 상황이 발생하여 로그를 살펴보았습니다.

사용중인 운영체제는 CentOS 7 64비트입니다.


cat /var/log/messages | grep 'System is powering down.'


불규칙적으로 서버가 꺼지는 현상이 발생했는데, 신기하게도 비정상 종료가 아니라 정상 종료(Shutdown)였습니다.

파워나 보드 등의 부품 문제로 인한 갑작스런 전원 종료는 아닌 것입니다.


누군가 리눅스를 일부러 끄고 있다는 생각이 들어 해킹을 의심했으나, 로그에서 다음과 같은 부분을 발견했습니다.


Jan 10 22:23:31 localhost systemd-logind: Power key pressed.

Jan 10 22:23:31 localhost systemd-logind: Powering Off...


놀랍게도 전원 버튼이 눌려 시스템이 꺼지고 있었습니다. 그런데 주변에 물어봐도 아무도 누른 사람이 없습니다.

이 상태로 한 2주 지나니까 이젠 시스템을 켜면 3초 안에 자동으로 꺼집니다. 그리고 다시 알아서 켜지고, 반복됩니다.


전원 버튼 고장으로 결론을 내릴 수밖에 없는 상황입니다.


그런데 이미 제 TS140은 구입 후 1년이 경과하여 무상 RMA 불가하고, 해외 수입 제품이므로 국내 유상 A/S도 불가능합니다.

TS140 Front Bezel을 구입하여 교체하면 되지만 일단 당장 서버를 살리고 봐야 하니 나중으로 미룹니다.



메인보드의 우측하단에 전면부 패널과의 연결 케이블이 있습니다.

이 케이블을 Plug-Out 하였더니 시스템이 꺼졌다 켜졌다 하는 일은 사라졌습니다.

아무래도 전원 버튼 고장이 확실해 보입니다.



그런데 전원 버튼 연결선을 뽑아버렸으니 컴퓨터를 켤 방법이 없어졌습니다.

전원 시그널 핀 2개를 드라이버로 쇼트 내면 켜지긴 합니다만, 이걸 매 번 옆커버 따서 할 수는 없는 일입니다.



그래서 꼼수를 써 봅니다. 부팅 시 F1을 눌러 CMOS를 들어가면 파워 설정이 있습니다.

이 중에서 '전원 케이블이 연결되면 자동으로 시스템이 켜지도록' 하는 옵션이 존재합니다.

이 옵션을 ON으로 하여, 전원선을 뽑았다 꽂으면 시스템이 켜지도록 하였습니다.



전원을 끄는 것은 문제가 없습니다. 리눅스에서 shutdown 명령어로 종료하도록 합니다.



일단 이렇게 조치하여, Front Bezel이 도착할 때까지는 운영이 가능하겠습니다.

'기록물 > 사용기' 카테고리의 다른 글

TS140 전원 버튼 고장 시 대처법  (12) 2017.01.13
SADES SA-713 구입 및 사용기  (0) 2014.02.19
맥북 하판 케이스 교체 후기  (15) 2013.10.14
시대를 거스르는 AquaPlayer  (23) 2011.05.20
  1. 난짬뽕 2017.02.14 01:45 신고

    아쿠님 ts140 저도 사용중인데 일반 컴으로 사용중입니다
    혹시 해결하셔는지요 저도 아쿠님과 동일증상이어서 기존 스위치 파워전고 하드전구 전부 갈아습니다
    당연히 케이블도 갈아지요
    저도 이글을 읽고 스위치 문제인줄아아습니다 허나 2틀후 똑같은 증상이 시작되더군요
    분명 스위치쪽에서 강제 리부팅시도 합니다 꺼다켜다 허나 스위치에서 하는게 아니라
    메인보드쪽에서 하는것 같습니다
    저는 지금 메인보드 쇼트쪽에 무게을 실고 있습니다
    혹시나 아쿠님이 해결하셔나 해서 문의 드림니다
    혹시 해결하셔으면 답글부탁합니다

    • Acu 2017.03.16 19:26 신고

      제 경우는 전면부 패널 문제로 추정하고 있습니다. 케이블을 뽑으면 전혀 시그널이 들어오지 않습니다.
      윈도우 사용중이시면 전원 버튼 눌렀을 때 아무런 동작을 하지 않도록 설정하시고 사용하시는 것이 좋아보입니다.

  2. BOL 2017.02.24 16:51 신고

    전 메인보드도 교체했는데
    동일증상입니다.
    해결되셨나요?

    • Acu 2017.03.16 19:27 신고

      전면부 패널과의 연결 케이블을 뽑아도 해당 문제가 발생하신다면 제 케이스와는 다른 문제라고 생각됩니다.
      로그를 살펴보셔서 왜 시스템이 꺼지는지 확인해 보셔야 할 것 같습니다.
      아무런 로그 없이 비정상 종료된다면 파워쪽도 살펴보시기 바랍니다.

  3. X3ny7h 2017.03.12 12:58 신고

    저도 아쿠님과 동일한 증상이네요.
    몇달전에 구입한 gtx 1050 ti 때문에 전원이 딸려서 그런가싶어 그래픽카드 뽑고 내장으로 돌려도 마찬가지고
    램이나 그래픽카드 등등 모든 부품들 뽑았다가 다시 조립하니 한동안 잘 되다가 전원버튼 한번 누르니까 다시 랜덤으로 꺼졌다 켜지기를 반복하네요.
    혹시나 싶어 전면부 패널과의 연결 케이블을 뽑으니까 자동으로 시스템이 켜지는 증상은 사라지더군요.
    Front Bezel은 레노버 공홈에서 구입하시는건가요?
    이베이 검색해보니 중고매물이 종종 있긴하던데 가격도 그렇고 중고라 지저분할거 같아 영 찜찜하네요.
    일단 지금은 아쿠님 글보고 bios 들어가서 power on 으로 해놓고 쓰고 있긴한데 난짬뽕님 댓글보니 몇일있다 다시 증상이 시작될거 같아 난감하네요.

    • Acu 2017.03.16 19:31 신고

      안녕하세요. 제 사례와 같은 전원 버튼 문제로 보입니다.
      다만 전 서버 용도로 사용 중이어서 딱히 급한 사항이 아니다 보니 전면 패널은 아직 구매하지 않았습니다.
      한국 레노보에 정식으로 발매된 부분도 아니라서 부품 수급이 쉽지는 않아 보입니다.
      하지만 전면 패널 USB는 정상 동작하니 그냥 이대로 사용하시는 것도 괜찮을 것 같습니다.

  4. hawau 2017.03.23 08:45 신고

    아... 이글을 이제서 봤네요.
    1년여간 잘 써오던 TS140이 갑자기 전원이 꺼지기 시작하더니,
    재부팅하면 2~3초후 자동종료를 반복하더라구요.

    며칠간 별별시도를 다해봐도 답이 안나와서,
    메인보드 고장으로 판단하고 matx 보드랑 non etc 램 주문해 놓은 상태입니다. ㅜㅜ

    부품 도착전에 다시한번 조립해 봐야겠습니다.
    결과는 다시 댓글 남길게요.
    좋은 정보 정말 감사합니다.

    • hawau 2017.03.23 09:49 신고

      역시 전원버튼 고장이 맞은것 같습니다.
      부팅직후 전원케이블 커넥터 뽑아 버리니
      이상없네요.
      원인을 알고나니 앓던이 뽑은것 처럼 속 시원합니다.
      그나저나 전원버튼 부품을 어찌 구해야 할까요? ㅜㅜ
      다시 한번 감사드립니다.

  5. 우세바리 2017.03.23 17:38 신고

    앞뚜껑 뜯어서 전원 버튼부 누르지 안고 툭~ 건드리니 저절로 켜지네요.
    그래서 전원 버튼에 연결된선 간섭때문인가해서 간섭안받게 벌려놓고 건드리니 일단 전원은 안켜지네요.
    오늘 이래놓고 종일 컴켜놓고 상황지켜봐야겠습니다.

    해결방법 찾은듯 합니다.
    http://www.ppomppu.co.kr/zboard/view.php?id=computer&no=463888&slave=off

    이 게시글 못봤으면 저도 해결법 찾기 어려웠을 것 같네요. 감사합니다.

    • Acu 2017.03.23 21:35 신고

      도움이 되셨다니 다행입니다. 올리신 글을 보아하니 플라스틱 부품 내부의 냉납일 가능성도 있어 보입니다.
      경험담과 해결하신 방법을 제시해 주신 점 감사합니다. 같은 문제를 겪고 계신 분들에게 큰 도움이 될 것 같습니다.

  6. hawau 2017.03.23 20:45 신고

    오늘 죙일 고생끝에 해결 했습니다.
    모 게시판에 제가 올린글 링크 올립니다.
    참고하세요 ^^

    http://www.ppomppu.co.kr/zboard/view.php?id=computer&no=463903

    • Acu 2017.03.23 21:36 신고

      해결되셨다니 다행입니다. 부품값이 만만치 않아서 구매하기는 부담스러운 부분이 있어 보입니다.
      다만 저는 서버 용도로 사용 중이라 100% 정상 작동을 보장해야 해서 청소로는 안심할 수가 없을 것 같습니다.
      사용하시다가 동일 문제가 다시 발생하시면 또 방문해주셔서 후기 남겨주시면 감사하겠습니다.

+ Recent posts