上:通常のconvolution(窓掛け無し)
上:窓掛けして、遅延分を、ずらし、再度逆窓掛けしたもの
これなら、よさそうですね。
プログラムは、こう、なりました。
赤色が、修正した所です。
t=linspace(0,2*pi,48000);
x_sample=2400;
sample=48000;
taps=2000;
M=x_sample + taps -1;
ham=hamming(x_sample);
ham=ham'; % 転置
%================================================================================
x=sin(1000*t)+sin(6000*t); % 1KHz & 6KHz sin wave
x1=x(1:x_sample);
% x_sample pointに限定
h=fir1(taps-1,0.2);
% fir LowPass filter coef taps=2000 cutoff=4.8KHz
h=h';
% 転置
h1=[h zeros(1,x_sample-1)];
H=fft(h1,sample); % filter係数をFFTしたもの
%----次にXを計算する------------------------------------------------------------
x1 = x1.*ham; % window
x2=[x1 zeros(1,taps-1)]; % x をゼロ詰め
X=fft(x2,sample);
u = H.*X;
Y = ifft(u);
Y = real(Y(1000:1000+x_sample-1));
Y = Y./ham; %
inv window
plot(Y);
hold;
x3=filter(h1,1,x); % 通常のconvolution
%x3=x3(1000:3399);
plot(x3);
hold;
入力した、1KHzと6KHzの内、6KHzは、バサッと、切れていますね。
さて、実際は、どうなります事やら...これから試す準備です。
それから、ホ−ムページ作成に、フリーのNVUというものを、使い始めました。
まだ、慣れてなくて、見苦しいかも.... m(__)m
H.19.1.11 ( 20070111 )