2016-04-30 32 views
1

ノイズのある信号をシミュレートしてフィルタリングしようとしています。信号はいくつかの低周波信号といくつかのランダムノイズをミックスします。私の目標は14.8Hzの信号を得ることです。 バンドパス帯域幅は14.7Hz〜14.9Hzです。matlabバンドパスフィルタが機能しない

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); 

私の信号のイメージは次のとおりです。 Original Signal

とフィルタ結果は次のとおりです。 Filtered Signal

私は4096から* 4096 32へのフィルタの順序を増やそうとしたとき、私はこの結果を得る: Filtered Signal

このフィルタが正しく動作しない理由を教えてください。私のフィルタリング方法を変更するのですか? 14.8Hzの周波数信号を得るにはどうすればよいですか?

ありがとうございました。

答えて

1

なぜサンプリングレートが高すぎますか?サンプリングレートを下げ、ノッチフィルタを使用して選択周波数を取り出します。私はあなたのコードの再書かれたいくつかのセクションがあります:フィルタ定義で

Fs = 200; 
desiredFrequency = 14.8; 
[b,a] = NotchFilter(Fs, desiredFrequency) 

を、あなたがこれを行うことができます:

function [b,a] = NotchFilter(Fs,desiredFrequency) 
w = desiredFrequency/(Fs/2); 
[b,a] = iirnotch(w,w/400); 

は、今あなたが表示されます

y_filter = filtfilt(b,a,y); 
desiredSignal = y-y_filter; 
plot(desiredSignal,'LineWidth',2); hold on; plot(y,'LineWidth',2) 

フィルタリングを実行しますこのようなもの。

enter image description here

+0

おかげでたくさん。それは動作します! –

関連する問題