2010-12-08 14 views
4

Ich habe eine Reihe von Daten, es ist im Zeitbereich. Jeder Wert steht für die Größe. und diese Daten werden mit einer Frequenz von 10.000 Hz abgetastet. Ich möchte ein Bandpassfilter zwischen zwei Frequenzen f1 und f2 machen. Ich denke, ich muss einen Tiefpassfilter und einen Hochpassfilter machen. Das Signal führt eine FFT durch, durchläuft dann die beiden Filter und führt dann eine Inves - se - FFT durch. Meine Fragen gibt es eine einfache Möglichkeit, den Tiefpass und Hochpassfilter zu tun? Ich weiß nicht, wie man die Übertragungsfunktion basierend auf den zwei Grenzfrequenzen herleitet.Matlab-Filter Fragen

Wer weiß wie?

Dank

+1

Um einen realistischen, voll spezifizierte Filter von angemessener Qualität zu bekommen, wollen Sie vielleicht auch Sperrdämpfung (s), Bandpass Welligkeit und Übergangsbreiten spec. Was auch immer Sie tun, zerlegen Sie nicht einfach einige Fächer der FFT. – hotpaw2

Antwort

3

Aufbauend auf Tristans Antwort ist hier ein Oktavcode, der Matlab-kompatibel sein kann oder auch nicht. Die Butter-Funktion leitet die Koeffizienten der Übertragungsfunktion für Sie ab. alt text. alt text

hz = 8000; 
x = [1:1:hz*10]; 
t = x./hz; 
pi = 3.1415; 

% Create signal with 10 hz, 200 hz and 500 hz components 
raw_signal = sin(10*2*pi*t)+sin(200*2*pi*t)+sin(500*2*pi*t); 

% View Raw Signal Over .1 Second Window 
plot(t, raw_signal) 
title('Raw Signal with 10Hz, 200Hz, 500Hz Components') 
xlabel('Time (Sec)') 
ylabel('Amplitude') 
set(gca,'XLim', [5, 5.1]); 

% Create Band Pass Butterworth Filter 
[S_numer, S_denom] = butter(5, [100/hz 350/hz]); 
band_passed_signal = filter(S_numer, S_denom, raw_signal); 

% View Band Pass Filtered Signal Over .1 Second Window 
plot(t, band_passed_signal) 
title('Band Pass Filtered Signal') 
xlabel('Time (Sec)') 
ylabel('Amplitude') 
set(gca,'XLim', [5, 5.1]); 
2

MATLAB verfügt über Werkzeuge, die Filterung tun, damit Sie die FFT-IFFT Sache nicht tun müssen, um sich selbst (was zu einigen Problemen führen kann). Versuchen Sie es mit einer Kombination von butter und filter, um das zu tun, was Sie tun möchten.

Butter

Filter

2

Wenn Sie Signalverarbeitung Toolbox habe ich vorschlagen, dass Sie Ihren Filter Design der sptool mit, es ist ein GUI-Tool für Filter-Design, das zeigt Ihnen auch die Amplituden- und Phasengang usw. Was Sie Wan't ist ein Bandpassfilter. Es kann auch aus einem Tiefpass- und einem Hochpassfilter bestehen, wie Sie es vorschlagen, aber Matlab kann Ihnen auch den Bandpassfilter direkt geben.

Wenn Sie nicht die Toolbox haben, schlage ich vor, Sie beziehen sich auf The Scientist and Engineer's Guide to Digital Signal Processing, das ganze Buch ist online verfügbar und hat viele gute Beispielcode in Basic, die einfach zu Matlab übersetzt werden kann. z.B. Designing bandpass windowed sinc filter.

+0

Signalverarbeitung in basic ?? Warum sollte jemand das machen wollen? –

+1

Offensichtlich würden Sie den Basic-Code nicht in realen Anwendungen verwenden, aber wie das Buch es ausdrückt: "* Lernen * DSP hat sehr andere Anforderungen als * mit * DSP". So dient Basic in diesem Fall eher als Pseudocode, der leicht in jede Sprache übersetzt werden kann. –

+0

@NathanFellman: Basic war die Programmiersprache, die allen PCs vor 3 Jahrzehnten gemeinsam war. Es war also eine historische Lingua Franca nach Fortran, aber bevor C immer häufiger wurde. Und die "echte" DSP-Assemblersprache war normalerweise extrem unportabel. – hotpaw2