Bandpass Filter Order vs Sample Numbers of Noisy Signal I'm working on signal filtering in MATLAB. i wrote sample code that generate 50 Hz signal with some noisy frequency and use Kaiser bandpass filter to get only 50Hz frequency. this code work great! but there is a big problem!

Sample Rate is 2000 Hz and Filter Order is about 39000 , and my signal length is 50000 samples! in other hand i have to wait about 25 seconds to gathering my signal! that is too long time!, if i decrease signal length ( to about 6000 samples ) filter result is so noisy because of filter order. if i decrease filter order , filter signal result is too noisy too! the best time that i cloud wait for gathering data is about 3 seconds.

is there any way to get same result with 6000 samples of signal and high order filter? ( 39000 )

thanks.

Fs = 2000;                    % Sampling frequency
T = 1/Fs;                     % Sample time
L = 50000;                     % Length of signal
t = (0:L-1)*T;                % Time vector

Hd =  KAISERFilter;

for i=1:50

a = 5;
b = 500;
r1 = a + (b-a).*rand(1,1);
r2 = a + (b-a).*rand(1,1);
r3 = a + (b-a).*rand(1,1);
r4 = a + (b-a).*rand(1,1);

n = r1 *sin(2*pi*49.2*t) + r2 *sin(2*pi*50.5*t) + 0.1 * randn(size(t)) +  r3 *sin(2*pi*15.5*t) +  r4 *sin(2*pi*110*t) ;
x = 30 *sin(2*pi*50*t); % main frequency
y = x+n;


subplot(2,1,1);
plot(y)
title('Signal')
xlabel('time (milliseconds)');

yf = filter(Hd.Numerator,1,y);


and Kaiser filter code is :

function Hd = KieserFilter

% All frequency values are in Hz.
Fs = 2000;  % Sampling Frequency

Fstop1 = 49.5;              % First Stopband Frequency
Fpass1 = 49.9;            % First Passband Frequency
Fpass2 = 50.1;            % Second Passband Frequency
Fstop2 = 50.5;              % Second Stopband Frequency
Dstop1 = 1e-06;           % First Stopband Attenuation
Dpass  = 0.057501127785;  % Passband Ripple
Dstop2 = 1e-06;           % Second Stopband Attenuation
flag   = 'scale';         % Sampling Flag

% Calculate the order from the parameters using KAISERORD.
[N,Wn,BETA,TYPE] = kaiserord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 ...
                             1 0], [Dstop1 Dpass Dstop2]);

% Calculate the coefficients using the FIR1 function.
b  = fir1(N, Wn, TYPE, kaiser(N+1, BETA), flag);
Hd = dfilt.dffir(b);
You are dealing with a time frequency uncertainty in estimation problem.  It takes longer than 3 seconds for there to be enough information in a signal to tell the difference between 3 clearly separated sinewaves between 49 and 51 Hz, and only 1 fat (slightly modulated) one.  And you can't filter out a signal unless there is enough information to tell whether it's even there or not.