サウンドプログラミング
■ このスレッドは過去ログ倉庫に格納されています
0504デフォルトの名無しさん
NGNGsinc関数を使ったことなかったので、試しに書いてみた。
サンプリングデータ
x[0],x[1],...,x[n_data-1]
をtimes倍に補間して
y[0],y[1],...,y[n_data*times-1]
を生成する。x,yはdouble型配列、n_data,timesはint型。
#define PI 3.14159265358979323846
double sinc(double x) {
if (x == 0.0) return 1.0;
return sin(PI*x)/(PI*x);
}
とsinc関数を定義しておいて、
for (int yi=0; yi<n_data*times; ++yi) {
double yt = (double)yi/times;
y[yi] = 0.0;
for (int xi=0; xi<n_data; ++xi)
y[yi] += x[xi]*sinc(xi-yt);
}
計算量が多くなってしまうので、
sinc関数に窓関数をかけて範囲限定するなり工夫して。
■ このスレッドは過去ログ倉庫に格納されています