Spektralanalyse eines einzelnen Frequenzbandes

Hallo zusammen,

irgendwie häng ich gerade fest, wahrscheinlich ists mal wieder ganz trivial...

Aus einem Frequenzgemisch interessiert mich eigentlich nur ein recht kleiner schmalbandiger Signalausschnitt und davon eigentlich die Leistungsdichte über die Zeit. Konkret, es liegt ein Signal im Bereich 0,5-1 (wenns dumm läuft gehts auf 2 kHz hoch) kHz vor, das auf einem Träger von 3-8 kHz amplitudenmoduliert ist Derzeit machen wir das mit einer STFT mit einem relativ kritisch eingestellter Fensterbreite, so dass die Frequenzauflösung gerade noch akzeptabel ist und davor ein digitaler Hochpass bei 2 kHz, damit das untere band der FFT begrenzt ist. Das klappt soweit ganz passabel, braucht aber unnötig viel Rechenzeit, weil immer das ganze Spektrum gerechnet werden muss, obwohl ich eigentlich nur ein Frequenzband brauche. Hat mit jemand einen Tip, wie man das einfacher lösen kann? gibt es evtl ein taugliches Transformationsverfahren, das so weit herunterbrechbar ist, dass man nur das interessante Band herausgezogen wird? Mich interessiert eben nicht primär der Signalverlauf der 3-8 kHz Schwingung, sondern quasi deren Einhüllende. Ich hatte ja auch schon überlegt, den Filter als Bandpass auszulegen, aber dann hab ich immer noch die Trägerfrequenz drauf, deren Frequenz ich gar nicht so genau kenne, die aber in der konkreten Situation sogar einigermaßen stabil sein sollte. Einfache Gleichrichtung der Trägerfrequenz wird eher weniger gut gehen, weil die Nutzfrequenz verflixt nahe drauf liegt, das wackelt mit dann zu sehr.

Irgendwelche Ideen?

Marte

P.S. Das Verfahren an sich braucht hier nicht durchdiskutiert werden, es sieht schon so aus, dass ich mit den Signalen aus der STFT genau das sehe, was ich auch messen will. Mich interessiert eben nur der ganze Rest oberhalb des unteren Bandes nicht und sehe nicht ein, warum ich das alles erst mühselig rechnen lassen soll, um dann einfach >90% der Ergebnisse zu verwerfen.

Reply to
Marte Schwarz
Loading thread data ...

Deine niedrigste Traegerfrequenz ist 3kHz und die hoechste Modulationsfrequenz 2kHz. Da sind doch ganze Tagesritte zwischen :-)

Aber im Ernst, irgendwie sieht das nach Messanlage aus und da duerften die Kosten weniger eine Rolle spielen. Kannst Du nicht gleichrichten und dann einige Switched-Capacitor Filter spendieren?

Gibt natuerlich auch noch andere Tricks, wie Traeger herausfischen, PLL darauf rasten und dann synchron gleichrichten. Oder I/Q Auswertung wie bei Doppler. Beides aber unangenehm falls die Traegerfrequenz des ankommenden Signals nicht a priori bekannt ist.

Oliver Bartels wuerde vermutlich sagen, man nehme einfach die naechste Schuhgroesse DSP und feddich :-)

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Marte Schwarz schrieb:

Ich werfe hier mal das Stichwort Goertzel-Algorithmus als Startpunkt für eigene Recherchen in den Raum:

Damit habe ich schon einmal MFV (Tonwahl) decodiert.

Christian

--
Christian Zietz  -  CHZ-Soft  -  czietz (at) gmx.net
WWW: http://www.chzsoft.com.ar/
PGP/GnuPG-Key-ID: 0x6DA025CA
Reply to
Christian Zietz

Hallo Jörg,

So ist es.

Leider schon. Das ist zwar kein Wegwerf-Produkt, aber kostensensitiv wird es dennoch werden.

