프로테우스는 가상 실험을 통해 회로를 설계하고 점검할 수 있을 뿐만 아니라 완성된 회로를 PCB 제작까지 할 수 있는 통합 시뮬레이션 프로그램이다. 회로 시뮬레이션 하면 Orcad나 Multisim 같은 툴들이 생각나겠지만 프로테우스는 하드웨어가 주가 아닌 소프트웨어와 주변 회로 해석에 중점을 두고 있기 때문에 앞서 언급한 툴들과 성격이 약간 다르다. 특히 최근 버전인 8.6에서는 8051, AVR 등의 오래된 프로세서부터 아두이노, STM32M0, M3 까지 다양한 MCU 들을 지원하기 때문에 소프트웨어 점검과 디버깅을 빠르게 진행할 수 있고 공부하는 입장에서 또한 유용하게 쓰일 수 있다. 



본 포스팅에서는 간단하게 프로테우스 8.6 툴의 사용법과 기본 설정 및 테스트를 진행해볼 것이며 앞으로 AVR 관련 글들도 모두 프로테우스를 활용할 예정이다.



1. 프로젝트 생성



프로테우스를 실행하면 위와 같은 첫 화면이 나타난다. 좌측 상단에 File 을 누르고 New Project를 클릭하여 원하는 이름의 프로젝트를 생성하도록 하자. 생성 과정에서 화면 크기는 Landscape A3 정도가 무난하며 PCB layout은 본 포스팅에서 다루지 않기 때문에 그냥 넘어가도록 한다.



위 화면은 프로테우스 툴에서 직접 펌웨어까지 개발할 것인가를 묻고 있다. Create Firmware 선택시 사용할 MCU와 컴파일러를 설정할 수 있으며 사실 이 부분도 선택사항이긴 하지만 프로테우스 툴에서 코드를 짜는 것 보다 다른 컴파일러를 사용하는 것이 편하기 때문에 No Firmware Project 를 선택하도록 하자. 그럼 다음과 같은 초기 화면이 나타날 것이다.




2. 단축키 설정


다른 회로 시뮬레이션 툴을 사용한 경험이 있다면 프로테우스를 사용하는데 있어서 그다지 어렵지 않으며 몇번 사용하다보면 쉽게 익숙해질 수 있다. 그런데 특이하게도 한 가지 불편한 점이 있는데, 바로 단축키 부분이다. 필자가 많은 툴들을 다뤄본 것은 아니지만 이제까지 살면서 가장 기본적인 Ctrl + C 와 Ctrl + V 단축키 조차 디폴트로 지정되어 있지 않은 툴은 처음 봤다. 따라서 가급적 기본적인 단축키 정도는 지정하고 툴을 사용하기를 바란다. 단축키는 메뉴에서 System 탭의 Set Keyboard Mapping 항목에서 설정할 수 있다.


 

설정 방법은 위와 같이 명령어를 클릭하고 밑의 No Key Set 부분에 설정할 단축키를 입력한 뒤 Assign을 클릭하면 할당이 완료된다. 추가적으로 도형을 회전시키는 Rotate 키를 R 로 설정해두면 보다 편하게 사용할 수 있으며 나머지는 툴을 직접 사용하면서 불편한 부분만 개인적으로 설정하기 바란다.



3. LED 점멸


그럼 프로테우스 툴을 사용하여 ATmega128 보드에 간단한 LED 점멸 코드를 삽입하고 시뮬레이션을 진행해보자. ATmega128 보드 및 기타 모든 부품들은 단축키 P를 눌러서 찾을 수 있다.



마찬가지로 Led와 저항을 찾아서 다음과 같은 회로를 구현하도록 한다. 이때 LED는 Active 라이브러리를 선택해야 시뮬레이션에서 시각적으로 불이 켜지는지 확인할 수 있다. (LED-BLUE, LED-RED 등의 부품을 선택하면 된다) 또한 저항을 더블 클릭하면 저항 값을 바꿀 수 있으며 접지나 파워는 부품이 아니므로 왼쪽 메뉴에서 Terminals Mode 탭을 클릭하면 가져올 수 있다. 완성된 회로는 다음과 같다.



실행 코드는 다음과 같으며 필자는 CodeVision 컴파일러를 사용하였다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <io.h>
#include <delay.h>
 
void main(void)
{
    char temp = 0x01;
    DDRB = 0xFF;
 
while (1)
    {
        PORTB = temp;
        delay_ms(300);
        temp = temp << 1;
        if( temp == 0x00)
            temp = 0x01;
    }
}
cs

