FFTによるボコーダーを作ってみた
Scilabでボコーダーを作ってみました。自分の声で三角波を変調しています。
1024pt FFT, 2Hz 三角波、バイアスつき3Hz正弦波で変調
これで三角波の代わりにシンセサイザーの出力を変調すればいいのかな?
function yn=vocoder(xn, hn, blocksize) index = 1; zeropad = [1:blocksize] - [1:blocksize]; w = window( 'hn', blocksize ) eoblock = index+blocksize-1 eodoubleblock = index+blocksize*2-1 yn = xn - xn; // make yn as same figure with xn, but zero padding while ( eodoubleblock <= min( size(hn,2), size( xn,2 ) ) ) do block = [xn( index:eoblock ) .* w zeropad]; // get block h = [hn(index:eoblock) .* w zeropad]; spectrum = fft( block ) .* fft(h); // convolution block = ifft(spectrum); yn( index:eodoubleblock ) = yn( index:eodoubleblock ) + block; index = index + blocksize/2; // slide block window half eoblock = eoblock + blocksize/2; eodoubleblock = eodoubleblock + blocksize/2; end endfunction