Da steh ich gerade auf dem Schlauch.

Das ist es. So wie es aussieht ist noch nicht mal die Trägerfrequenz innerhalb eines Bursts konstant. Es kommen immer wieder Impulspakete, die sich natürlich überlappen können. Ich habs mir noch mal angesehen, es sieht so aus, als ob die einzelnen Pakete bereits in sich eine Drift der Trägerfrequenz besitzen. Wunder mich zwar, weil das in mein physikalisches Modell nicht rein passt, aber da scheint mein Modell noch ergänzungsfähig zu sein.

Das wollte ich sowohl wegen dem Stromverbrauch alsauch wegen den Kosten vermeiden. Im Moment haben wir gesammelte Daten, die offline am PC durchgenudelt werden und am Ende kommt was schönes Raus, Rechenzeit und Aufwand spielen da noch eine untergeordnete Rolle. Bis jetzt ist lediglich gezeigt, dass es prinzipiell geht. Das ganze muss aber später deutlich unter

1 W Leistungsbedarf kommen, sonst wirds schnell nicht mehr konkurrenzfähig. Und dann wirds schnell eng mit DSPs und viel rechnen, von den Kosten eines DSP-Systems ganz zu schweigen. Wenn das Ganze in einem kleinen µC unterzubringen wäre, hätte das schon mehr Charme. Ich muss auf jeden Fall runter von der Rechenzeit. Die STFT wird schon nur noch mit 64 Samples gemacht, 32 wird schon kritischer, da geht schon manches unter. Ich hab ja schon überlegt, ob ich die Rechnerei runter bekomme, wenn ich die STFT nur mit 8 oder 16 Samples mache und dafür noch einen digitalen Tiefpass spendiere. Aber irgendwie wird das alles nix. Ich hab gar keine Erfahrung mit Wavelets, ich hab nur mal aufgeschnappt, dass die eigentlich für die zeitliche Auflösung von Frequenzbändern gut seien, aber wohl noch Rechenaufwändiger seine. Aber mehr als solch pauschale Sachen hab ich bisher noch nicht gefunden. Mich jetzt auf gut Glück in die Wavelets reinzulesen hab ich allerdings auch wenig Motivation. Hat hier jemand Erfahrung mit Wavelets auf kleinen Rechnern? Lohnt der Aufwand, sich damit auseinanderzusetzen?

Die DTFM-Decoder müssen doch auch ähnlich enge Frequenzen trennen, oder? Wie macht man das dort?

Marte

Reply to
Marte Schwarz

Hi Christian,

Klasse, das klingt doch genau nach dem, was ich brauche. Es gilt doch immer noch das alte "Gelbe-Seiten" Motto: "Frag mal jemand, der sich mit so was auskennt"

Vielen Dank

Marte

Reply to
Marte Schwarz

Begriff sagt mir nix.

Einzelne Frequenzlinien macht DFT. Es gibt Varianten der DFT wie chirp-Z die auch verwendet werden/wurden.

Standard ist aber wohl Zoom-FFT

MfG JRD

Reply to
Rafael Deliano

Ok, da braeuchten wir dann eine Zahl. Dollars oder Euro bei x Stueck/Jahr :-)

Damit meinte ich sowas hier:

formatting link

Nun sind die Dinger jedoch recht teuer und das war der Grund warum ich sie in meinem ganzen Leben nur einmal in ein Serienprodukt gesetzt habe. Aber: Sieh Dir mal die Cypress PSOC an, die haben oft mehrere dieser Filterbloecke auf dem Prozessor-Chip integriert. D.h. die gibt's quasi "umsonst" dabei. Ob das die Loesung fuer Dich ist haengt aber vom geforderten Stoerabstand ab, denn analoge Bausteine sitzen nicht ganz ungestraft auf einem Digital-Chip. Ist ziemlich laut da drauf.

Opamp Aktiv-Filter gehen natuerlich auch, wird aber ziemlich gross.