프로테우스의 AVR에 위 프로그램 코드를 집어넣으려면 해당 코드의 HEX 파일이 필요하다. HEX 파일은 컴파일러를 통해 프로그램을 빌드하면 자동으로 생성되며 위 그림에서 atmega128을 더블 클릭하여 설정창으로 이동한 후 Program File 항목에 HEX 파일의 경로를 설정하도록 하자.



그리고 기본 설정이 내부 RC 클락으로 동작하게 되어 있으므로 위 빨간색 부분에 외부 클락으로 설정한 뒤 밑에 16MHz로 설정해두면 시뮬레이션에 필요한 초기 설정이 모두 완료되었다. 이제 설정창을 닫고 메인화면 밑에 시뮬레이션 시작 버튼을 클릭하여 프로그램이 잘 동작하는지 확인해보자.




간단하게 프로테우스 사용법에 대해 알아보았다. 사실 본 포스팅에서는 가장 기초적인 부분만 다루었으며 방대한 부품들을 지원할 뿐만 아니라 오실로스코프, 로직 아날라이저, 터미널 등 다양한 부가 기능들을 지원하기 때문에 MCU를 사용한 회로 설계에 있어서 유용하게 사용할 수 있을 것이다. 앞으로 AVR 관련된 포스팅들을 준비하면서 하나하나 소개하도록 하겠다.

'Electronic > AVR' 카테고리의 다른 글

소스 레벨 디버깅  (0) 2017.06.14
외부 인터럽트  (0) 2017.06.08
인터럽트 이해하기  (0) 2017.06.06
C언어에 대해서 Programming/C 2017. 5. 22. 16:52


C언어가 개발된지도 어느덧 40여년이 넘는 시간이 지났다. 이 긴 시간 동안 많은 숫자의 언어들이 생겨나고 발전하였으며 그만큼 사라져갔다. 이 흐름 속에서 C언어는 다른 언어와는 차별화되는 자기만의 영역을 구축하였고 이를 통해 독보적인 위치에 있을 수 있었다. 하지만 90년도에 자바의 등장으로 엄청난 인기를 끌게되면서 C와 C++은 이제 한물 간 언어라는 위기론이 대두되었고 이는 현대에 와서도 지속적으로 이야기가 나오고 있다.

사실 완벽하게 부정하기는 힘든 논제이다. 기술의 발전으로 하드웨어의 사양이 눈이 부시게 발전하였고 프로그래밍 언어가 생겨나고 사라지면서 생긴 간편한 문법들은 더이상 진입장벽이 높은 C 를 사용할 필요성을 느끼지 못하게 하였다. 분야에 따라서는 C를 전혀 모른다고 해도 개발하는데 지장이 없을 정도이다. 하지만 그럼에도 불구하고 C언어는 특유의 LOW한 특징 때문에 여전히 매력적이다. 앞으로 계속해서 설명하겠지만 다른 언어들에 비해 C는 어떤 용도를 가지고 사용하더라도 제약 사항이 매우 적으며 자유도가 풍부하고 매우 간결하다. 이는 분명 현대에 와서도 그 가치가 빛 바라지 않을 것이며 C와 C++을 배우면 다른 언어를 배우고 이해하기에 상대적으로 쉽다는 장점도 있다.

따라서 지금 이 시점에서 과연 C를 배우는 것이 의미가 있을까? 라는 의문을 가진 분들을 위해 간단하게 C 언어를 소개하고 어떻게 공부해야 할 것인가에 대해 글을 써본다.


1. C의 역사

왠 뜬금없는 역사부터 시작인가? 라고 하시는 분도 있겠지만 사실 프로그래밍 언어를 이해하는 측면에 있어서 역사를 알고 공부하는 것과 모르고 공부하는 것은 차이가 크다. 역사를 알면 C가 왜 이렇게 구현될 수 밖에 없었는지 개발자의 의도를 파악할 수 있으며 이를 통해 언어의 철학을 이해하고 공감할 수 있고 또한 코드에 녹여서 적용할 수 있게 된다. 이는 개발자의 실력을 가늠할 수 있는 중요한 지표가 되기도 한다.


좌 : 켄 톰슨, 우 : 데니스 리치


C언어가 개발될 수 있었던 배경을 말할 때 언제나 가장 먼저 언급되는 것은 바로 UNIX 운영체제이다. 1970년대에는 일반적으로 대부분의 시스템을 어셈블리어로 구현하였는데 이는 HW의 성능이 떨어지기도 했고 당시에 개발되었던 포트란이나 알골 같은 언어들이 OS를 기반으로 하기에는 부족했기 때문이다. 또 다른 배경으로는 당시에 어떤 프로그램을 개발할 때 해당 플랫폼을 기반으로만 개발하여 다른 플랫폼으로의 이식성이 매우 떨어졌고 이로 인해 코드를 수정하는데 많은 시간을 할애할 수 밖에 없었던 문제점도 있었다.

