INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Filter für Preemphase



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

26.07.2007, 12:14 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2007 12:15 von Xaran.)
Beitrag #21

Xaran Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 200
Registriert seit: Jun 2006

LabView 2009
2006
en

80***
Deutschland
Filter für Preemphase
Ich habe den Filter bei mir ins Programm eingebaut, aber leider funktioniert es nicht so wie es soll :-

Das erstellte Signal kann zwar von dem Radio demoduliert werden und man hört auch die Musik, allerdings viel leiser und etwas verrauscht. Jetzt bin ich bei der Fehlersuche und habe mir mein erzeugtes Signal in LabVIEW demodulieren lassen, wo sich der Effekt auch schon zeigt.

Ich würde zum Testen gerne einen Sinus-Sweep erzeugen und über den Filter schicken, da ich somit wohl am besten den Fehler finden könnte (ich hoffe, dass das Signal nicht in irgendeine andere Begrenzung fährt...)

Wie aber kann ich einen einfachen Sinus-Sweep erzeugen? Es müsste doch einfach gehen, bei einem Signalgenerator die Start- und Stopp-Frequenz einzustellen sowie die Dauer der Zeit, in der dies geschehen soll. Trotzdem habe ich ein solches VI noch nicht gesehen. Habe ich es (hoffentlich) vielleicht übersehen? In einem anderen Thread hier im Forum wurde ein Sweep-Generator vorgestellt den ich mir aber nicht anschauen kann, da dieser in LV8 erzeugt wurde ( http://www.LabVIEWforum.de/index.php?showtopic=5803 ).

Kann mir da auf die Sprünge geholfen werden?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2007, 12:52
Beitrag #22

Xaran Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 200
Registriert seit: Jun 2006

LabView 2009
2006
en

80***
Deutschland
Filter für Preemphase
' schrieb:Habe Dein VI mitlv71bearbeitet, aber es lief ja im Prinzip schon. Daß ich physikalische Einheiten verwende, ist nur so ein Hobby von mir,

Wieso hast Du die Spektren noch durch das Spektrum des Eingangssignals geteilt?

Ich habe einen Sinusgenerator hergenommen und lasse ihn immer eine andere Frequenz erzeugen. Erwartet habe ich bei der Ausgabe einen Peak im Spektrum bei der entsprechenden Frequenz, was ich aber leider nicht sehe. Stattdessen sehe ich einen Peak von oben aus (???) bei einer anderen Frequenz.


Angehängte Datei(en)
Sonstige .vi  Preemphase71.vi (Größe: 308,05 KB / Downloads: 176)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2007, 13:41
Beitrag #23

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Filter für Preemphase
' schrieb:Kann mir da auf die Sprünge geholfen werden?

Ja, am besten mit einer Sprungfunktion (kein Scherz).

Von eine punktweisen Aufnahme des Frequenzganges mit einer Sweep-Funktion kann ich dir Dir aus verschiedenen Gründen nur abraten. Besser ist, mit einer Zeitfunktion, die alle Frequenzen von f0, f0+df, f0+2df ... f1 enthält zu stimulieren, die Zeitfunktion am Ausgang zu messen und mit Fourier das Frequenzspektrum zu bestimmen. Um daraus den Frequenzgang zu erhalten muß man das Frequenzspektrum von Ausgang und Eingang dividieren.

Die allereinfachste Stimulation ist mit einer Sprunkfunktion bzw. einem symmetrischen Rechteck. Das Rechteck der Periodendauer T enthält allerdings nur die ungeradzahligen harmonischen der Grundfrequenz f0 = 1/T, also f0, 3*f0, 5*f0...
Die Amplitude der Partialfrequenzen nimmt zwar umgekehrt proportional zu f ab, aber das wird ja durch die oben beschriebene Division kompensiert. Der große Vorteil dieser Methode ist, daß man Sprungantwort und Frequenzgang in einem VI gleichzeitig beobachten kann. Ein Nachteil könnte verstärktes Rauschen bei hohen Frequenzen sein, aber da Dein Filter die hohen Frequenzen verstärkt, ist hier der Sprung gewissermaßen die ideal angepasste Funktion.

Ich habe bei der Darstellung des Frequenzganges (siehe vorherige Postings) mit einem Dirac-Impuls gearbeitet, welcher ein weißes Frequenzspektrum hat. Der Nachteil ist, daß das Verhältnis von Spitzenwert zu Effektivwert quasi gegen unendlich geht. Deshalb kann man ihn praktisch nur an simulierte (Software-) Filter anlegen, da diese keine Übersteuerungsprobleme kennen.

Auch das "weiße Rauschen" hat ein sehr ungünstiges Verhältnis von Spitzen- zu Effektivwert.
Die fast ideale Funktion, mit maximalem Effektivwert bei gegebenem Spitzenwert und annähernd weißem Frequenzspektrum, ist die Chirp-Funktion (in LV enthalten) . Es ist so eine Art Sweep-Funktion, aber der Unterschied ist doch. daß der Sweep viel schneller läuft und bei der Messung alle Frequenzantworten gleichzeitig erfasst werden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2007, 14:12
Beitrag #24

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Filter für Preemphase
' schrieb:Wieso hast Du die Spektren noch durch das Spektrum des Eingangssignals geteilt?
Stattdessen sehe ich einen Peak von oben aus (???) bei einer anderen Frequenz.
Da Du die Bedienelemente Einstellungen nicht als Standard abgespeichert hast, sind sie verloren und ich weiß nicht was Du gemacht hast. Bedingung ist erst mal, daß Du innerhalb der Samplezahl eine genau ganzahlige Anzahl von Perioden erzeugst. Eigentlich müßtest Du dann die Probe über mehrere Perioden einschwingen lassen, und erst dann über genau eine Periode messen.
Bei der Division erwarte ich keinen Peak. Bei der Stimulations - Frequenz gibt es einen eindeutigen Wert, bei allen anderen Werten ist es eine Division von 0/0 oder von sehr kleinen Zahlen, mit unbestimmten, zufälligem Ergebnis. Das Ganze VI ist für diesen Zweck nicht brauchbar, und wenn Du durchaus mit Einzelfrequenzen Frequenzgänge darstellen möchtest (siehe hierzu mein voriges Posting), dann lass Dich auch von denen beraten, die Dir das empfohlen haben.

Auch so: Wieso habe ich überhaupt geteilt.
Ursprünglich hatte ich das nicht, denn der Diracsche Impuls lieferte des Frequnzspekrum 1. Bei dem Fourier-VI, welches Du dann verwendet hattest, war die Antwort nicht 1. Die Division war wegen der Normierung notwendig geworden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.07.2007, 14:45
Beitrag #25

Xaran Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 200
Registriert seit: Jun 2006

LabView 2009
2006
en

80***
Deutschland
Filter für Preemphase
Vielen Dank soweit. Ich muss das und mich erst sortieren und in meinem Kopf noch ordnen.

Ich habe noch ein paar mehr Fragen, aber ich sollte die auch möglichst strukturiert stellen ;-)
Vorallem aber merke ich, wie wenig Ahnung von digitalen Filtern ich (noch) habe...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2007, 10:25
Beitrag #26

