Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Spectrum analyse

Pagina: 1
Acties:
  • 136 views sinds 30-01-2008
  • Reageer

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
k'ben niet helemaal zeker of ik dit topic hier moet posten of bij software.
Het gaat over de analyse van een zendsignaal. (daarom -> electronica)
Ik ben een componentje in delphi aan het schrijven die een zendsignaal kan analyseren. Het componentje bepaald de draaggolf en de zijbanden.

Maar ik wil ook de bandbreedte meten. Het probleem is alleen er bestaan meerdere soorten window methode. maar vrijwel allemaal beinvloeden ze de bandbreedte van het signaal in het spectrum.
Voor de mensen die niet zo thuis zijn in de window methodes :
http://en.wikipedia.org/wiki/Window_function

Maar welke window kan ik het beste gebruiken? of moet ik juist geen window gebruiken?
of zijn er bepaalde correctie factors die de "fout" kunnen compenseren?

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
blijkbaar heeft niemand hier kaas van gegeten?

  • bitwarrior
  • Registratie: Oktober 2004
  • Laatst online: 06-11-2023

bitwarrior

Ride On

hilbren schreef op maandag 19 december 2005 @ 15:48:

Maar welke window kan ik het beste gebruiken? of moet ik juist geen window gebruiken?
of zijn er bepaalde correctie factors die de "fout" kunnen compenseren?
Het hangt er vanaf wat je wil doen met de spectrale analyse. Er is meestal een tradeoff tussen de breedte van de "hoofdlob" (resolutie) en de spectrale zuiverheid buiten de "hoofdlob" (dynamic range).

Als je een kleine spectrale component naast een grote hoofdcomponent wil bekijken heb je dus een window met een hoge dynamic range nodig. Wil je onderscheid kunnen maken tussen twee (of meer) vlak bij elkaar liggende componenten, dan moet je voor resolutie gaan.

Uit de grafieken op de geciteerde site kun je dan wel een keuze maken.

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
het gaat mij eigenlijk om 1 zend signaal waarvan ik de bandbreedte wil bepalen.

  • Cassettebandje
  • Registratie: Juli 2002
  • Laatst online: 21-11 20:56

Cassettebandje

SA-C90 TDK

Het hangt er een beetje vanaf hoe jouw signaal eruit ziet en wat je nog wel en niet kunt en wilt rekenen tot het signaal. Volgens dat wikipedia artikel zijn bepaalde windows geschikter voor een kleine bandbreedte en andere voor een grote. Je zou het eerst kunnen proberen zonder window en kijken of je resultaten voldoen. Zo niet kun je eens naar de verschillende windows gaan kijken.

  • zerok
  • Registratie: November 2001
  • Laatst online: 23:45

zerok

geen

Ik ben geen expert in zendsignalen maar het klinkt een beetje of je vraag niet duidelijk is.

Zowiezo is het niet duidelijk om hoe het signaal verstuurt word het gaat geluid? IR? misschien dat dat een idee kan geven over welk soort window.
Verder gelden er bij dit soort dingen ook vaak mee hoe nauwkeurig wil je het en wat werkt. Ik denk dat je met een beetje extra info moet komen.

"never argue with idiots they drag you down to their level and beat you with experience" dilbert


  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
voor een spectrum analyse maakt het niks uit of je nu een zendsignaal neemt of geluid of licht.
spectrum == spectrum
als ik er (softwarematig) een zuivere sinus in gooi dan wil ik een lijntje zien en geen heuvel. dat is het hele probleem eigenlijk...

Verwijderd

begrijp ik goed dat je wil aantonen op een grafisch plaatje hoe breed of groot je signaal kan wezen voor de amplitude van je signaal

maw wat je allemaal over je draaggolf heen kan moduleren tot het niet meer past ??

  • Steefph
  • Registratie: Juli 2002
  • Laatst online: 18-11 12:42
Ik denk persoonlijk dat dit een beste opgave gaat worden. Je hebt hier speciaal software pakketten voor (bijvoorbeeld DasyLab) en daar kun je dus ook externe inputs aan vast knopen.

Ik weet niet hoeveel tijd je hieraan wilt besteden maar ik zou als ik jou was eens naar dit programma kijken.

Of gaat het puur om het type window dat je kan gebruiken?

[ Voor 10% gewijzigd door Steefph op 20-12-2005 17:33 ]

Alles is terug te redeneren naar 4


  • Cassettebandje
  • Registratie: Juli 2002
  • Laatst online: 21-11 20:56

Cassettebandje

SA-C90 TDK

