Cut-off frequency not reached with my equiripple-filter
1 view (last 30 days)
Show older comments
Hi, I am new to filter design and I have designed an equiripple filter in matlab using the commands:
Hd=fdesign.lowpass('Fp,Fst,Ap,Ast',30000000,50000000,1,60,1000000000);
d=design(Hd,'equiripple');
With a passband frequency of 30MHz and a stopband frequency of 50MHz. However, when I filter the signal
x=1:100000;
y=2+sin(1000*x)+5*sin(1*10^9*x);
with the command
h=filter(d,y);
both sine-functions are reduced. But sin(100*x) should go through and I don't understand why it doesn't. Does anyone know what I am doing wrong?
Thanks Jenny
0 Comments
Accepted Answer
Wayne King
on 14 Jun 2012
Hi Jenny, you don't tell me what Fs is here so I cannot say whether or not your design is correct.
Is Fs 10 kHz? in your time vector? if so then why are you stepping in increments of 1/(4*Fs)?? That changes the sampling rate. Your time increments have to be 1/Fs by definition.
Fs = 1e4;
t = 0:1/Fs:1-1/Fs;
y=sin(1000*2*pi*t)+cos(2*pi*250*t);
% design filter
Hd=fdesign.lowpass('Fp,Fst,Ap,Ast',500,700,0.5,60,10000);
d=design(Hd,'equiripple');
out = filter(d,y);
outdft = fft(out);
plot(abs(outdft))
The sampling rate you use for the signal has to match the sampling rate used in the filter design.
0 Comments
More Answers (3)
Wayne King
on 13 Jun 2012
I don't see that with your unit step time vector, your frequencies in
y = 2+sin(1000*x)+5*sin(1e9*x)
are appropriate. What frequency do you think sin(1000*x) is?
Your x vector has unit steps. If we translate this to your sampling frequency (used in your filter design) of 1 gigahertz, then these frequencies are aliased.
f = 1000/(2*pi)
Now with a unit step that means it has a period less than 1 sample. The period of sin(1000*x) is (2*pi)/1000. That's above the Nyquist considerably and therefore so is sin(10^9*x) even more so.
Why are you defining your signal like this? Why not use a time vector where you use the sampling interval that corresponds to your sampoing frequency?
Fs = 1e9;
t = 0:1/Fs:(1e5*(1/Fs))-(1/Fs);
I just set up t to be the same length as your original x.
Now define your sine waves over the t vector.
0 Comments
See Also
Categories
Find more on Digital Filter Design in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!