Perfume 음성을 고위 합성/HDL 코드 생성으로 Zynq 구현! 그 2

전회 Vocoder의 필터를 생성하는 곳까지 해, 잠시 방치하고 있었습니다만, 과연 엉덩이 끊어진 잠자리로 끝나는 것도 불갑이 없기 때문에 무거운 허리를 올려 갱신.

Envelope Filter



Envelope란 포락선을 말한다. 소리는 조밀파이므로, AD 변환하여 전압값이 되면 +와 -의 값을 반복하는 신호가 되고 있지만, Envelope는 원래의 신호를 감싸는 것 같은, 기본적으로 양의 값의 신호. 이것을 악기음의 진폭치로서 사용하는 것으로, 음정/피치는 악기음이지만, 톤은 성음이 된다. 이전 페이지에서 Octave Filter를 만든 것은, 이 Envelope를 대역별로 나누어 버리기 위해서.

대역마다(여기서는 9대역)에 병렬로 걸치기 위해, 1개의 Envelope Filter의 회로 규모는 9배가 되어 결과에 되돌아 온다. 회로 규모는 너무 커지지 않도록 주의하여 설계한다.

몇 가지 시도해 보았습니다.
IIR Filter를 사용한 것:성능적으로는 문제 없지만, IIR 필터는 고정 소수점화가 번거롭고, 발진의 가능성 있고 여러가지 번거로움.


FIR Decimation과 FIR Filter의 조합: FIR은 IIR에 비해 차수가 높아지기 때문에(회로 규모가 걱정···) 일단 계수 없는 FIR Decimation에서 고역을 떨어뜨려 두고, 그 후 20차 FIR Filter를 사용했다. 이렇게 함으로써 FIR Filter의 Tap수(≒FPGA 회로 리소스)를 상당히 줄였다. 안정되어 있어 회로 자원도 적게 끝나므로 이것에 결정.



시뮬레이션 결과






그림 설명:
상단: FIR Filter 하단: IIR Filter 파란색: 음성 신호, 노랑: Envelope 신호

입력 된 음성 신호에 대해 Envelope가 취해지고 있음을 알 수 있습니다.

파형을 볼 때 제대로 동작하고 있지만, 이펙터의 경우 이 후, 관능 평가하고 파라미터의 세세한 튜닝은 필요. Envelope Filter의 필터 계수 조정은 나중에 다시 수행됩니다.

그 3 은 이 Envelope Filter 와 이전에 설계한 Octave Filter 를 조합해 Vocoder 전체를 작성합니다.

좋은 웹페이지 즐겨찾기