hilbren schreef op dinsdag 20 december 2005 @ 16:34:
als ik er (softwarematig) een zuivere sinus in gooi dan wil ik een lijntje zien en geen heuvel. dat is het hele probleem eigenlijk...
Tja, dat gaat dus niet lukken volgens het wikipediaverhaal. Er zijn heel wat mooie windows, maar je krijgt er nooit een lijntje uit op de frequentie van die sinus die je erinstopt omdat je nu eenmaal een beperkt aantal samples gebruikt. Als je nu precies op een veelvoud van de frequentie van de sinus zou samplen, alleen dan krijg je een lijntje. Maar het is (als ik hebt goed heb) wel zo dat hoe meer samples je neemt hoe beter het er op lijkt. Daarnaast kan "zero padding" je helpen. Je voegt een reeks nullen toe aan het einde van je signaal. Zo neemt het aantal resultaatwaarden uit je fft berekening toe. Daarmee wordt het resultaat gladder. Een lijntje zul je daar niet mee krijgen, maar het ziet er wel beter uit.

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
zero padding... het klinkt een beetje vaag moet ik eerlijk zeggen.
nullen toevoegen voor een beter resultaat, maar ik zal het eens testen.

Ik heb nu een discreete fourier geschreven in delphi en het werk erg goed.
Ook heb ik een aantal windows toegevoegd, ik heb ook ontdekt dat sommige windows een vrij constante afwijking hebben.

  • Cassettebandje
  • Registratie: Juli 2002
  • Laatst online: 21-11 20:56

Cassettebandje

SA-C90 TDK

Idee van zero padding is dat je uit een fft net zoveel getallen krijgt als dat je er in stopt. Het toevoegen van nullen aan het einde van je signaal voegt geen informatie toe maar maakt je resultaatgrafiekje mooier (en meestal duidelijker).

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
ik heb het zojuist even geprobeert, maar het lijkt absolute geen effect te hebben :?

hier staan een aantal voorbeelden van zero padding:
http://zone.ni.com/devzon...4C2952C1A86256CA80053F322

maar het resultaat wat hun met zero padding behalen, haal ik met mijn dft zonder zeropadding...

[ Voor 59% gewijzigd door hilbren op 28-12-2005 12:09 ]


  • savale
  • Registratie: Oktober 2000
  • Laatst online: 02:42
Ik denk dat ik weet wat je probleem is. Een paaltje bij de juist frequentiebin krijg je alleen als je uitgaat van een continue functie. Als je een niet continu signaal hebt en daar het spectrum van bekijkt dan zul je inderdaad geen paaltjes krijgen, maar je krijgt dan spectrale lekkage. Door een window (hier bijv hanning) te leggen over je bron signaal in deze vorm:

http://www.c3.lanl.gov/wi...bfiles/images/hanning.jpg

Dan kap je de randjes af waardoor deze uiteindelijk minder mee gaan tellen. Hierdoor beperk je de spectrale lekkage. Nadeel is dat je amplitude niet helemaal meer klopt.

In het geval dat je zelf de controle hebt over het inputsignaal moet je dit doen: Zorg ervoor dat de complete periode van het signaal wordt afgemaakt. Zodat het signaal als je deze aan elkaar zou plakken continu zou zijn. Tevens moet je dan een frequentie kiezen die precies in een frequentiebin valt.

succes

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
hanning ken ik, ik heb ook blackman/harris hamming en bartlett geprobeert, deze geven allemaal wel aardige resultaten.
ik ben ook wat verder gegaan met onderzoeken of er een vaste correctie waarde is voor de bandbreedte: Alles wat onder de 400khz bandbreedte zit is bij mij onvoorspelbaar, de rest is met een vrij constante waarde wel te corrigeren.

Verwijderd

Waarom al die moeite?

Als je signaal nog analoog is moet je het eerst even digitaliseren, maar dat is waarschijnlijk de vorm waarin je het al hebt.
Dan transformeer je dat signaal naar het fourierdomein (fft in matlab). Nu heb je een "getal" per "frequentie". Dat getal is evenredig met de energie van uw signaal voor die frequentie. Als je nu die getalletjes mooi en juist plot in een grafiekje, dan kan je zo op het zicht zien waar de meeste energie van uw signaal zit. Kijk dan naar de centrale frequentie waarop je uitzendt, die zal de hoogste piek zijn.
Tel nu vanaf die centrale frequentie tot je "energie", 3 dB lager is. Die breedte in uw spectrum is nu uw bandbreedte. (ttz, de 3dB-bandbreedte, maar dat is wat meestal als bandbreedte gezien wordt. Misschie dat ze voor uw scope uit den aldi wel een 20dB-bandbreedte gaan uitvinden omdat dat mooier staat op hun folder)