이러한 부분들로 인해 기존의 UNIX 운영체제는 유지보수가 매우 힘들었고 이를 해결하기 위해 당시의 AT&T Bell lab 에서 일하던 데니스 리치(Dennis Ritchie)가 개발한 것이 바로 C언어 이다. 사실 데니스 리치는 켄 톰슨(Ken Thompson)과 함께 UNIX를 개발한 공동 창시자이기도 한데 위에서 언급했던 문제점들을 해결하기 위해 개발하다 보니 자연스럽게 운영체제의 언어적 개념들과 철학이 C에 녹여졌다. 때문에 C언어는 하드웨어의 기본적인 측면을 잘 지니면서도 간결하고 명확한 언어로 개발되었으며 하드웨어의 기능을 바로 바로 맵핑 시키기 때문에 높은 성능 속도를 보여주고 최적화가 뛰어나다. 후에 데니스 리치는 UNIX 운영체제의 어셈블리어 코드를 C언어로 다시 재작성하여 UNIX가 다양한 하드웨어에서 사용될 수 있도록 하였다. 추가적으로 개발자라면 누구나 알고 있는 Hello, World! 또한 데니스 리치가 가장 먼저 사용했다.



위 그림은 C언어의 발전 과정이다. 초기에 미완성 프로젝트였던 CPL을 마틴 리차드가 BCPL(Basic CPL)로 발전시켰고, BCPL이 아직 문법적으로 완성도가 떨어지자 이를 켄 톰슨이 B언어로 개량했다. 그리고 이를 이어받아 대니스 리치가 C언어를 개발하게 된다. C언어 이름의 기원에 대해서는 여러가지 추측들이 많은데 단순히 B에서 파생된 언어라서 다음 글자인 C가 되었다는 소리도 있고 가장 먼저 CPL 프로젝트를 주관했던 크리스토퍼 스트레이치의 이름에서 C를 따왔다는 이야기도 있다. 


2. ANSI / ISO

C가 처음 개발된 직후에는 문법에 대한 명확한 규제가 없었다. 규제가 없다 보니 각기 다른 컴파일러와 플랫폼에서 서로 다른 코드가 동작하는 상황이 벌어졌고 이는 C언어의 호환성과 이식성을 매우 떨어뜨리게 되는 결과를 낳았다. 때문에 문법을 표준화하고 재정비할 필요성이 생기게 되어 1983년 ANSI(American National Standards Institute) 미국표준협회에서 C언어에 대한 표준 위원회를 만들었으며 표준이 완성된 89년의 연도를 따 C89 라고 명명했다. 그리고 다음 연도인 90년에는 국제 표준에 채택되어 ISO 국제표준협회에서 ISO/IEC 9899:1990 를 완성하였으며 마찬가지로 C90이라 부른다. 우리가 C언어를 처음 배울때 사용했던 컴파일러의 대부분이 모두 ANSI C 인 C89 이며 사실 모두 동일한 표준이기 때문에 ANSI C = C89 = C90 이라고 생각하면 된다. 최근에는 좀더 개량된 C99 를 표준으로 사용하는 컴파일러의 수가 늘고 있고 현재 C11까지 완성되긴 했지만 C11의 경우 아직까지는 사용되는 곳이 적다.

개인적으로 C언어를 공부할 때 표준을 같이 공부하는 것은 매우 중요하고 생각한다. 표준을 알고 프로그래밍을 하게 되면 주어진 환경의 컴파일러와 플랫폼에 최적화된 코드를 짤 수 있으며 다른 환경에 맞춰 코드를 수정하거나 이식하기도 어렵지 않다. 반면에 표준을 모르고 접근하게 되면 어디서 버그가 발생하는지 알기 어렵고 표준에 어긋나는 코드들을 일일이 수정하기도 매우 번거롭게 된다.

물론 지나치게 표준을 강조하거나 융통성 없게 최신 표준만 고집하라는 말은 아니다. 표준은 표준일 뿐 그 자체가 기존의 문법을 뒤흔드는 새로운 법칙이 되거나 하지는 않는다. 단지 올바른 표준을 C언어를 배울 때 같이 공부하게 된다면 주어진 환경에 맞춰 보다 간결하고 최적화된 방식으로 접근할 수 있을 것이며 다른 개발자들과의 협업에 있어서도 정해진 표준에 입각하여 효율적이고 생산적인 프로그래밍이 가능할 것이다. 


