# DSP: Tiefpass & Co.



## Ark (23. Mai 2007)

Hallo allerseits. 

Ich brauche mal eine Tiefpass- und eine Hochpass-Filter-Implementierung, vorzugsweise natürlich in Java.  Ich habe schon tagelang Google bedient, aber noch immer nichts gefunden (woran auch immer das liegen mag). Das „tolle“ daran ist, dass ich von DSP so gut wie keine Ahnung habe, weshalb ich nicht einmal einen Ansatz liefern kann. Ich hoffe, ihr könnt mir helfen, sei es mit ansprechender Literatur oder am besten gleich einer Implementierung. 

MfG
Ark


----------



## Tellerrand (23. Mai 2007)

Kannst du genauer definieren was du brauchst?
Also wie z.B. das Signal vorliegt das du filtern willst, etc?


----------



## Ark (23. Mai 2007)

Eine Klasse folgender Bauweise sei interessant:

```
public class Filter{

	// irgendwelche Eigenschaften

	public Filter(int grenzfrequenz,int abtastrate){
		// wie auch immer implementiert
	}

	public int tiefpass(int alteAuslenkung){
		// Hier wird's interessant.
	}
	public int hochpass(int alteAuslenkung){
		// Hier wird's interessant.
	}
}
```
Als Eingabe soll immer die aktuelle Auslenkung (in Abhängigkeit von der Zeit, mit Vorzeichen) dienen, Grenzfrequenz und Abtastrate in Hz seien bekannt. Die Ausgabe sei eben das gefilterte Signal.

Ark


----------



## dsv fritz (23. Mai 2007)

Erstens meinst du DSV und nicht DSP.

Zweitens überleg dir doch mal genau, wie ein Filter aussieht. Eigentlich ist ein Filter eine Addition von alten und neuen Werten, die Gewichtet werden.

Wenn du warten kannst, kann ich dir heute abend mal einige Beispiele aus einem Java-Code posten, hab ihn leider nicht im Büro.


----------



## Tellerrand (23. Mai 2007)

Die Frage war wie die Daten vorliegen, als Array mit Frequenz und Spannung?

Das ein Hochpass eben alle Frequenzen unterhalb eines Grenzwertes dämpft und wie er das macht steht ja z.B. hier: http://de.wikipedia.org/wiki/Hochpass

Ich hab mich nur gefragt was du willst, die Berechnung der Dämpfung oder wie man nun das Signal verarbeitet?


----------



## dsv fritz (23. Mai 2007)

> Ich hab mich nur gefragt was du willst, die Berechnung der Dämpfung oder wie man nun das Signal verarbeitet?



Wenn man die "Dämpfung" berechenen möchte, muss man das ganze Filter designen. Da ist Matlab einfach das beste Tool.
Ich nehme an, dass unser Kamarad gerne ein Signal filtern möchte und dazu eine Java-Implementierung sucht.
Das einfachste Filter ist folgendes:
y[n] = a*y[n-1] + b*x[n]

mit z.B:
a=0.99 und b=0.01

Wäre vielleicht mal ein Anfang...

Übrigens ist der Link zu Wiki nur ein analoges Filter von geringer Ordnung und flachem Frequenzgang.  :wink:


----------



## Ark (23. Mai 2007)

dsv fritz hat gesagt.:
			
		

> Das einfachste Filter ist folgendes:
> y[n] = a*y[n-1] + b*x[n]
> 
> mit z.B:
> ...


Ja, das scheint wohl in die Richtung zu gehen. Aber sehr viel schlauer werde ich auch nicht daraus. Entschuldigt bitte meine (anscheinend) unzulänglichen Beschreibungen, aber ich habe, wie gesagt, von digitaler Signalverarbeitung (noch!) nicht wirklich Ahnung.

Ich beschreibe mein Problem mal anders, wenn es genehm ist: Eingabe seien Audiodaten (in CD-Qualität), PCM. Diese Daten sollen nun so verarbeitet werden, dass Töne (Schwingungen) mit Frequenzen oberhalb (Tiefpass) bzw. unterhalb (Hochpass) einer bestimmten Grenzfrequenz abgeschwächt (idealerweise ganz ausgelöscht) werden. Die Frage ist: Wie mache ich das?

Es ist gut möglich, dass ich bisher z. B. Begriffe durcheinandergeworfen habe (Entschuldigung!), aber ich bin ja auch noch Anfänger, und einmal ist immer das erste Mal. 

Ark


----------



## dsv fritz (24. Mai 2007)

Kein Problem, jeder hat mal klein Angefangen:

Deiner Beschreibung nach willst du einen Equalizer für eine Audio-CD erstellen.
Ich schon mal in meinem Studium einen Frequenzanalyser gemacht, welcher die Frequenz am Ein-/ Ausgang der Soundkarte messte.

Zudem habe ich sogar einen Equalizer mal in Hardware und DSP gebaut.

Nun schlage ich dir Folgendes vor:
1. Implementiere ein einfaches Filter (wie oben) in Java und nimm dazu Testdaten wie [0 0 0 1 1 1 ...].
2. Erweitere das Filter so, dass du mit einem Scrollbar die Dämpfung anpassen kannst.
3. Nun musst du noch die Daten aus der CD holen und in einen Datenstrom einbinden, damit du in Echtzeit auch die Daten verarbeiten kannst.

Generell brauchst du um einzelne Frequenzbereiche zu erhöhen vertiefen Bandpassfilter. Den Tiefpass brauchst du dann noch für die Tiefenbereich und den Hochpass für den hohen Bereich.

Falls du wieder irgendwo ein Problem hast, poste es nur, wir werden das Ding schon hinbekommen.


----------