RoLi Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Jul 2007

6.1 und 7.0
1997
kA

31135
Deutschland
Filter für Preemphase
' schrieb:Ich möchte die Übertragungsfunktion des Preemphasefilters per frequency sampling möglichst gut approximieren. (hätte ich wohl früher sagen soll/müssen). Laut meinem Vorgänger an diesem Projekt ist diese Approximation mit 21 Koeffizienten recht gut.

Hallo Xaran,
bitte bei dem Entwurf Deines Systems nicht vergessen, dass alle Frequenzen oberhalb 15kHz mit einem STEILflankigen Tiefpassfilter unterdrückt werden müssen, um den Pilotton bei 19kHz zu schützen und damit die Erzeugung von L+R und L-R-Signalen zur Stereoübertragung richtig funktioniert.
Den Bereich unter 20Hz bitte auch mit einem Hochpass unterdrücken, da die Empfänger-PLL sonst Probleme bekommen kann.

Wenn Du kein System bauen willst, dass den strengen Rundfunknormen genügt,
dann würde ich ein Preemphase-Filter entwerfen, dass den Bereich zwischen 20Hz und 10kHz möglichst genau approximiert.
Der Frequenzbereich über 10kHz ist meiner Meinung nach nicht so wichtig, da Radiohören nicht High-end-hören ist.
Das ist meine persönliche Meinung, ich will hier keine Diskussion in diese Richtung starten.