3. 현재의 C

그럼 다시 처음의 질문으로 되돌아가보자. 지금 시점에서 C를 공부해야하나? 당연히 공부하면 좋다. 하지만 아닐수도 있다고 생각한다. 이게 무슨 뚱딴지 같은 소리인가 하면 이 물음에 정답은 공부하는 본인에 달려있다는 이야기이다. 필자도 개인적으로 C와 C++을 익히지 않고는 개발자로서의 깊이 있는 학습이 불가능하다고 생각하는 주의였는데 사실 이러한 생각을 가지기에는 시대가 너무 다양화되는 방향으로 발전해버렸다. 더이상 C를 모르더라도 웹이나 앱을 개발할 때 거의 지장이 없고 분야에 따라서는 평생 LOW 레벨에서 프로그래밍할 일이 없을 수도 있다. 또한 하드웨어의 성능이 높아지면서 C에서 가능한 일들의 대부분은 다른 언어로도 구현이 가능해졌다. 요컨대 C의 쓰임새가 현대에 들어서 많이 줄었을 뿐만 아니라 C의 고질적인 단점인 안정성 문제를 해결하고 더욱 더 생산성 높은 언어로 대체가 가능해졌다는 것이다. 본인의 분야와 앞으로의 미래를 두고 봤을 때 굳이 C가 필요 없다면 공부하지 않아도 상관없다.

하지만 앞서 언급했던 모든 부분들을 고려해 보아도 여전히 C언어를 배우는 것은 도움이된다. 공부하지 않아도 상관없다는 말은 필요성에 대한 답일 뿐 절대 그 본질적인 의미까지 퇴색되진 않기 때문이다. C언어가 진입장벽이 높고 불편한 것은 사실이지만 반대로 이 때문에 배우는 입장에서 더 유연하게 프로그래밍하는 법을 배울 수 있다. 거기에다가 하드웨어를 직접적으로 다루기 때문에 컴퓨터 아키텍쳐에 대해 보다 깊숙히 파고들 수 있으며 특히 OS를 이해하는데 있어서 도움이 될 수 밖에 없다. 세세하게 들어가면 소프트웨어의 가장 기본 단위인 bit부터 시작해서 메모리 관리, 구조체 등 전반적으로 다른 언어들의 기초가 되었던 개념들을 모두 배우기 때문에 시야를 넓게 보기 좋으며 이러한 부분들로 인해 타 언어 학습에 대한 이해도가 빠르고 그만큼 숙련도가 높아질 수 있다. 배움에 있어서는 본인이 선택할 문제이지만 C를 배워서 후회될 부분이 전혀 없다는 것이다.

앞으로도 C는 성능이라는 측면에서 절대 무시할 수 없는 언어이기 때문에 지속적으로 많은 분야에 활용되게 될 것이다. 당장 현시점만 놓고 봐도 C는 모든 아키텍쳐와 운영체제에서 1순위로 지원하고 있으며 자바의 경우에도 가상머신인 JVM 자체가 C와 C++로 만들어져 있어 속도가 필요한 모든 코어 부분에서 C가 활용되고 있다. 어떤 의미에선 사실상 C언어가 가장 완벽한 멀티 플랫폼을 지원한다고 해도 과언이 아니다. 그러므로 오래된 언어라고 전망 자체가 어둡거나 그러진 않으며 모든 언어의 베이스가 되는 C를 배우는데 주저하지 말고 자부심을 가졌으면 하는 바람이다.


4. 추천 서적

마지막으로 C언어를 배우면서 필자가 괜찮다고 생각한 책 몇 권을 추천하는 것으로 본 포스팅을 마치도록 하겠다. 사실 안타깝지만 우리나라에는 표준을 준수하는 C언어 책을 찾아보기 매우 힘들다. 아니 거의 없다고 봐도 무방하다. 또한 대부분이 입문 수준에 맞춰져 있기 때문에 내용이 비슷하고 어떤 책을 보든 비슷한 느낌을 받을 수 밖에 없다. 그러므로 입문 서적을 고를 때는 서점에 가서 개인 취향에 맞게 읽기 쉬운 책을 구매하기를 바란다. 개인적으로는 윤성우의 열혈 시리즈가 설명이 자세하고 보기 편했으며 최호성의 독하게 시작하는 C 프로그래밍은 내용과 수준이 괜찮았던 것 같다. 두 책 모두 동영상 강의가 있기 때문에 처음에 접근하기도 수월하다. 


              


