Ich versuche, eine .wav- Tonwellenform durch einen Bandpassfilter zu leiten, dessen Impulsantwort gegeben ist durch
Ich habe die Datei wie folgt in Matlab importiert:
[s, Fs] = wavread('piano_chord.wav');
Welche Syntax muss ich also verwenden, um diesen Filter zu implementieren?
[b,a] = butter(n,Wn)
Ich habe mir die oder [b,a] = cheby1(n,Rp,Wp)
für Butterworth- bzw. Chebyshev-Bandpassfilter angesehen . Aber ich weiß nicht, wie die Gleichung für Impulsantwortfaktoren in diese Faktoren einfließt und welche Werte ich für a, b und Wn verwenden muss.
Jede Hilfe wäre sehr willkommen.
Erstellen Sie eine Zeitbasis für Ihre Impulsantwort:
t = 0 : 1/fs : 1;
die Impulsantwort erzeugen
b = 50 * exp( -10*t ) .* sin( 2*pi*440*t );
Filtern Sie das Signal
filtered_s = filter( b, 1, s);
Wenn Sie bereits die gewünschte Impulsantwort haben, wäre der einfachste Ansatz, diese einfach mit dem Signal zu falten und effektiv einen FIR-Filter zu implementieren.
Die Alternative wäre, eine FFT der Impulsantwort durchzuführen, um die Frequenzantwort zu erhalten, und dann zu versuchen, diese mit einer Reihe herkömmlicher Filter (z. B. Butterworth oder Chebyshev) anzunähern.
Merin
wavwrite(filtered_s, Fs, 'band_pass')
erhalte ich den Fehler: Warnung: Daten beim Schreiben in file:band_pass abgeschnitten . Wie kann ich das gefilterte Signal sonst exportieren?Merin