Ok, dann kannst Du zumindest rasten vergessen.

Manche machen das wie Christian beschrieb mit Goertzel, andere mit Wave Digital Filters (Wellendigitalfilter?). Letztere haben den Vorteil, dass Du ohne HW-Muliplizierer auskommst, also einen billigen uC nehmen kannst. Allerdings kommt mit einem 8-Bitter dabei keine Freude auf, 16 sollten es schon sein. MSP430 etwa, doch da gibt's m.W. keine S/C Filter als Beigabe. Muesstest Du abklingeln, ob runtermischen (Decimation) noch mit reinpasst. Es gibt dazu WDF App Notes bei Texas.

Goertzel ist eher was um wie bei DTMF einzelne Toene herauszufischen. Ich hatte Dich aber so verstanden, dass Du das komplette aufmodulierte Spektrum moeglichst fehlerfrei erfassen musst.

Cypress hat mittlerweile (endlich!) den Draht raus und scheint auf zwei Schienen zu gehen. 8051 8-bit Architektur fuer Steuerungen und dergleichen. Sehr vernuenftig, aber nicht fuer Deinen Fall geeignet, zuwenig Bizeps in der ALU. Du braeuchtest eher die PSoC5 Reihe mit 32Bit Prozessor und ich weiss nicht wann bei den Distis verfuegbar sein wird und was die kosten werden. Beispiel:

formatting link

Falls Du oefter solche Sachen machst, wuerde sich ein Gespraech mit einem Cypress App Ingenieur lohnen. Da kannst Du ganze Mixed-Signal Geschichten in einen Chip giessen und sogar im Nachhinein inklusive der analogen Funktionen umprogrammieren.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Wow, die erste Seite des Datenblatts liesst sich so als wenn sie alles eingebaut haetten was ihnen irgendwie eingefallen ist.

Ist das eigentlich neu das man die Teile jetzt in C programmieren kann? Ich hab da irgendwie in Erinnerung das die irgendso eine eigene Sprache hatten, weshalb ich sie bisher ignoriert habe.

Olaf

Reply to
Olaf Kaluza

Vieles basiert dabei sicher auf Feedback. Cypress legt recht grossen Wert auf Kommunikation mit den eigentlichen Entwicklern draussen bei den Firmen. Leider tun das nicht alle Firmen.

Neu ist das nicht:

formatting link

Es gab mit PSoC Express aber auch schon lange die Moeglichkeit, sich manche Loesung aus Bloeckchen am Bildschirm zusammen zu klicken und das funktionierte hinterher sogar :-)

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Hi Rafael,

Short term (fsat) fourier transformation Man nehme ein kurzes Zeitfensterchen mit n Abtastwerten, mache eine FFT daraus, verschiebe alles um m stellen und beginne aufs neue. Es folgt ein zeitlich aufgelöstes Spektrum.

Aus diesem Spektrum interessiert mich aber nur eine Frequenzlinie.

Echt, dann muss ich mir das doch noch genauer reinziehen. Ich hab das bisher so verstanden, dass immer das gesamte Spektrum mit einer Fensterbreite gerechnet wird.

Da werd ich mich wohl mal damit befassen, was jetzt am besten gehen wird. Das mit dem Goertsel schein ja auch gut zu passen.

Vielen Dank schon mal.

Marte

Reply to
Marte Schwarz

Hallo Jörg,

Die Teile kenn ich schon, aber ich begreif gerade nicht, was ich damit sollte, ausser eben schmale Filter zu bauen. Aber dann hab ich immer noch ein Signal, das mit 3 bis 8 kHz rumzappelt und dann alle ms an und abschwillt. Da hab ich noch lange keine Einhüllende.

hast Du da ne Nummer parat?

Nee, ich will eigentlich die Leistungsdichte des Spektralbereiches von 3 bis

8 kHz und die nach Möglichkeit mindestens alle 50 µs oder schneller.

