Scilab

FFTによるボコーダーを作ってみた

Scilabでボコーダーを作ってみました。自分の声で三角波を変調しています。 4096pt FFT, 20Hz 三角波 1024pt FFT, 2Hz 三角波、バイアスつき3Hz正弦波で変調 これで三角波の代わりにシンセサイザーの出力を変調すればいいのかな? function yn=vocoder(xn, h…

週末やったFFTによるフィルタの実験プログラム

とりあえず、プログラムだけ。 function yn=fftfilter(xn, blocksize) index = 1; zeropad = [1:blocksize] - [1:blocksize]; w = window( 'hn', blocksize ) [h, wfm, wfr] = wfir( 'lp', blocksize, [0.1 0.2], 'hn', [0 0]); hsp…

ポーン

で、作ったsuilibで早速遊んでみます。 exec "suilib.sci"; index=[0:6*sec]; // create 6 sec length index array. playsnd( sin(440*Hz*index) .* exp(-2*[index]/sec) ); playsndの引数の後半がエンベロープを作りだしています。指数関数的に減衰するので…

ライブラリ

書き溜めたプログラムが増えてきて、いちいちBlogに書いてられなくなったので、キーワードに保存することにしました。 命名 : suilib 酔漢が作ったライブラリ。なんというべた。

波形合成まとめ

今まで作った波形合成プログラムをファンクションにしました。 fs=22050; // default sampling frequency of Scilab[Hz] sec=fs; // unit of time Hz=2*%pi/fs; // unit of frequency // generate harmonics of tone. // fre : base harmonic frequency by s…

鋸歯状波

鋸歯状波(のこぎり波)もceil()関数を使って作り出すことができます。単純な右上がりの直線のceil()を求め、元の直線から引けばいいのです。 fs=22050; // default sampling frequency of Scilab[Hz] sec=fs; // unit of time Hz=2*%pi/fs; // unit of freq…

矩形波を作る

直接波形としての矩形波を作る方法は、いろいろありそうです。ここではceil()関数を使う方法を紹介します。 ceil()関数はscilabにはじめから用意されている関数です。その機能は 与えられた引数を超えない、最大の整数を返す というものです。たとえばceil(0…

高調波も生成する(2)

昨日のエントリでは高調波を作り出すために正弦波を直接加算していました。正しいやり方なのですが、5つくらいの正弦波の足し算になってくると手に負えなくなります。少なくとも可読性は最悪。そこで、関数を作ってみます。 gen_harmonics()関数は、基本波の…

高調波も生成する

前回正弦波を生成するプログラムを実験してみました。次に高調波成分まで生成するプログラムの実験をして見ましょう。 fs=22050; // default sampling frequency of Scilab[Hz] sec=fs; // unit of time Hz=2*%pi/fs; // unit of frequency index=[1:3*sec];…

1kHzの正弦波を再生する

早速ですがやってみました。夜はいろいろと自由が利かないので昼休みに実験です。 fs=22050; // default sampling frequency of Scilab[Hz] sec=fs; // unit of time Hz=2*%pi/fs; // unit of frequency index=[1:3*sec]; // generate base index for 3 seco…

やったら面白いかも

「やりたいことが多いので、やりたいアイデアが浮かんだら公表します。誰かがやってくれると思うから」というのは、Chuckさんの言葉です。多分*1。 いい言葉です。ということで、今日帰りの電車でひらめいたことをメモ。 Scilab使ってオーディオ関係の小さい…

ファイル

ワークスペース保存 save("ファイル名") ファイルは\Documents and Settings\ユーザー名\に保存される。 ワークスペース読み込み laod("ファイル名") 行列保存 write("ファイル名", a ) 行列 a が保存される。 行列読み出し a = read("ファイル名", row, col…

ベクトル

昨日に続いてScilabの基礎です。APLっぽくて懐かしいです。 行ベクトル [ 1 2 3 4 ] 列ベクトル [ 1;2;3;4 ] 行列 [1 2 3; 4 5 6; 7 8 9] FFT fft(x) 出力はxと同じランク。 逆FFT ifft(x) プロット plot(x)

基本

代入 a=3 で変数aに値3.0が代入される。 表示 変数名だけを入力するとその値が表示される。 虚数単位 %i 複素数表記 2 + 3 * %i 実部と虚部を取り出す real(z), imag(z) 複素絶対値 abs(z) 角度単位 三角関数の角度単位はrad