C언어에 대해 기본적인 지식을 갖게 되었다면 다음은 해외에서 가장 검증된 책들을 읽기 권한다. 원서이기는 하지만 IT 분야의 책들은 키워드만 알고 있어도 내용을 이해하기 어렵지 않기 때문에 그다지 겁먹을 필요가 없다.



먼저 왼쪽 책은 앞서 C언어의 역사를 소개하면서 언급했던 데니스 리치 이름이 나온다. C언어의 창시자가 책을 썼으니 그 수준이 어느정도인지는 따로 말하지 않겠다. 그리고 여기서 브라이언 커니핸이라는 이름을 잘 기억해두자. 브라이언 커니핸은 UNIX로 변경되기 전 UNICS 라는 이름을 가장 먼저 사용한 인물로 C언어 개발에 직접적으로 참여하지는 않았지만 UNIX 와 C의 발전에 큰 역할을 하였다. 그의 코드와 글은 명료함의 본보기라 불리는데 책을 보면 알겠지만 예제 코드가 정말 간결하고 필요없는 코드가 거의 없으며 정의와 표준에 입각하여 개념을 잘 설명해준다. 저자의 이름을 따서 KNR 이라고 불리며 너무 간결한 나머지 이해하기 어려울 수 있으므로 기본이 어느 정도 갖춰진 상태에서 보기를 권한다. 어투가 딱딱하기는 하지만 번역 상태가 그리 나쁘지 않은 국내 번역본도 있으므로 취향에 맞게 원서든 번역본이든 꼭 구매해서 읽어보도록 하자.

오른쪽 책은 전세계적으로 가장 검증된 C입문 책이다. K.N.King 이라는 분이 쓰신 책인데 C89와 C99의 표준을 서로 비교하면서 상세하게 다루고 있는 것이 특징이며 약간의 자료구조와 함께 Low-level 프로그래밍, 디자인 방식 등 전반적으로 C라는 언어 자체에 대해서 폭넓게 다루고 있다. 아직까지 우리나라에 번역본은 없지만 개념을 정말 상세하게 설명해주기 때문에 원서로 읽어도 큰 무리가 없을 것이다.

마지막으로는 C를 공부하면서 추가적으로 공부하기 좋은 책들을 소개하겠다. 


               


왼쪽의 책은 Richard Reese의 Understanding and Using C Pointers 라는 책으로 제목에서 알 수 있듯이 포인터에 관련된 부분만 추려서 만들어졌다. C언어를 배울 때 가장 어렵게 느껴지는 부분이긴 하지만 그만큼 핵심적인 역할을 하는 포인터에 대해서 이해하기 쉽게 잘 설명해준다. 또한 비단 이 책의 장점이 포인터만 알려주고 끝나는 것이 아니라 보안 이슈와 포인터 남용으로 인한 오버헤드, 댕글링 포인터, 메모리 해제 등 개발하면서 발생할 수 있는 다양한 문제들에 대해서 통찰력 깊은 시야를 제시해주는데 있다. 실무에서 쓰이는 다양한 기법들이 책에 녹아 있으므로 포인터에 대한 이해가 부족하거나 한 단계 깊게 공부하고 싶다면 위 책을 통해 공부해볼 것을 권한다. 번역 상태는 살짝 아쉬운 정도이다.

다음으로 오른쪽 책은 김유진의 임베디드 프로그래밍 C코드 최적화라는 책으로 임베디드 시스템에서 이룰 수 있는 최적화 방법을 제시하며 상세하게 설명해준다. 시간 날 때 가볍게 읽을 수 있는 책처럼 보이지만 사실 그 내용을 들여다보면 초보자가 이해하기에 만만치는 않으며 다른 C언어 책에서는 볼 수 없는 개념과 자료들이 풍부하다. 특히 어려울 수 있는 내용을 과장과 대리의 대화를 통해 쉽게 풀어내기 때문에 임베디드 분야나 코드 최적화 부분에 관심이 많은 사람들에게 도움이 될 것이다. 

