problem with filtering a signal

1 回表示 (過去 30 日間)
hossein
hossein 2013 年 7 月 8 日
I wanna filter a signal by band-pass filter and the problem is when I exert the filter on my signal the output is so wrong.I try to exert the filter on a easy signal to test it: for example when I exert a band pass filter with 8-12 frequency range to the x=sin(2*pi*10*t)+sin(2*pi*20*t) the output must similar to sin(2*pi*10*t).but its not. I dont know where I am wrong?

回答 (2 件)

Wayne King
Wayne King 2013 年 7 月 8 日
Fs = 250;
t = 0:1/Fs:10-1/Fs;
x = sin(2*pi*10*t)+sin(2*pi*20*t)+0.25*randn(size(t));
y = sosfilt(SOS,x);
I used the following parameters in fdatool:
Fs = 250 fstop1 = 7 fpass1 = 9 fpass2 = 12 fstop2 = 14
60 dB of attenuation in both stopbands and 1 db of passband ripple.
  1 件のコメント
hossein
hossein 2013 年 7 月 9 日
so what about the gain of filter. the y has the amplitude by 10^4 times bigger than x here. you didn't use the filter's gain

サインインしてコメントする。


Wayne King
Wayne King 2013 年 7 月 8 日
編集済み: Wayne King 2013 年 7 月 8 日
You need to post the code you have used to design your filter. Also, include the sampling rate for your data.
For example:
Fs = 100;
t = 0:1/Fs:10-1/Fs;
x = sin(2*pi*10*t)+sin(2*pi*20*t)+0.25*randn(size(t));
d = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',4,8,12,16,50,1,50,100);
Hd = design(d);
y = filter(Hd,x);
periodogram(y,[],length(y),100)
  1 件のコメント
hossein
hossein 2013 年 7 月 8 日
編集済み: hossein 2013 年 7 月 8 日
I design the filter by fdatool by these specification:
chebyshef type 2; fs=250; fstop1=7;fpass1=9;fpass2=12;fstop2=13;
then I get the SOS and G matrixes then
[a,b]= sos2tf(SOS,G)
x= sin(2*pi*10*t)+sin(2*pi*20*t)
y=filtfilt(a,b,x) or y=filter(a,b,x)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeDigital Filter Design についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by