-
MFCC(Mel-Frequency Cepstral Coefficient) 이해하기Machine Learning/Audio Feature 2019. 7. 12. 03:57
이 글은 음성/음악 등 오디오 신호 처리 분야에서 널리 쓰이는 특징값(Feature) 중 하나인 MFCC(Mel-Frequency Cepstral Coefficient)에 대해 정리한 글입니다. 알고리즘 구현보다는 MFCC의 전반적인 이해와 실제 활용에 초점을 맞춰 정리했습니다 :) MFCC란? MFCC는 오디오 신호에서 추출할 수 있는 feature로, 소리의 고유한 특징을 나타내는 수치입니다. 주로 음성 인식, 화자 인식, 음성 합성, 음악 장르 분류 등 오디오 도메인의 문제를 해결하는 데 사용됩니다. 먼저 MFCC를 쉽게 이해하기 위해 MFCC의 실제 사용 예시를 들어보겠습니다. 1) 화자 검증(Speaker Verification) 화자 검증이란 화자 인식(Speaker Recognition)의 ..
-
RNN(Recurrent Neural Network) 이해하기Machine Learning/Neural Network 2019. 7. 9. 01:48
문장에서 어떤 단어를 번역할 때 우리는 그 단어의 이전 문맥을 고려합니다. 문맥을 고려하지 않으면 여러 뜻을 가진 단어의 경우 엉뚱하게 번역할 가능성이 큽니다. 이처럼 연속된 데이터의 특징을 이해해야 해결할 수 있는 문제들이 있습니다. 연속된 데이터, 즉 순차 데이터(Sequential data)를 다룰 수 있게 설계된 신경망이 순환 신경망(RNN : Recurrent Neural Network)입니다. 주가 예측, AI 작곡/작사, 기계 번역, 음성 인식 등 순차 데이터를 다루는 문제가 RNN의 주요 과제입니다. RNN의 구조 RNN은 과거의 정보를 현재에 반영해 학습하도록 설계되었습니다. 이 컨셉을 통해 시간 순서로 나열된 데이터를 학습합니다. 이전 상태로부터 전달된 값을 히든 스테이트(hidden ..
-
[C++] 얕은 복사(shallow copy) vs 깊은 복사(deep copy)Language/C, C++ 2019. 7. 4. 22:57
복사 생성 객체를 생성할 때, 기존에 있던 객체를 복사해서 생성하는 방법을 복사 생성이라고 합니다. class Person { int age; public: Person(int age) { this->age = age; } }; int main() { Person p1(20); // 원본 객체. age = 20으로 생성 Person p2(p1); // 복사된 객체. 원본 객체 p1을 복사해 생성 } 기본적으로 복사된 객체는 원본 객체의 멤버 값과 동일한 멤버 값을 가집니다. 위의 코드에서, p2는 p1을 복사했으므로 멤버 변수 age의 값이 20으로 복사됩니다. 디폴트 복사 생성자 그런데, Person 클래스의 생성자는 Person(int age) 뿐인데 왜 Person p2(p1); 라인에서 컴파일 오..
-
[자료구조] 스택(Stack)과 큐(Queue) 이해하기Computer Science/자료구조 2019. 6. 13. 21:59
스택(Stack)과 큐(Queue)는 서로 닮았지만 다른 자료구조입니다. 비교를 통해 두 자료구조를 알아보겠습니다. 스택의 개념 '쌓다' 라는 의미를 가지고 있는 스택(Stack)은 그 의미와 같이 데이터를 차곡차곡 쌓아올린 형태로 자료를 구성합니다. 책상 위에 쌓아둔 책이나 주방에 쌓아둔 접시를 예로 들 수 있는데요. 스택은 후입선출(Last-in First-out)의 자료구조입니다. 앞자만 따서 LIFO 구조라고 하며, 마지막에 들어온 것이 먼저 나간다라는 뜻입니다. 입구와 출구가 같은 자료구조라고 할 수 있겠습니다. 입구와 출구가 하나밖에 없으니 데이터의 삽입과 삭제가 한 방향에서만 이루어집니다. 스택에서는 흔히 데이터의 삽입 연산을 push, 삭제 연산을 pop 이라 칭합니다. 삽입과 삭제가 일어..
-
[C/C++] 함수의 호출 방식 - Call by what?Language/C, C++ 2019. 6. 7. 02:17
프로그램에서 함수를 호출할 때 매개변수(Parameter)의 종류에 따라 호출 방식을 분류할 수 있습니다. C언어와 C++에서 사용하는 함수 호출 방식은 다음과 같습니다. 이 중 Call by Reference(참조에 의한 호출)는 C언어에는 존재하지 않습니다. Call by Reference는 C++에서 참조(Reference) 개념이 도입된 이후부터 가능하게 되었습니다. 코드를 통해 각 호출 방식의 차이점을 알아보겠습니다. Call by Value Call by Value는 값에 의한 호출로서, 함수가 매개 변수를 전달받을 때 값을 전달받는 개념입니다. void plus(int a) { a++; // 새로운 변수 a에 ++연산 } int main() { int a = 10; plus(a); // 함수..
-
[자료구조] 리스트(List) 이해하기Computer Science/자료구조 2019. 4. 14. 00:26
리스트는 가장 빈번하게 사용되는 자료구조 중 하나입니다. 다량의 데이터를 다루는데 가장 단순한 방법이기 때문인데요. 기본적인 자료구조이다 보니 프로그래밍 언어들에 내장되어 있는 경우가 많습니다. 자주 사용하는 만큼 이론적인 부분도 중요하기 때문에 리스트(List)에 대해 정리해 보았습니다. 자료구조의 두 가지 구현 방법 자료구조는 구현 방법에 따라 크게 두 갈래로 분류할 수 있습니다. 바로 순차(Sequential) 자료구조와 연결(Linked) 자료구조입니다. 순차 자료구조는 구현할 자료들을 논리적인 순서대로 메모리에 연속하여 저장하는 자료구조입니다. 데이터가 컴퓨터 메모리에 저장될 때, 저장 시작 위치부터 빈자리 없이 순서대로 저장된다는 뜻인데요. 자료의 논리적인 순서와 물리적인 순서가 일치하는 구현..
-
[Android] 애니메이션으로 앱에 생동감 불어넣기 - Animated Vector DrawableOther/Android 2019. 4. 6. 16:33
평소에 스마트폰을 사용하다 보면 뭔가 신선한 느낌(?)의 앱을 만날 때가 종종 있습니다. 바로 앱의 UI가 깔끔하고 군더더기가 없으며, 부드러운 UI 애니메이션 효과를 보여주는 경우인데요. 개인적으로는 화면을 클릭했을 때 움직임이 적은 앱보다 어느 정도 생동감이 느껴지는 앱이 사용자에게 더 좋은 사용 경험을 제공한다고 믿습니다. 이런 이유로 모바일 애플리케이션에서 애니메이션 효과는 매우 중요하다고 생각합니다. 그래서 본 포스팅 주제로 앱에 생동감을 불어넣는 방법에 대해 적어보겠습니다. AnimatedVectorDrawable안드로이드는 5.0(API 21)부터 AnimatedVectorDrawable이라는 클래스를 제공합니다. 이 클래스는 기존에 안드로이드가 제공하던 AnimationDrawable 클..