1. 무선통신기술

 스마트폰이 등장하면서 현 음악 시장과 오디오 시장을 혁신적으로 바꾼 것은 반박의 여지가 없는 사실이다. 1993년에 MPEG-1의 오디오 규격에 맞게 개발된 압축 포맷인 MP3가 등장하게 되면서 더 이상 LP나 CD로 음악을 듣는 것은 구시대적 이야기가 되어 버렸고 여기에 스마트폰이 개발되면서 음악 시장을 송두리째 바꾸어 버렸다. 때문에 이러한 시대적 흐름에 따라 음반 가게는 찾아보기 힘들게 되었고 CD또한 잘 팔리지 않았으며, CD 플레이어나 턴테이블 같은 오디오 장비는 고리타분한 골동품으로 가치가 떨어지게 되었다. 대신에 그 자리를 스마트폰 같은 기기들이 차지하면서 음악 감상을 단순한 취미 생활이 아니라 사람들 생활 속의 일부로 대중화시키게 되었다.

 이처럼 음악이 대중화되고 생활화 되면서 사람들은 손실 없는 아날로그의 고음질을 추구하기 보다는 조금 음질이 떨어지더라도 음악을 언제 어디서나 간편하게 들을 수 있는 편리함을 추구하는 방향으로 수요가 변화하게 되었는데 이러한 흐름이 지속되면서 ‘무선통신’ 기술이 발전하게 되는 계기를 마련해주었다. 실제로 아래 통계를 살펴보면 무선통신기술을 활용한 오디오 시장이 기존의 스피커나 이어폰 시장보다 훨씬 커졌다는 사실을 알 수 있으며 또한 출하량과 사용 현황 그래프를 통해 예전에 LP나 CD에서 MP3로 트랜드가 변화한 것처럼 이제는 일반 오디오 장비에서 무선 기술을 활용한 시스템으로 사람들의 수요가 바뀌고 있음을 짐작할 수 있다.


Fig 1. 오디오 기기 시장 변화 추이


 그렇다면 무선통신기술이란 대체 무엇일까? 무선통신이란 이름 그대로 별다른 선 필요 없이 보다 음악을 편리하게 들을 수 있도록 해주는 것을 말한다. 단순히 스마트폰과 무선으로 연결해줄 수 있는 오디오 장비만으로도 간단하게 음악을 즐길 수 있게 되는 것이다. 이러한 기술은 비단 휴대성만 갖춘 것이 아니라 활용 가치 또한 매우 높다. 예를 들어 공연장에서 마이크나 악기에 무선통신기술을 적용하여 케이블 없이 공연을 할 수 있다는 것이나 여러 대의 스피커를 하나의 네트워크로 연결하여 같은 음악을 듣거나 각기 다른 음악을 듣는 등 음악이 필요한 모든 분야에 확장성 있게 적용 가능하다. 따라서 이러한 점들을 볼 때 무선통신분야는 앞으로 발전가능성이 무궁무진하며 하나의 트랜드로서 자리매김할 수 있을 것이라 기대해볼 수 있다.


2. 무선통신시스템 구조

 무선통신기술을 활용한 시스템은 통신 방법에 따라 차이가 있기는 하지만 기본적으로 다음과 같은 구성 요소를 공유한다. 먼저 오디오 소스란 오디오 신호를 포함하는 장치, 즉 음원을 저장하고 전송할 수 있는 스마트폰 같은 기기를 의미하며 오디오 송신부를 통해 신호를 무선으로 전송하게 된다. 다음으로 싱크 라고도 불리는 오디오 수신부가 전송된 신호를 수신하게 되고 이를 재생할 수 있는 재생장치로 전달함으로서 무선 오디오 전송이 완료된다.


Fig 2. 무선통신시스템 구조


 위 같은 구조의 가장 적절한 예가 바로 FM 라디오이며 비록 오디오 음질이 좋지는 않지만 전송 시스템이 비교적 간단하기 때문에 작은 송신기만으로도 신호를 전송할 수 있으며 전파가 도달하는 범위 이내라면 언제 어디서든지 수신기를 통해 신호를 들을 수 있다는 장점을 가진다.

Fig 3. FM라디오 구조


3. 무선통신기술 종류

▪ 블루투스 통신

 블루투스(Bluetooth) 통신은 본래 오디오 신호 전송이 아닌 근거리 데이터 통신을 위해 개발된 기술이다. 때문에 초기에는 이러한 물리적 기반을 바탕으로 무선 키보드나 마우스, 혹은 디바이스간 데이터 전송을 위해 사용되었으며 오디오 신호 전송과 관련해서는 HFP라는 휴대전화 통신간에 음성을 송수신할 수 있는 프로파일을 지원하였다. 하지만 이러한 부분은 단순한 음성 전달에 불과했으며 주파수 대역폭이 불과 8Khz로 제한되기 때문에 고음질의 오디오 전송을 위한 용도는 아니었다. 따라서 오디오에 대응할 수 있도록 만든 블루투스용 프로파일이 별도로 만들어지게 되었는데 이것이 바로 A2DP(Advanced Audio Distribution Profile) 이다.

 A2DP란 블루투스 통신의 대역폭 내에서 오디오 신호를 전송할 수 있도록 신호를 SBC(Sub Band Coding) 코덱을 통해 압축하여 보내는 프로파일을 의미하며 이렇게 보낸 신호는 오디오 수신부에서 다시 SBC 코덱을 통해 디코딩하여 소리를 재생시킬 수 있다. 비록 신호를 압축하는 과정에서 음질의 저하가 있지만 오디오 신호의 무선 전송을 가능하게 했기 때문에 스마트폰과 블루투스 스피커 및 헤드셋에 표준기능으로 적용되었다.