Zum Thema FrequenzgangSIMULATION:
Bei den heutigen PC-Geschwindigkeiten kannst Du auch mit den Originaldifferenzengleichungen rechnen:

allgemeiner Fall = IIR-Filter:
H(z) = FIR(z)/Nenner(z) mit z = e^j(2pi*f/fsample)
H(z) = (b0 + b1*z + b2*z^2 + ...)/(a0 + a1*z + a2*z^2 + ...)

FIR-Filter: Nenner(z) = 1


Für die Filterkoeffizienten nimmst Du Arrays, die Du z.B. mit dem Hornerschema ausmultiplizierst.

Lass einfach einen Graphen mit ein paar Tausend Punkten errechnen.

Für den Entwurf würde ich auch Ausprobieren empfehlen, da die Filter-Standardentwurfsverfahren
nicht dafür ausgelegt sind und z.B. die bilineare Transformation von analogen Filterkoeffizienten
auch nur für 1 Frequenz exakt stimmt (Stichwort: Verzerrung der Frequenzachse): meist die 3dB-Frequenz

Für das optische Optimieren empfehle ich einen Graphen,
in dem die Amplituden in dB und die Frequenzachse logarithmisch ist (z.B. 10Hz bis 20kHz).
Der Graph sollte folgende Kurven anzeigen:
1) Preemphase in dB
2) Betrag des Filter-Frequenzgangs in dB
3) dB-Differenz zwischen beiden Kurven

Dann fange bei 300kHz Abtastrate z.B. mit folgendem Koeffizienten an:
b0 = 1, b1 = -0,9

Als erstes siehst Du, dass Filterkurve bei 0Hz nicht 0dB aufweist:
das ist aber kein Beinbruch, du musst nur alle Deine Koeffizienten durch
den LINEAREN Betrag des Filter-Frequenzgangs bei f=0Hz teilen.
Die so errechneten Koeffizienten sind dann auch die für die Online-Filterung in Deiner Anwendung.

Anmerkung: z = e^j(2pi*0) = 1 -> H(1) = (b0 + b1 + b2 + ...)/(a0 + a1 + a2 + ...)
H(f=0) = Quotient der Koeffizientensumme

Jetzt kannst Du b1 solange ändern bis der Fehler nach Deinem Geschmack optimal ist.

Wenn Du doch mehr Koeffizienten zulassen willst, dann kannst Du z.B. noch mit b3 experimentieren:
starte doch mit b3=0,002

Viel Erfolg, RoLi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.09.2007, 05:45
Beitrag #27

Xaran Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 200
Registriert seit: Jun 2006

LabView 2009
2006
en

80***
Deutschland
Filter für Preemphase
Moin!

Vielen Dank für die Antwort! :-)
Ich habe zur Zeit den Preemphase-Filter etwas nach hinten vertagt, da andere Dinge noch vorher erledigt werden müssen. Aber dann werde ich mit Sicherheit darauf zurückkommen
Außerdem werde ich den Filter jetzt auch an eine andere Stelle im Programm verfrachten. Die Erkenntnis kam spät (aber immerhin kam sie...), dass es wesentlich sinnvoller ist, die Filterung an der .wav Datei durchzuführen und nicht erst bei der Datei, die mit 300kHz resampled wurde: Das hätte den Filterentwurf unnötig kompliziert gemacht, da ich da dadurch auf einer Breite von 150kHz nur die ersten 20kHz berücksichtigen wollte. Direkt an der .wav Datei sollte ich einige Probleme umschiffen können...
Ich denke mal, dass ich in nächste Woche mich wieder mit diesem Thema rumschlagen werde. Zum "Glück" schreibe ich demnächst eine Klausur in Signal und Informationsverarbeitung, sodass mit dem Thema auch etwas fitter werden sollte und somit auch meine Fragen dann verständlicher werden sollten ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.10.2007, 10:36
Beitrag #28

Xaran Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 200
Registriert seit: Jun 2006

LabView 2009
2006
en

80***
Deutschland
Filter für Preemphase
Moin Moin!

Ich bin wieder bei der Implementierung des Preemphase-Filters angekommen, nachdem ich jetzt alle Klausuren überstanden habe und den "Rest" meines Programmes halbwegs auf Vordermann gebracht habe.

