Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

bandpass filter not working in matlab

Status
Not open for further replies.

fences

Junior Member level 3
Joined
Feb 7, 2011
Messages
25
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,453
I try to simulate a noisy signal and Filter it. the signal mix some low frequency signals and some random noise. my goal is to get 14.8Hz signal. my band-pass bandwidth is 14.7Hz to 14.9Hz.

Code:
function filteringTest

Hd = KaiserFilter;


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


r1 = 320;
r2 = 575;

y = 50*sin(2*pi*14.8*t) + r1*sin(2*pi*14.7*t) +  r2*sin(2*pi*15.1*t) + 10.1*rand(size(t));
yfilter = filter(Hd.Numerator,1,y);
plot(yfilter)



function Hd = KaiserFilter

Fs = 4000;  % Sampling Frequency

N    = 4096;     % Order
Fc1  = 14.7;     % First Cutoff Frequency
Fc2  = 14.9;     % Second Cutoff Frequency
flag = 'scale';  % Sampling Flag
Beta = 0.5;      % Window Parameter
% Create the window vector for the design algorithm.
win = kaiser(N+1, Beta);

% Calculate the coefficients using the FIR1 function.
b  = fir1(N, [Fc1 Fc2]/(Fs/2), 'bandpass', win, flag);
Hd = dfilt.dffir(b);

my signal image is :
4.jpg

and filter result is :
5.jpg

when i try to increase Filter Order from 4096 to 32*4096 , i get this result :

6.jpg


why this filter do not work correct? do i chage my filtering method? what should i do to get 14.8Hz frequency signal?

thanks.
 

BradtheRad

Super Moderator
Staff member
Joined
Apr 1, 2011
Messages
14,103
Helped
2,798
Reputation
5,600
Reaction score
2,714
Trophy points
1,393
Location
Minneapolis, Minnesota, USA
Activity points
105,191
Did you test your filter on sinewaves at just one frequency? That should make it easier to check the response.

Can you find sample code of a bandpass filter? Start with that, then change it to suit your specs.

It looks like a big jump to change from 4096 to 32*4096. Did you try values in between?
 

fences

Junior Member level 3
Joined
Feb 7, 2011
Messages
25
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,453
Did you test your filter on sinewaves at just one frequency? That should make it easier to check the response.

Can you find sample code of a bandpass filter? Start with that, then change it to suit your specs.

It looks like a big jump to change from 4096 to 32*4096. Did you try values in between?

thank you. this is Kaiser bad-pass filter and it's work fine. the point is when 14.7Hz signal and 15.1hz signal amplitude growing up, this filter do not work properly. in this sample r1 ( amplitude of 14.7Hz ) and r2 ( amplitude of 15.1 Hz ) is too big than main Signal ( 14.8 Hz and it's amplitude is 50 ).
in other hand when my amplitude of my main signal is small than other noisy signal, bandpass filter do not able to filter noisy signal.
i looking how i can fix it?
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
48,515
Helped
14,270
Reputation
28,805
Reaction score
12,973
Trophy points
1,393
Location
Bochum, Germany
Activity points
280,589
There's nothing wrong with the filter. But you see that the second filter still passes part of the unwanted signals. Furthermore, you need to wait at least the threefold time for complete settling of the output signal. Finally there's a relation between the length of the impulse response (Fs*filter order) and the minimal achievable bandwidth.
 

fences

Junior Member level 3
Joined
Feb 7, 2011
Messages
25
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,453
There's nothing wrong with the filter. But you see that the second filter still passes part of the unwanted signals. Furthermore, you need to wait at least the threefold time for complete settling of the output signal. Finally there's a relation between the length of the impulse response (Fs*filter order) and the minimal achievable bandwidth.

thanks you, yes, filter is correct. but how can i get correct result? in second filter if i increase my signal samples data from 40000 to 100000, but filterign result not acceptable. filter result is too noisy yet.
is there any idea to design a filter that pass only 14.8Hz signal?
thanks
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
48,515
Helped
14,270
Reputation
28,805
Reaction score
12,973
Trophy points
1,393
Location
Bochum, Germany
Activity points
280,589
By filter specification, you don't have much attenuation for 14.7 Hz signal. The 32*4096 filter can achieve smaller bandwidth, but made it intentionally 0.2 Hz wide.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top