Als je de centrale frequentie van uw signaal kent kan je een heterdyne filter simuleren en eerst uw signaal transformeren zodat de centrale frequentie in het midden komt te liggen. Als je dan op uw fft-beeld kijkt hoef je enkel op zij te kijken wanneer uw signaalsterkte 3dB lager is, je kijkt welke frequentie daar staat en je kent de bandbreedte (in frequentie, maar neem dan een eentje en deel het door uw frequentie en je hebt uw bandbreedte in het tijdsdomein)

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
Verwijderd schreef op donderdag 29 december 2005 @ 10:42:
Waarom al die moeite?

Als je signaal nog analoog is moet je het eerst even digitaliseren, maar dat is waarschijnlijk de vorm waarin je het al hebt.
Dan transformeer je dat signaal naar het fourierdomein (fft in matlab). Nu heb je een "getal" per "frequentie". Dat getal is evenredig met de energie van uw signaal voor die frequentie. Als je nu die getalletjes mooi en juist plot in een grafiekje, dan kan je zo op het zicht zien waar de meeste energie van uw signaal zit. Kijk dan naar de centrale frequentie waarop je uitzendt, die zal de hoogste piek zijn.
Tel nu vanaf die centrale frequentie tot je "energie", 3 dB lager is. Die breedte in uw spectrum is nu uw bandbreedte. (ttz, de 3dB-bandbreedte, maar dat is wat meestal als bandbreedte gezien wordt. Misschie dat ze voor uw scope uit den aldi wel een 20dB-bandbreedte gaan uitvinden omdat dat mooier staat op hun folder)

Als je de centrale frequentie van uw signaal kent kan je een heterdyne filter simuleren en eerst uw signaal transformeren zodat de centrale frequentie in het midden komt te liggen. Als je dan op uw fft-beeld kijkt hoef je enkel op zij te kijken wanneer uw signaalsterkte 3dB lager is, je kijkt welke frequentie daar staat en je kent de bandbreedte (in frequentie, maar neem dan een eentje en deel het door uw frequentie en je hebt uw bandbreedte in het tijdsdomein)
of jij begrijpt mijn verhaal niet of ik begrijp jou verhaal niet.
ik wil automatisch de bandbreedte bepalen (zoals jij boven beschrijft) in mn zelf geschreven delphi prog. Deze geeft vrijwel dezelfde resultaten als matlab.
Echter als ik er een zuivere sinus in gooi (testsignaal) dan is de banbreedte theoretisch "0" . Maar zelfs met alle bovengenoemde methode is dit echter niet het geval.
je kan mij niet wijsmaken dat een sinus van 1MHz een bandbreedte heeft van 100khz.

[ Voor 4% gewijzigd door hilbren op 29-12-2005 12:23 ]


Verwijderd

Een zuivere sinus moet jouw 1 piek geven in het spectrum, op de frequentie van die sinus

de bandbreedte is dan inderdaad 0, of beter limiet 0
de piek kan je beschrijven als een dirac-functie. Daar je een wikipedia-liefhebber bent klik op http://en.wikipedia.org/wiki/Dirac_delta_function voor meer informatie over een dirac-functie

Als je een fft doet van een zuivere sinus, mag je slechts 1 piek uitkomen in uw frequentiedomein. Kom je meer pieken uit, dan zit er ruis op uw signaal. Waarschijnlijk heb je uw sinus met matlab gemaakt en heb je deze opgeslagen als digitale waarden, maar wanneer je te weinig digitale waarden hebt, dan heb je geen zuivere sinus maar een sinus + kwantisatieruis. De andere pieken die je zal zien zijn dergelijk ruis.

