[C언어]오디오 신호의 주파수를 분석하여 계이름을 찾는 시스템 설계
- 최초 등록일
- 2009.04.20
- 최종 저작일
- 2009.04
- 11페이지/ 한컴오피스
- 가격 2,500원
소개글
c언어를 사용하여
오디오 신호(raw포맷)를
DFT하여 주파수축으로 plot한 결과와
그에 대한 설명입니다.
c코드 첨부
목차
목표
문제
<pop1.raw>
<C code>
<실행결과>
본문내용
목표 :
오디오 신호의 주파수를 분석하여 각 Note를 추출하는 시스템 설계
문제 :
▪ Goldwave를 이용하여 Audio Sample "pop1.raw"와 “pop2.raw"의 소리와 파형을 확인한다.
* 신호 Format : 16kHz Sampling, 16-bit mono, signed integer
▪ “pop1.raw"의 총 8개의 Note와 ”pop2.raw"의 첫 3 Note에 대하여 주파수를 분석하여 각 Note의 이름을 찾는다.
<pop1.raw>
short형으로 input file인 pop1.raw를 입력받아 input[N] 배열에 저장하고 이를 DFT한다. 음과 음 사이를 skip하기 위해 일정 기준을 정할 필요가 있었다. 기준은 1000으로 하였다. 따라서 input data에서 읽어 들인 energy가 1000×1000 즉, 1000000이하일 경우 skip한다. 따라서 각각의 음의 스펙트럼은 magnitude가 비교적 작은 신호는 skip되었기 때문에 거의 쉬는 시간 없이 바로바로 나오게 되었다. 또한, exponential 연산은 불가능하기 때문에 오일러의 법칙을 이용하여 실수항과 허수항의 magnitude를 각각 구한 후, 이를 제곱하여 더한 다음 제곱근을 취함으로써 평균값을 구한다. 이 과정에서 1500으로 define되었던 배열이 750으로 줄어든다. 그 이유는 N개의 input이 있을 경우 DFT를 하면 인 부분을 기점으로 좌우 대칭인 스펙트럼이 나타나게 되는데 여기서 앞쪽 부분만 사용해도 상관없기 때문이다. 또한 16K sampling frequency를 가진 input file이 주어졌기 때문에, N은 대략 500이상일 경우 큰 문제는 나타나지 않으나 조금 더 정확한 해상도를 위해 N은 1500으로 설정하였다. window는 가장 간단한 sine윈도우를 사용했고, 돌발적인 delta에 가까운 신호를 smoothing하여 고주파성분을 제거한다.
참고 자료
없음