2016-04-30 16 views
1

Ich versuche ein verrauschtes Signal zu simulieren und es zu filtern. Das Signal mischt einige niederfrequente Signale und etwas zufälliges Rauschen. Mein Ziel ist es, ein 14,8-Hz-Signal zu erhalten. meine Bandpass-Bandbreite beträgt 14,7 Hz bis 14,9 Hz.Matlab Bandpass Filter funktioniert nicht

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

mein Signalbild ist: Original Signal

und Filterergebnis ist: Filtered Signal

, wenn ich versuche Filter Ordnung bis 32 * 4096 von 4096 zu erhöhen, erhalte ich dieses Ergebnis: Filtered Signal

Warum funktioniert dieser Filter nicht richtig? ändere ich meine Filtermethode? Was soll ich tun, um ein Frequenzsignal von 14,8 Hz zu erhalten?

danke.

Antwort

1

Warum ist Ihre Abtastrate so hoch? Verringern Sie die Abtastrate und verwenden Sie einen Notch-Filter, um eine selektive Frequenz auszuwählen. Ich habe einige Abschnitte des Codes neu geschrieben:

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

In der Filterdefinition können Sie dies tun:

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

Führen Sie nun die Filter

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

Sie werden sehen, etwas wie das.

enter image description here

+0

vielen Dank. es funktioniert! –