Maar als je voldoende samplet mag je niet teveel last hebben van quantisatieruis (voor bandgelimiteerde signalen heb je genoeg als de sample-frequentie minstens dubbel zo groot is als de bandbreedte van uw signaal.

En verder wil 3dB lager zeggen dat als je origineel x is, dan is x/wortel(2) 3dB lager.

Verder lees ik dat je een zendsignaal wil analyseren, zorg er dan ook voor dat je weet hoe uw signaal gemoduleerd is (AM of FM), of als het gewoon ongemoduleerd doorgestuurd wordt zoals een analoge telefoonlijn (enkele jaren terug, voor ze digitale centrales plaatsten).


[met samplen bedoel ik bemonsteren, ik sla het Engels en het Nederlands een beetje door elkaar]

[ Voor 4% gewijzigd door Verwijderd op 29-12-2005 15:13 ]


  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
waarschijnlijk ligt het probleem dan bij de digitale ruis

ik heb nu een test signaal van 1,5Mhz en maar 1024 samples. ik heb ook al geprobeert om samples achter elkaar te plakken maar dit moet zeer nauwkeurig gebeuren (eigenlijk niet te doen)
en ik heb geprobeert om meerdere spectrums uit te middelen met elkaar. Dit geeft ook geen beter resultaat...

Verwijderd

1,5 MHz is wel erg hoog voor een signaal, dat krijg je nooit verzonden. Je kan veel beter een lager signaal nemen (bv. minder dan 20 kHz voor audio) die je gaat moduleren op een draaggolf die dan wel 1,5 MHz kan zijn.

Een voorbeeld van AM modulatie :

Je neemt met een micro geluid op (< 20 kHz, veel meer dan dat kan je toch niet horen). Je gaat dit signaal gaan digitaliseren. Met 40000 samples per seconden heb je voldoende om foutloos te kunnen decoderen.

Nu kan je dit signaal voorstellen als
a(t) = A*sin(omega_a*t + phi)

Nu wil je dat op een draaggolf op frequentie c gooien, de draaggolf is
c(t) = C*sin(omega_c*t)

Als je nu uw a(t) samentelt met C heb je uw signaal gemoduleerd en bekom je
y(t) = (C + A*sin(omega_a*t+phi))*sin(omega_c*t)

Als je bezig bent met bv. een AM-signaal krijg je dat binnen op uw ontvanger en vooraleer je uw signaal kan lezen moet je het natuurlijk eerst gaan demoduleren.

Maar da kan simpel, vermenigvuldig y(t) met uw draaggolf sin(omega_c*t) en hetgeen zal overschieten is ongeveer a(t) en dat is het signaal dat je verzonden hebt.


Dat is eigenlijk meestal zo als met zegt te zenden een een bepaalde frequentie, dan is dat altijd zo (of FM of een andere soort modulatie). Als je dus 1,5 MHz als 'zender' hebt, dan is dat zeker en vast de draaggolf waarop uw signaal zelf gemoduleerd staat. Ga het dus eerst demoduleren vooraleer je het gaat analyseren.


Vooraleer je gaat demoduleren heb je natuurlijk het probleem dat ook andere signalen die niet tot uw audio-signaal behoren ook kunnen gedemoduleerd worden, daarom zal met eerst een filter gebruiken waarmee je alles wegfilterd behalve alles van 1,5 - x MHz tot 1,5 + x MHz. Dan zal enkel dit deel gemoduleerde worden. Normaal kan je voor 2*x ongeveer anderhalve keer de bandbreedte nemen, maar die ken je nu niet. Wat je kan is een gokje wagen wat uw bandbreedte zal zijn, demoduleren en zien of het correct is, indien niet kan je uw x vergroten of verkleinen.


Maar als je alles eens duidelijk wil verstaan zou je moeten ergens aan een cursus signaaltheorie of signaalverwerking proberen geraken.

  • hilbren
  • Registratie: Augustus 2000
  • Laatst online: 14-11 13:52
hbo elektronica, dit ken ik allemaal al.
je mist het doel van deze discussie een beetje...het signaal kan me echt niks schelen.
ik heb een test signaal omdat ik iets moet meten, in dit geval mijn spectrum analyse...

testsignaal:
1,5Mhz (sinus)

sample:
100 MS/sec
sample lengte 1024

spectrum:
-3dB bandbreedte 150khz en dit klopt niet, theoretisch hoort dit bijna nul te zijn

daarom heb ik dus iets nodig waarmee ik dit correct kan meten...? simpel 150khz van die bandbreedte afhalen is niet mogelijk!

misschien was mijn uitleg hierboven wat onduidelijk?

[ Voor 57% gewijzigd door hilbren op 03-01-2006 08:40 ]


Verwijderd

veel hoger samplen of een testsignaal nemen met een veel lagere frequentie. Anders kan je niet van uw quantisatieruis af.

  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 22-11 19:33
Mag ik eens vragen op welke manier je je samples neemt? Anderhalve megahertz valt nog wel mee, maar dan moet je meetsysteem (om een beetje goed te kunnen meten) toch heel wat sneller draaien (volgens Nyquist moet je samplefrequentie minimaal het dubbele zijn van het grootste frequentiecomponent in je te meten signaal. Je moet dus ook alle hogere frequenties dan 0.5* de samplefrequentie wegfilteren!!!) . Als je componenten, en vooral je print, daar niet op voorzien zijn, dan ben je eigenlijk de fout van je meetschema aan het meten. (niet voor niets dat een spectrumanalyser een prijskaartje heeft van 10.000 en meer euro's).
Ik raad je aan eerst eens bijvoorbeeld een signaal van 1 kHz te meten, en dit te samplen op 50kHz ofzo. Eenmaal je dat perfect kan, dan pas kan je proberen op hogere frequenties je gang te gaan.

Zolang we niet weten waar je je samples vandaan haalt, en hoe de kwaliteit ervan is, moeten we eigenlijk niet zoeken naar fouten in je software.

[ Voor 13% gewijzigd door naftebakje op 07-01-2006 13:34 ]

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.

Pagina: 1