시작페이지로 시작페이지로
즐겨찾기추가 즐겨찾기추가
로그인 회원가입 | 아이디찾기 | 비밀번호찾기 | 장바구니 모바일모드
홈으로 와싸다닷컴 HIFI게시판 상세보기

트위터로 보내기 미투데이로 보내기 요즘으로 보내기 싸이월드 공감
jitter test 음원 생성기.
HIFI게시판 > 상세보기 | 2011-07-04 02:55:12
추천수 0
조회수   1,203

제목

jitter test 음원 생성기.

글쓴이

장명호 [가입일자 : 2004-10-06]
내용

C00000 C00000 400000 400000 (x24) BFFFFF BFFFFF 3FFFFF 3FFFFF (x24)를 기반으로 한 지터 테스트용 음원 생성기입니다.


사실 이 코드는 제 발상을 구현할 수 있을지 알아보기 위한 테스트 코드입니다.

구상은 여러가지로 해놓았는데... 과연 작업을 할 시간을 낼 수 있을지 모르겠네요.







다양한 샘플링레이트에 대응할 수 있도록 1/4 square wave를 만드는 방법을 찾고 있습니다.





=== 다음 라인부터 소스코드입니다 ===




#!/usr/bin/python

# -*- coding: utf-8 -*-



import wave



nchannels = 2

framerate = 48000 # Hz

depth = 24 # bit

sampwidth = depth / 8



duration = 10 # seconds



# 8 = len(jsignal)

iteration = int(round((duration * framerate) / (8 * 24)))



jsignal = [[0xc0, 0xc0, 0x40, 0x40], [0xc0 - 1, 0xc0 - 1, 0x40 - 1, 0x40 - 1]]

least_byte = [0x00, 0xff]



print 'make signal'



signal = ''

#for i in range(iteration): # iteration

for j in range(2): # sup index of jsignal

for k in range(24): # x 24

for l in range(4): # sub index of jsignal

for m in range(nchannels):

v = jsignal[j][l] << depth - 8

for n in range(sampwidth-1): # least bytes

v |= least_byte[j] << (((n+1) * 8) - 8)



signal += wave.struct.pack('q', v)[:sampwidth]



signal *= iteration



print 'write file'

file = wave.open('jtest.wav', 'wb')



# set params

file.setnchannels(nchannels);

file.setsampwidth(sampwidth);

file.setframerate(framerate);



# write

file.writeframes(signal)

file.close()



print 'file written'

추천스크랩소스보기 목록
조영호 2011-07-04 11:45:08
답글

소스코드가 만들어 내는 신호는 어떤 신호 인가요?<br />
정현파인가요? 아니면, 정현파에 지터를 믹싱한 것인가요?<br />
설명이 좀 있어야 이해가 되겠습니다.

장명호 2011-07-04 11:53:58
답글

단순히 C00000 C00000 400000 400000 (x24) BFFFFF BFFFFF 3FFFFF 3FFFFF (x24) 패턴을 반복합니다. ^^;<br />
정말 간단히 만들어본겁니다.<br />
<br />
다음은 FFT를 만들어볼까 합니다. 자료는 다 있는데... 시간이 문제네요.

장명호 2011-07-04 11:57:07
답글

이 코드의 문제는 C0, 40, BF, 3F 만 반복하기 때문에 샘플링레이트가 바뀌면 샘플링레이트의 1/4에 해당하는 주파수 신호를 만들어 내지 못한다는겁니다.<br />
192khz 에서도 적용되는 알고리즘이 있으면 하는데...

박철휘 2011-07-04 12:10:16
답글

4개의 코드를 단순히 반복하는 것이므로 for loop의 정수로 박힌 것들을 변수로 치환하면 되지 않나요.

조영호 2011-07-04 12:11:37
답글

그러면 삼각파가 만들어집니까?

장명호 2011-07-04 12:39:36
답글

박철휘님 말씀이 맞습니다. 그게 더 간단한 방법이지요.<br />
모든 비트레이트와 샘플링레이트에 대응하도록 만들고 싶었습니다.<br />
LSB를 토글하는 건 -1 하는게 맞는데. 1/4 파를 만드는 방법을 고민 중입니다. 단순하게 사인파를 만들어 샘플링하면 비트가 예쁘게 나올지 고민되어, 다른 알고리즘이 있는지 찾고 있습니다.

장명호 2011-07-04 12:40:50
답글

그런데 dunn의 논문에 따르면 1/4 파를 만들어야 하는데... 192khz의 1/4이면 초음파가 되어버리네요.<br />
여기에 대해 조언을 주실 분이 계셨으면 좋겠습니다.

김영길 2011-07-04 20:45:22
답글

192khz의 Carrier는 fs/16=12kHz를, 1 bit씩 크기를 바꾸어 주는 것을 fs/192로 해주면 될 것 같습니다. <br />
24bit의 경우는 C00 000를 8개, 400 000를 8개, 이 것을 6번 반복, BFF FFF 8개, 3FF FFF 8개, 이것을 6번 반복이 될 것 같습니다. Carrier가 16sample마다 한 주기, 신호는 32*6=192 sample마다 한주기. <br />
<br />
그 신호는

장명호 2011-07-04 23:20:36
답글

아하! 많은 도움이 될 것 같네요. 고맙습니다.

  • 광고문의 결제관련문의