So viel Peripherie gibts da nicht, im Moment ist ein ADuC7020 am Werkeln. Allerdings macht der im Moment nicht viel mehr, als Daten sammeln und auf SD zu loggen. Idealerweise sollte der das Ganze mal in realtime auswerten, oder zumindest die Einhüllende extrahieren und weitergeben. Wobei dann ists eh nicht mehr weit, die Algoritmik wird dann auch noch passen, das wird das kleinste werden.

Marte

Reply to
Marte Schwarz

Ich meinte ein Filter nach der AM-Gleichrichtung. Da hast Du dann nur noch 0-2kHz, d.h. Du kannst oberhalb von 2kHz hart kappen.

formatting link

Dann noch eine aeltere, DTMF Erkennung, ab Seite 27:

formatting link

Hmm, in einem anderen Post schriebst Du aber jetzt von nur einer Frequenzlinie, was immer das an spektraler Breite heissen mag. Da waere Goertzel ganz brauchbar, fuer die Bestimmung der Leistungsdichte in einem kompletten 1-2kHz breiten Spektralbereich eher nicht.

Oh, edel, man goennt sich ja sonst nichts. Ok, ausser vielleicht noch einen Benz in der Garage :-)

Da sollten die Cypress PSoC5 preislich (hoffentlich) drunter kommen. Wenn Du soviel Budget hast, dann ist die digitale Filterung und Verarbeitung im einstelligen kHz Bereich durchaus machbar. Hierzulande nehmen die Leute dafuer einen billigen ADC plus einen $5-6 DSP, TMS320 Serie oder so.

Da Du insgesamt unter 1W kommen moechtest, sieht das am Ende eher nach uC aus. Wobei TMS320 das auch packen koennen. Die sind fuer solche Jobs praedestiniert und es gibt bereits fertig vorgekaute Library Module fuer alle moeglichen Funktionen. Nun kommt es noch darauf an wie die Anzeige laufen soll. LCD liefe wieder auf einen MSP430 mit LCD-Treiber oder so raus, denn HD44780-basierte LCD Text-Module sind teuer wenn man sie nicht in Asien besorgt.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Bedenke allerdings, daß der normalerweise recht schmalbandig ist. Auf der englischsprachigen Wikipedia-Seite vom Görtzel-Algorithmus gibt es übrigens Pseudo-Code, den ich mal c-ifiziert habe. Mit geeigneten Windowing-Funktionen kannst du die Bandbreite noch ein wenig beeinflussen, falls du nicht bei jedem Sample updatest.

Ich hatte das mal ausprobiert und per Gnuplot dann jeweils die Filterkurven anzeigen lassen und als eine schöne Lösung gefunden war, hatte ein Kollege das dann für eine DSP implementiert, für 8 Kanäle parallel bei 96 kHz für einige Bins parallel je Kanal, und die DSP konnte nebenbei noch allerlei andere Dinge machen.

Mit deinem ADuC7020 mit Arm7 und 40 MHz Takt sollte das aber überhaupt kein Problem sein, da kannst du wohl auch floats verwenden und das ohne Tricks in C programmieren.

Du könntest natürlich auch einfach einen digitalen IIR Bandpassfilter mit nachgeschaltetem digitalen Gleichrichter implementieren, was eigentlich dasselbe wie der Görtzel-Algorithmus ist, aber wenn es ein Filter höherer Ordnung ist, hättest du noch besseren Einfluss auf die Filterkurve. Eine Windowing-Funktion brauchst du in dem Fall auch nicht.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Wird für Sprachsignale so gemacht daß ein Zeitfenster von z.B.

10msec um 50% weiterbewegt wird. Das wäre aber das "Rechteckfenster". Normallerweise wird da noch Hammingfenster drübergelegt.

Die löst nicht das Problem des Trägers. Sie ermöglicht nur feine Frequenzauflösung von Frequenzbändern ohne unpraktisch lange FFT-Blöcke.