Und ja, leider habe ich immer noch Fragen (Hilfe - ich fühle mich so dumm).

Zunächst hat sich was geändert: Die Abtastrate beträgt nicht mehr die hohen 300kHz sondern 44,1kHz. Das liegt daran, dass der Filter jetzt an einer anderen Stelle im Programm implementiert wird: Direkt nach dem Einlesen der .wav-Dateien.

Also zu den Fragen:
1. @Lucki: noch einmal wegen der Normierung: War das ein Ausprobieren nach dem Motto: "da muss zu Anfang eine 1 stehen, tuts aber nicht, also teile ich durch das Eingangssignal!"? Und wie kommt man darauf? Wäre diese Normierung dann auch im späteren Programm mit den Musikdateien notwendig?

2. Vergleich mit MatLab: Ich habe versucht (mit Hilfe) mir in MatLab die Koeffizienten für einen Filter berechnen zu lassen. Dies wurde per frequency-sampling durchgeführt (wenn ich nicht vollkommen daneben liege). Hier brauche ich aber mindestens einen Filter der Ordnung 30, damit das Ergebnis brauchbar aussieht. Diese Koeffizienten habe ich mit ausgeben lassen und in LabVIEW dann als Koeffizienten eingefügt.
Mit diesem Versuch lande ich aber ziemlich auf der Klappe, wie man im angehängten VI erkennen kann. Wieso brauche ich in MatLab so viele Koeffizienten und wieso sieht das Ergebnis in MatLab sehr gut, in LabVIEW dann aber wieder total daneben aus?


Immerhin glaube ich, mir Eurer Hilfe langsam den Horizont erkennen zu könnenSmile

@RoLi: Danke für die Hinweise auf den Tief- und Hochpass. Ich denke, dass ich die vergessen hätte und dadurch später ordentlich geflucht hätte.

mfg
Sönke

PS: Da ich anscheinend keine MatLab-Dateien hochladen darf, kopier ich kurz hier den Quelltext rein, vielleicht/hoffentlich kann jemand damit etwas anfangen:

f0=44100; % Abtastrate: da direkt die .wav Datei bearbeitet wird: 44,1kHz
tau=50; % Zeitkonstante in Microsekunden (für Europa 50, für Amerika 75)
N=30; % Filterordnung

% gewünschte Übertragungsfunktion
fm=0:0.001:16; % Frequenzpunkte: von 0Hz bis 16kHz in 1Hz-Schritten
dp=10*log10(1+10^(-5)*(2*tau*fm).^2); % corresponding magnitudes [dB]

% define frequency points
fs=0:.01:f0/2000; %Frequenzpunkte zum Arbeiten
As=1+10^(-5)*(2*tau*fs).^2; %gewünschte Amplitudenanhebung

% FIR Filter entwerfen (linearer Phasengang)
b=fir2(N,(fs/(f0/2000)),As);
b=b/sum(b); % Die Verstärkung soll 1 betragen

[H,f]=freqz(b,1,1024,f0); % compute transfer function
figure(1)
plot(f/1000,10*log10(abs(H)),'b',fs,10*log10(As),'r'Wink%,fm,dp,'g'Wink
grid on
axis([0.1 11 0 18])
legend('entworfen', 'erwünscht'Wink
set(gca, 'XScale', 'log'Wink


Angehängte Datei(en)
Sonstige .vi  Preemphase71.vi (Größe: 76,46 KB / Downloads: 177)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Wer kann diesen Filter erklären? Philipp841 12 7.260 25.07.2020 07:32
Letzter Beitrag: Martin.Henz
  Extended Kalman Filter in LabVIEW Heber 11 8.516 20.04.2017 09:26
Letzter Beitrag: Heber
  Hochpass Filter se 19 13.377 14.06.2015 18:32
Letzter Beitrag: se
  Filter selbst erstellen creo_123 13 12.848 23.04.2013 14:20
Letzter Beitrag: Lucki
  Filter tetef 5 6.256 09.04.2013 09:52
Letzter Beitrag: creo_123
  IIR-Notch-Filter 50Hz JaDa 4 7.490 25.11.2012 09:01
Letzter Beitrag: Lucki

Gehe zu: