2012-02-18 6 views
2

256 개의 요소를 사용하여 VHDL 용 사인 LUT를 만들었습니다.사인 LUT VHDL 800HZ 이하 시뮬레이션

음 MIDI 입력을 사용하므로 값 범위는 8.17Hz (노트 번호 0) ~ 12543.85z (노트 번호 127)입니다.

사운드를 재생하기 위해 내 48kHz 코덱으로 보내야하는 값의 수를 계산하는 또 다른 LUT가 있습니다 (8.17Hz 주파수는 48000/8.17 = 5870 값이 필요합니다).

인덱스 테이블 (예 : 100*256/5870 = 4 (정수 반올림))에서 값을 호출하는 데 사용되는 256/num_Values 인 인덱스 계수가 포함 된 또 다른 LUT가 있습니다.

나는이 값을 다른 VHDL 파일로 보낸다.이 VHDL 파일은 어떤 값을 다시 보내야 하는지를 계산하는 데 사용된다. (예 : index = index_factor*step_counter)

이 인덱스를 얻으면이를 100으로 나누고 sineLUT[index]을 호출하여 원하는 빈도로 사인파를 생성해야하는 값을 얻습니다.

문제는 마지막 51 개의 노트 만 나와 함께 작동하는 것입니다. 이유는 모르겠습니다. 그 빈도 (< 650 hz) 이하의 일정한 음표에 붙어있는 것처럼 보이며 음을 낮추려고 할 때마다 음량이 감소합니다.

내 코드의 일부가 필요하면 알려주십시오.

답변

3

추측에 따르면, 귀하의 step_counter가 충분한주기를 거치지 않았다고 생각합니다. 따라서 사인 어택에 대한 귀하의 색인은 더 낮은 주파수에 대해 완전한 360도를 통과하지 못합니다.

더 많은 도움이 필요하면 코드를 게시해야 할 것입니다.

제쳐두고, 왜 기존 DDS와 같은 것을 사용하지 않는 것입니까? 아나 로그 디바이스는 기초에 좋은 글을 남겼다 : DDS Tutorial

+0

아, 그렇다고 생각하지 않았습니다. 저주파수에서 왜 더 조용 해지는 이유는 샘플링 된 사인파에서 작은 값을 읽는 것입니다. i2c 및 오디오 코덱 문제를 동기화하기 위해 매 20 초마다 코드를 재설정하는 것을 잊어 버렸습니다. 감사합니다. – Eric