MfG JRD

Reply to
Rafael Deliano

Die digitalen 2pol Allpol-Filter wären in Heft 13 meiner Zeitschrift (

formatting link
(kostenpflichtig)) beschrieben. Dort auch simples Beispiel aus altem Rockwell-Modem durchgekaut wie man ehedem so 2100 Hz Ton erkannte.

MfG JRD

Reply to
Rafael Deliano

Es gibt in der Sprachanalyse ein ähnliches Problem. Pitch im Bereich von 50 - 300 Hz regt Vokaltrakt an und hinten kommt Frequenzgemisch "Vokal" raus. Anregungssignal ist kein Sinus sondern ca. dreieckiges Signal, hat also Oberwellen. Dieses periodische Frequenzgemisch taucht langsam aus Rauschen ( "Konsonant" ) auf, bleibt einige 100msec konstant ( Pitch eiert natürlich etwas rum ) und versinkt dann wieder im nächsten Konsonanten. Für einen Vocoder muß man die Pitchfrequenz bestimmen können. Aufwandsarme Verfahren wurden deshalb in den 60ern ( Gold ) und

70ern ( AMDF ) entwickelt. Gold lief typisch auf einem 8080 Mikroprozessor in Echtzeit, bei AMDF würde ich ähnliches vermuten. Wie genau man die Frequenz bestimmen kann hängt natürlich auch von der samplerate ab, nichtnur wie verrauscht das Signal ist und wieviele Oberwellen es hat.

MfG JRD

Reply to
Rafael Deliano

Jörg meint anscheinend die normale AM-Demodulation, wie beim guten alten Mittelwellenradio. Das sollte hier doch auch gehen:

Wenn Du ein Signal zwischen 500 und 2000 Hz auf einen Träger zwischen 3 und 8 kHz amplitudenmoduliert hast, kriegst Du's wieder raus, in dem Du dieses Signal mit einer normalen Diode gleichrichtest und danach den Träger über ein entsprechendes Bandpaßfilter (3..8 kHz) gegen Masse raussiebst. Wenn Du das übriggebliebene Signal noch über ein zweites Bandpaßfilter (500..2000 Hz) auskoppelst, bleibt das übrig, was Du brauchst.

Es gibt sehr ähnliche, ebenfalls rein analoge Verfahren, die bei der Wälzlager- und Getriebediagnose verwendet werden.

Da Du eh schon mit FFTs rumspielst: hier wird auch manchmal die Cepstrumanalyse eingesetzt. Sehr verkürzt: ein Cepstrum ist die FFT der FFT und zeigt an, daß im Signal irgendwo Modulationen auftreten. Da Du offenbar nur interessiert bist, ob das Signal amplitudenmoduliert ist, könnte das vielleicht auch funktionieren.

Viele Grüße Steffen

Reply to
Steffen Buehler

Hi Jörg,

Na ja, nach der Vollwellengleichrichtung wird es ja auch frequenzverdoppelt, also hätte ich von 2 kHz bis 6 kHz abstand, da sollte in der Tat was gehen. muss ich mir bei Gelegenheit mal ansehen. Das müsste dann aber wohl nach dem Bandpass laufen, am Besten digital, wenn ich schon digital gleichrichte.

Uff, das wird ja richtig viel Lesestoff für die nächste Zeit.

In dem Bereich zwischen 3 und 8 kHz kommen Schwingungspakete, die eine Trägerfrequenz haben, die allerdings "chirpt", wie ich das gestern gelernt habe. jedes Schwingungspaket beginnt mit einer Frequenz von z.B. 3 kHz und endet bei ca 3,5 kHz. In einem anderen Umfeld wird das Schwingungspaket bei