Fig 4. Source-Sink 간 블루투스 통신 과정


 그런데 사실 SBC 코덱은 다른 코덱에 비해 압축 효율이 뛰어나지 않으며 음질이 초창기 MP3 수준에 불과하여 비효율적인 요소가 많다. 또한 대역폭 자체가 좁아서 고역대의 소리를 제대로 전송하기 힘들다는 단점을 지닌다. 때문에 최근에는 보다 효율적인 압축 알고리즘을 활용한 애플의 AAC(Advanced Audio Coding)이나 소니의 LDAC가 대안으로 활용되고 있으며 이 가운데에서 오디오 대역폭을 늘리고 지연시간을 최소화한 CSR의 apt-X 코덱이 가장 대중적인 주목을 받고 있다.


Fig 5. apt-X Codec


 우리의 귀는 어느 한 주파수에서 큰 소리가 울릴 때, 이와 동시에 발생하는 주변 주파수의 약한 소리가 들리지 않는 특성을 가진다. 이를 마스킹 효과(Masking effect)라고 하는데 apt-X 코덱은 이와 같은 특성을 응용하여 마스킹되는 주파수의 정보를 삭제하여 데이터량을 줄일 수 있는 알고리즘을 토대로 구현되었다. 이는 결과적으로 보다 효율적인 데이터 전송을 가능하게 해주었을 뿐만 아니라 CD수준의 고음질 오디오 신호를 무선으로 전송할 수 있게 하였다.

 그리고 코덱에 따른 차이는 비단 음질뿐만이 아니라 지연시간에서도 나타난다. SBC 코덱은 패킷이 전송될 때 정해진 양의 패킷이 전송되기 전까지 디코딩을 진행하지 않는 방식인 반면에, apt-X코덱의 경우 ‘apt-X 워드’ 라는 작은 데이터로 분할 전송하고 이를 수신 단계에서 순차적으로 받아서 처리하는 방식으로 동작한다. 이러한 차이는 각 코덱의 지연시간을 보면 명확해지는데 apt-X 코덱의 지연시간이 40ms인 것에 비해 SBC 코덱은 250ms로 확연하게 차이가 난다는 사실을 알 수 있다.

 물론 아직까지 통상적인 블루투스 오디오 장비들은 대부분이 SBC 방식이며 apt-X 방식의 경우 같은 코덱의 장비끼리만 적용이 가능하다는 단점이 있기는 하지만 사람들의 음악에 대한 편리함과 음질에 대한 수요가 점점 증가하는 추세를 감안해 봤을 때 앞으로 기술이 점점 더 발전하여 압축 코덱의 표준으로 인정받을 수 있을 것이라 기대해볼 수 있다.


▪ Wi-Fi 통신

 와이파이 통신은 알다시피 IEEE 802.11을 기반으로 서로 다른 장치들 간의 데이터 전송 규약이다. 즉 네트워크 개념을 토대로 이더넷 방식의 랜 연결을 통해 데이터를 주고받는 통신이다. 음향분야에서는 이 데이터가 오디오와 비디오를 전송하는 기술을 표준으로 만들어진 DLNA (Digital Living Network Alliance) 방식을 기반으로 한다. DLNA란 쉽게 말해 와이파이 공유기를 중심으로 각 기기들을 호환하여 연결시키는 가정용 네트워크를 의미하며 전자 기기들 간에 AP(Wireless Access Point)를 경유해 오디오와 비디오를 재생할 수 있게 해준다. 이와 같은 기술은 TCP/IP 기반의 네트워크상에서 UPnP(Universal Plug and Play)라는 자동으로 무선 장비를 인식하고 추가해주는 프로토콜을 통해 기기간의 접속이 이루어져 데이트를 주고받게 된다.


Fig 6. DLNA/UPnP Media Server


 위와 같은 특징 덕분에 DLNA 방식은 데이터 재생에 있어서 대역폭의 제한이 거의 없다. 앞에서 설명한 블루투스 통신의 경우 정해진 대역폭 내에서 오디오 신호를 전송해야 했기 때문에 SBC나 apt-X 코덱 같이 압축 알고리즘이 중요했던 반면 와이파이 통신은 오디오의 변형 없이 원본 그대로 전송이 가능하다. 즉 인코딩이나 디코딩이 필요 없이 원본 파일 그대로 무선으로 보낼 수 있다는 점에서 음질 부분이 비교할 수 없을 정도로 뛰어나다는 장점을 가진다.


 

Bluetooth

Wi-Fi 

주파수 

2.4GHz

2.4 / 5GHz 

요구조건 

1:1 Paring

같은 네트워크 상에서

연결된 Device 

전송음질

16bit 44.1KHz 

24bit 192KHz 

통신범위 

~10m 

~100m 

대역폭 

512Kbps 

수십 Mbps 

소비전력 

매우 낮음 

중간 

Fig 7. 블루투스-와이파이 통신 비교


 정확한 수치를 통해 블루투스 통신과 와이파이 통신을 비교해보면 차이점을 확연히 알 수 있다. 블루투스 통신의 경우 아무리 좋은 코덱과 압축 알고리즘을 사용한다고 해도 기본적으로 16bit 44.1KHz의 CD 수준의 음질에서 벗어날 수 없으며 대역폭 또한 A2DP 방식에서 전송폭의 상한선이 512Kbps로 제한된다. 반면에 와이파이 통신의 경우 전송 대역폭이 수십 Mbps 수준으로 매우 넓고 이로 인해 음질 또한 24bit 192KHz의 고음질 및 고용량 음원 전송이 가능하다.

 물론 음질이나 대역폭 같은 특성들을 가지고 어떤 통신이 좋은지 판단할 수는 없다. 중요한 것은 제한된 기술이든 기능이 좋은 기술이든 그 쓰임새에 맞게 쓰여야 된다는 것이다. 하이파이를 대체할 오디오 시스템을 찾는다면 블루투스 스피커는 반드시 피해야할 제품일 것이다. 반면에 스마트폰과 연계되는 간편하게 들고 다닐 수 있는 스피커를 찾는다면 무선 랜 연결이 필수적인 와이파이 스피커는 쓸모가 없다. 이러한 점들을 볼 때 단순히 기술적인 부분뿐만 아니라 사용 편의성과 사용 용도 같은 요소들을 먼저 파악하는 것이 선행되어야 할 것이며 용도와 목적에 맞게 쓰는 것이 효과적으로 자기에게 맞는 기술을 사용하는 법이다.


4. 오디오 시장의 향후 전망

 서두에서도 언급했지만 오디오 시장이 급격히 축소된 이유에는 몇 가지 이유가 있다. 먼저 스마트폰의 등장으로 사람들이 보다 편리하게 음악을 듣고 싶어 하는 추세로 바뀌었고 값비싼 오디오 시스템을 구입하기 보다는 스마트폰에 연결하여 간편하게 들을 수 있는 오디오 장비를 구입하게 되었다. 또한 현대에 들어오면서 1인 가구, 핵가족화 되면서 가족 구성원 수가 줄어들어 인원이 적다보니 자연스럽게 주거공간이 작아지게 되었고 이 때문에 덩치 큰 오디오 시스템을 필요로 하는 이가 줄어들었다.

 오디오 기기 관련 매출을 살펴보면 스마트폰과 더불어 헤드폰·이어폰의 판매량이 큰 폭으로 늘었고 소형 오디오 기기들과 사운드바의 판매량이 크게 늘었다. 입문용 소형 오디오 시스템과 무선통신 기술이 접목된 오디오 기기들의 판매는 늘었지만, 유선으로 동작하며 설치가 복잡하고 덩치 큰 제품의 수요는 상대적으로 감소한 것이다.


Fig 8. 스피커 시장 규모 및 향후 전망


 이러한 점들을 종합해볼 때 앞으로 오디오 시장은 ‘무선 오디오 시스템’시대가 본격적으로 도래 할 것으로 전망된다. 과거에는 스피커 자체 기술이 중요했기 때문에 오디오 전문 업체가 시장을 주도했지만, 디지털음원의 등장과 IT기술을 활용한 사용 편의성 및 디자인 등에 강점을 지니고 있는 IT기업으로 주도권이 넘어가고 있는 것이다. 무선통신기술 또한 과거에 비해 발전을 거듭해 오면서 더 이상 유무선의 차이를 느끼지 못할 정도 음질 부분에서 많은 성과를 거두고 있다. 음향 오디오 시장에서 무선통신분야가 얼마나 빠른 속도로 성장할 수 있을 것인지 그 가능성에 대해 앞으로 주목해 볼 필요가 있을 것이다.