6 kHz beginnen und bei 6,7 kHz enden. Höhere Frequenzanteile als 8 kHz erwarte ich eigentlich nicht mehr unter 3 kHz auch nicht. Bei einer FFT habe ich in den Bändern 1 und 2 diese Frequenzen gut abgedeckt. Wenn ich deren Amplitudenwerte addiere kommt ein Signal heraus, das eigentlich ganz tauglich ist. Es fängt die relevanten Signalanteile ein und "Extrahiert diese genau so wie ich es will. Ich rechne nur dafür jedesmal ein komplettes Spektrum, quasi um die allermeisten Werte davon einfach zu verwerfen. Diese Schwingungspakete kommen in der Regel alle 0,5 ms bis 2 ms und sehen recht "rund" aus. Wenn sie zu oft kommen gibt es eben Überlagerungen, die jedoch auflösbar bleiben. Unser STFT-Fenster (Hamming gefenstert) hat derzeit eine Länge von AFAIR ca. 2 ms und wird alle ca. 50 µs gerechnet.

Die Idee war jetzt, einenAlgorithmus zu finden, der mir quasi nur die Leistungsdichte des interessierenden Frequenzbereiches ermittelt, wie in der FFT, nur eben ohne alle anderen Spektralanteile mitrechnen zu müssen.

Sooo teuer ist der jetzt auch wieder nicht. Das ist unser "Arbeitspferd" im Labor. Wenns darauf läuft, dann kann man auch schön abschätzen, welche Prozessorleistung man wirklich braucht.

Darüber mach ich mir erst Gedanken, wenn ich besser weiss, was ich an Rechenleistung wirklich brauche. Ein Bekannter fährt gerade voll auf M16 ab. Die seien saubillig für das, was sie können. Aber solange ich nicht weiss, was ich wirklich brauche, nehm ich mal das, was hier liegt und wechsle erst, wenns zu eng wird oder ich dann in Stückzahlen gehen kann.

zzgl RAM und Platinenplatz und und und... billiger wird das auch nicht. Selbst wenn ich bei der ADuC Serie bleiben sollte (die 12-Bit AD-Wandler sind einfach klasse), in dem Fall komme ich ohne DAC aus, also reicht mir z.B. der 7022 lustig, für $4 ist man bei Stückzahlen dabei. Das ist noch drin. Alternativ lässt sich natürlich dann auch NXP abklopfen, der Code sollte dann schnell portiert sein.

Gar nicht ;-) Am liebsten kommt hinten eine Leitung raus, die Sagt: Gut oder schlecht. Dann ggfs eine Schnittstelle alias UART-über ein Blauzahnmodul oder so, mal sehen. Zuerst muss die eigentliche Funktion laufen. Wenn sich dann herausstellt, dass der BT-Stack auch noch auf den µC passt und damit das BT-Modul billiger wird... Alles später.

Marte

Reply to
Marte Schwarz

Hallo Frank,

Schade, ich dachte schon... Schamalbandig ist ungünstig für mich. Ich brauch es relativ breit, aber dann doch gern steil nach beiden Seiten.

Ich denke ich muss da erst mal damit Herumspielen...

So sicher bin ich mir da nicht. Floats werden in jedem Fall vermieden. Lieber lege ich das Teil zwischendurch schlafen oder such mir was sparsameres. Zum Schluß ist jedes benötigte MIPS Akkulaufzeit/Baugröße...

Das werde ich mir wohl als nächstes ansehen, das sollte sich ja auf PC-Ebene schnell testen lassen. Ich hab nur gerade mal wieder einen non maskable Interrupt auf ein anderes Projekt :-(

Ich hab jetzt aber mal einige Anregungen, die in jedem Fall schon mal Arbeit genug bringen. Mal sehen, was die Diskussion noch zu Tage bringt.

Danke Marte

Reply to
Marte Schwarz

Hi Rafael,

Danke, ich habs mal in die Bookmarkliste und auch ein paar Seiten auf Totes Holz gebannt, damit bleibt es in der Regel präsenter, als in der virtuellen Ablage.

Marte

Reply to
Marte Schwarz

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.