Transformation de Fourier rapide - nombre non entier de cycles dans l'ouverture FFT

15

Il y a quelques excellents fils de discussion et réponses sur ce site (eletronics.se) sur la théorie des transformées de Fourier. J'ai essayé d'implémenter la même chose dans un outil de simulation (MS Excel :)).

J'ai quelques problèmes d'interprétation et de mise en œuvre à ce sujet. J'essaie d'analyser une forme d'onde de tension de 50 Hz. Cependant, les données ci-dessous ne sont que des données factices générées qui tentent d'établir un cadre conceptuel pour la mise en œuvre sur une mémoire et un processeur à faible coût intégré à 16 bits à contrainte de puissance de traitement.


ETA (30 mai 2012)

Version TL; DR:

Il va sans dire sur electronics.se mais j'utilise un processeur embarqué contraint en mémoire et en puissance de traitement.

Il y a ici quelques questions qui restent sans réponse:

  1. Comment le fenêtrage est-il effectué sur les échantillons que j'ai sans augmenter de manière significative l'empreinte mémoire de l'algorithme? Je voudrais que ce soit une description de base étape par étape, car je suis assez nouveau sur DSP.
  2. Pourquoi les amplitudes ont-elles été divisées par deux lorsque j'ai interpolé 41 échantillons pour en dériver 32, mais sont restées telles qu'elles étaient (sauf pour un peu de bruit) lorsque je les ai interpolées pour en dériver 64?

Je déclare une prime sur la question avec l'espoir que j'obtiendrai d'excellentes réponses qui seront exploitables pour un novice en DSP.


Expérience 1:

Entrée du domaine temporel

J'ai généré une onde sinusoïdale en utilisant pour générer 64 échantillons. J'ai ensuite ajouté 30% de harmonique, 20% de harmonique, 15% de harmonique, 10% de harmonique et 20% de harmonique. Cela a conduit à ces échantillons:péché(2nπ/64)3r5thseptth9th11th

0, 0.628226182, 0.939545557, 0.881049194, 0.678981464, 0.602991986, 0.719974543, 
0.873221372, 0.883883476, 0.749800373, 0.636575155, 0.685547957, 0.855268479, 
0.967780108, 0.904799909, 0.737695292, 0.65, 0.737695292, 0.904799909, 0.967780108, 
0.855268479, 0.685547957, 0.636575155, 0.749800373, 0.883883476, 0.873221372, 
0.719974543, 0.602991986, 0.678981464, 0.881049194, 0.939545557, 0.628226182, 0, 
-0.628226182, -0.939545557, -0.881049194, -0.678981464, -0.602991986, -0.719974543, 
-0.873221372, -0.883883476, -0.749800373, -0.636575155, -0.685547957, -0.855268479, 
-0.967780108, -0.904799909, -0.737695292, -0.65, -0.737695292, -0.904799909, 
-0.967780108, -0.855268479, -0.685547957, -0.636575155, -0.749800373, -0.883883476, 
-0.873221372, -0.719974543, -0.602991986, -0.678981464, -0.881049194, -0.939545557,
-0.628226182

Et cette forme d'onde:

Domaine temporel Forme d'onde 64 échantillons période 64

J'ai pris une DFT de ces échantillons basée sur un algorithme Radix 2 et obtenu ces valeurs:

0, -32i, 0, -9.59999999999999i, 0, -6.4i, 0, -4.79999999999999i, 0, -3.20000000000001i,
0, -6.4i, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6.4i, 0, 3.19999999999999i, 0, 4.8i, 0,
6.4i, 0, 9.60000000000001i, 0, 32i

En prenant les valeurs absolues des nombres complexes ci-dessus comme rapport au fondamental (2e valeur) et en ignorant les informations de phase (s'il y en avait), j'ai obtenu les amplitudes des composantes harmoniques injectées exactement comme injectées.

Représentation du domaine fréquentiel

entrez la description de l'image ici

Jusqu'ici tout va bien.


Expérience 2:

Entrée du domaine temporel

J'ai de nouveau généré une onde sinusoïdale en utilisant pour générer 64 échantillons. Pourquoi 41? Parce que dans la mise en œuvre réelle, mes microcontrôleurs ADC échantillonnent sur un multiple de l'oscillateur externe, et je n'ai que quelques types de cristaux disponibles. J'ai ensuite ajouté 30% de harmonique, 20% de harmonique, 15% de harmonique, 10% de harmonique et 20% de harmonique. Cela a conduit à ces échantillons:péché(2nπ/41)3r5thseptth9th11th

0, 0.853079823, 0.857877516, 0.603896038, 0.762429734, 0.896260999, 0.695656841, 
0.676188057, 0.928419527, 0.897723205, 0.664562475, 0.765676034, 0.968738879, 
0.802820512, 0.632264626, 0.814329015, 0.875637458, 0.639141079, 0.696479632, 
0.954031849, 0.50925641, -0.50925641, -0.954031849, -0.696479632, -0.639141079, 
-0.875637458, -0.814329015, -0.632264626, -0.802820512, -0.968738879, -0.765676034, 
-0.664562475, -0.897723205, -0.928419527, -0.676188057, -0.695656841, -0.896260999, 
-0.762429734, -0.603896038, -0.857877516, -0.853079823, -6.87889E-15, 0.853079823, 
0.857877516, 0.603896038, 0.762429734, 0.896260999, 0.695656841, 0.676188057, 
0.928419527, 0.897723205, 0.664562475, 0.765676034, 0.968738879, 0.802820512, 
0.632264626, 0.814329015, 0.875637458, 0.639141079, 0.696479632, 0.954031849, 
0.50925641, -0.50925641, -0.954031849 

Et cette forme d'onde:

entrez la description de l'image ici

J'ai pris une DFT de ces échantillons basée sur un algorithme Radix 2 et obtenu ces valeurs:

14.03118145099, 22.8331789450432+2.81923657448236i, -17.9313890484703-4.4853739490832i, 
-2.54294462900052-0.971245447370764i, 1.74202662319821+0.944780377248239i, 
-7.2622766435314-5.09627264287862i, -1.5480700475686-1.37872970296476i, 
-0.136588568631116-0.126111953353714i, -3.99554928315394-5.93646306363598i, 
-0.840633449276516-1.60987487366169i, -0.373838501691708-0.955596009389976i, 
-1.326751987645-5.7574455633693i, -0.168983464443025-1.34797078005724i, 
-9.49818315071085E-003-1.20377723286595i, 0.571706242298176-4.14055455367115i,  
0.192891008647316-0.865793520825366i, 0.457088076063747-1.22893647561869i, 
3.15565897700047-5.67394957744733i, -0.573520124828716+0.682717512668197i, 
-0.20041207669728+0.127925509089274i, -7.95516670999013E-002-1.22174958722397E-002i, 
-1.57510358481328E-002-6.44533006507588E-002i, 2.50067192003906E-002-8.46645685508359E-
002i, 5.3665806842526E-002-9.01867018999554E-002i, 7.49143167927897E-002-
8.80550417489663E-002i, 9.11355142202819E-002-8.16075816185574E-002i, 
0.103685444073525-7.25978085593222E-002i, 0.11339684328631-6.20147712757682E-002i, 
0.120807189654211-5.04466357453455E-002i, 0.126272708495893-3.82586162066316E-002i, 
0.130029552904267-2.56872914345987E-002i, 0.132228055573542-1.28943815159261E-002i, 
0.1329519244939, 0.132228055573544+1.28943815159441E-002i, 
0.130029552904267+2.56872914345769E-002i, 0.126272708495892+3.82586162066264E-002i, 
0.12080718965421+5.04466357453468E-002i, 0.113396843286315+6.20147712757588E-002i, 
0.103685444073529+7.25978085593135E-002i, 9.11355142202805E-002+8.16075816185583E-002i, 
7.4914316792795E-002+8.80550417489592E-002i, 5.36658068425271E-002+9.01867018999563E-
002i, 2.50067192003947E-002+8.46645685508275E-002i, -1.57510358481296E-
002+6.44533006507526E-002i, -7.95516670999005E-002+1.22174958722402E-002i, 
-0.20041207669728-0.127925509089278i, -0.573520124828709-0.682717512668206i, 
3.15565897700049+5.67394957744733i, 0.45708807606375+1.22893647561869i, 
0.192891008647318+0.865793520825373i, 0.571706242298199+4.14055455367114i, 
-9.49818315070294E-003+1.20377723286595i, -0.168983464443023+1.34797078005724i, 
-1.32675198764498+5.75744556336931i, -0.373838501691692+0.955596009389972i, 
-0.840633449276515+1.6098748736617i, -3.99554928315393+5.93646306363599i, 
-0.136588568631125+0.126111953353722i, -1.54807004756858+1.37872970296476i, 
-7.26227664353139+5.09627264287866i, 1.7420266231982-0.944780377248243i, 
-2.54294462900053+0.971245447370785i, -17.9313890484703+4.48537394908326i, 
22.8331789450432-2.81923657448243i

Représentation du domaine fréquentiel

entrez la description de l'image ici

Les grandeurs des nombres complexes ci-dessus ne révèlent rien que je puisse déduire des valeurs injectées dans le domaine temporel.


Expérience 3

Entrée dans le domaine temporel:

J'ai maintenant pris la même forme d'onde et zéro l'a complétée, c'est-à-dire que tous les échantillons au-delà de 41 ont été mis à zéro. Donc, ce qui suit est l'entrée du domaine temporel:

0, 0.853079823, 0.857877516, 0.603896038, 0.762429734, 0.896260999, 0.695656841,  
0.676188057, 0.928419527, 0.897723205, 0.664562475, 0.765676034, 0.968738879, 
0.802820512, 0.632264626, 0.814329015, 0.875637458, 0.639141079, 0.696479632, 
0.954031849, 0.50925641, -0.50925641, -0.954031849, -0.696479632, -0.639141079, 
-0.875637458, -0.814329015, -0.632264626, -0.802820512, -0.968738879, -0.765676034, 
-0.664562475, -0.897723205, -0.928419527, -0.676188057, -0.695656841, -0.896260999, 
-0.762429734, -0.603896038, -0.857877516, -0.853079823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Et la forme d'onde:

entrez la description de l'image ici

J'ai pris une DFT de ces échantillons basée sur un algorithme Radix 2 et obtenu ces valeurs:

0, 20.0329458083285-9.47487772467906i, -10.5723252177717-8.67648307596821i, 
-8.88751906208901E-002+0.354809649783859i, 3.59322342970171-0.714736578926027i, 
-3.28379151210465-4.42768029850565i, -0.232297876050463+0.434598758428557i, 
1.68672762980862+8.28636148716246E-002i, -1.54927040705738-3.7402696285012i, 
-0.551413356435698+0.608390885175318i, 0.616809338622588+0.187107067289195i, 
-0.458965526924983-3.09409425549091i, -0.966784216252588+0.645984560777537i, 
7.03082277241579E-003+4.21411299459407E-003i, 0.196179960454289-1.99184856512683i, 
-0.919089774378072+0.328855579674163i, 0.222736292145887+0.222736292145884i, 
1.23799833509466-3.45997355924453i, -3.29198268057418+0.324231994037239i, 
-0.495840326552116-0.827259606915814i, -0.434268223171498+0.649928325340974i, 
-1.13740282784196-0.168717771696843i, -8.50255402020411E-002-0.280291642522456i, 
-0.495871287837938+0.449431537929797i, -0.705190861543966-0.292099618913078i, 
-1.8498657760867E-003-3.76548829156425E-002i, -0.56327531746565+0.301076929791613i, 
-0.445444858519027-0.330364422654705i, -2.53084763487132E-002+0.12723430263342i, 
-0.608135034699087+0.152329896227613i, -0.254967975468-0.31067937701979i, 
-0.114451748984804+0.241987891739128i, -0.623647028694518, -0.114451748984793-
0.241987891739111i, -0.254967975467992+0.310679377019776i, -0.608135034699088-
0.152329896227612i, -2.53084763487126E-002-0.127234302633416i, 
-0.445444858519022+0.330364422654704i, -0.563275317465649-0.301076929791616i, 
-1.84986577609081E-003+3.76548829156447E-002i, -0.705190861543962+0.292099618913075i, 
-0.495871287837939-0.449431537929793i, -8.50255402020378E-002+0.280291642522452i, 
-1.13740282784196+0.168717771696845i, -0.434268223171501-0.649928325340972i, 
-0.495840326552115+0.827259606915815i, -3.29198268057417-0.324231994037237i, 
1.23799833509466+3.45997355924453i, 0.222736292145887-0.222736292145884i, 
-0.919089774378077-0.328855579674149i, 0.1961799604543+1.99184856512683i, 
7.03082277241257E-003-4.21411299459534E-003i, -0.966784216252593-0.645984560777534i, 
-0.458965526924974+3.09409425549092i, 0.616809338622592-0.187107067289204i, 
-0.551413356435713-0.608390885175314i, -1.54927040705737+3.74026962850121i, 
1.68672762980861-8.28636148716247E-002i, -0.232297876050455-0.434598758428559i, 
-3.28379151210465+4.42768029850566i, 3.59322342970171+0.714736578926018i, 
-8.88751906209093E-002-0.354809649783852i, -10.5723252177717+8.67648307596825i, 
20.0329458083285+9.47487772467899i 

Représentation du domaine fréquentiel

entrez la description de l'image ici

Encore une fois, les amplitudes des nombres complexes ci-dessus ne révèlent rien que je puisse déduire des valeurs injectées dans le domaine temporel.


ETA Puisque les réponses ici m'ont indiqué le fenêtrage, j'ai fait une autre expérience et j'ai obtenu les résultats suivants après beaucoup de faux départs.

Expérience 4

Représentation du domaine temporel

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.853079823, 0.857877516, 0.603896038,
0.762429734, 0.896260999, 0.695656841, 0.676188057, 0.928419527, 0.897723205, 
0.664562475, 0.765676034, 0.968738879, 0.802820512, 0.632264626, 0.814329015, 
0.875637458, 0.639141079, 0.696479632, 0.954031849, 0.50925641, -0.50925641, 
-0.954031849, -0.696479632, -0.639141079, -0.875637458, -0.814329015, -0.632264626, 
-0.802820512, -0.968738879, -0.765676034, -0.664562475, -0.897723205, -0.928419527, 
-0.676188057, -0.695656841, -0.896260999, -0.762429734, -0.603896038, -0.857877516, 
-0.853079823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Ressemble à:

entrez la description de l'image ici

Coefficients de la fenêtre de Hamming

0.08, 0.082285843, 0.089120656, 0.100436509, 0.116120943, 0.136018076, 0.159930164, 
0.187619556, 0.218811064, 0.253194691, 0.290428719, 0.330143098, 0.371943129, 
0.415413385, 0.460121838, 0.505624157, 0.551468118, 0.597198104, 0.64235963, 
0.686503859, 0.729192067, 0.77, 0.808522089, 0.844375485, 0.877203861, 0.906680953, 
0.932513806, 0.954445679, 0.972258606, 0.985775552, 0.99486218, 0.999428184, 
0.999428184, 0.99486218, 0.985775552, 0.972258606, 0.954445679, 0.932513806, 
0.906680953, 0.877203861, 0.844375485, 0.808522089, 0.77, 0.729192067, 0.686503859, 
0.64235963, 0.597198104, 0.551468118, 0.505624157, 0.460121838, 0.415413385, 
0.371943129, 0.330143098, 0.290428719, 0.253194691, 0.218811064, 0.187619556, 
0.159930164, 0.136018076, 0.116120943, 0.100436509, 0.089120656, 0.082285843, 0.080.08, 
0.082285843, 0.089120656, 0.100436509, 0.116120943, 0.136018076, 0.159930164, 
0.187619556, 0.218811064, 0.253194691, 0.290428719, 0.330143098, 0.371943129, 
0.415413385, 0.460121838, 0.505624157, 0.551468118, 0.597198104, 0.64235963, 
0.686503859, 0.729192067, 0.77, 0.808522089, 0.844375485, 0.877203861, 0.906680953, 
0.932513806, 0.954445679, 0.972258606, 0.985775552, 0.99486218, 0.999428184, 
0.999428184, 0.99486218, 0.985775552, 0.972258606, 0.954445679, 0.932513806, 
0.906680953, 0.877203861, 0.844375485, 0.808522089, 0.77, 0.729192067, 0.686503859, 
0.64235963, 0.597198104, 0.551468118, 0.505624157, 0.460121838, 0.415413385, 
0.371943129, 0.330143098, 0.290428719, 0.253194691, 0.218811064, 0.187619556, 
0.159930164, 0.136018076, 0.116120943, 0.100436509, 0.089120656, 0.082285843, 0.08

Ressemble à ca

entrez la description de l'image ici

Leur produit (serait-ce un produit simple seulement?)

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.354380777, 0.394728179, 0.305344425, 
0.420455691, 0.53524537, 0.446861871, 0.464205711, 0.676996154, 0.691246868, 
0.537313441, 0.646518073, 0.849781485, 0.727902068, 0.589595493, 0.77723281, 
0.851346054, 0.63004965, 0.692901245, 0.953486318, 0.508965209, -0.506639943, 
-0.940461272, -0.677158316, -0.610025441, -0.816544018, -0.738336608, -0.554624971, 
-0.67788196, -0.783246782, -0.589570546, -0.484593685, -0.616290445, -0.596379223, 
-0.403818226, -0.383632569, -0.453171212, -0.350810571, -0.250866497, -0.319081647, 
-0.281638415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

Ressembler:

entrez la description de l'image ici

Représentation du domaine fréquentiel

1.01978454171002, -1.04956742046721-14.885596686908i, 
0.729587297164687+12.4883097743251i, -0.393281811348907-4.24261013057826i, 
0.761581725234628+3.2398820477072i, -0.876737136684714-3.79393194973719i, 
0.480276094694696+1.88418789653125i, -0.735142602781246-1.8175563772351i, 
1.02811278581892+2.5331069394699i, -0.584707361656586-1.41705783059227i, 
0.642189640425863+1.09157435002371i, -1.08027274688044-1.77950446999262i, 
0.690373934734768+1.16057125940753i, -0.45786262480057-0.586349217392973i, 
0.837117486838485+0.985681387258948i, -0.684335876271999-0.810862267851556i, 
0.930190039748881+0.842491953501215i, -2.11497450796919-1.82531206712061i, 
1.77660184883125+1.59539043421572i, -8.20687157856373E-003-0.123202767234891i, 
-0.280149317662962-0.244195928734504i, -0.313777442633104-0.174757927010731i, 
-5.83069102281942E-002+1.54514819958589E-002i, 0.211135948552966+0.12606544182717i, 
0.227409826380236+7.86489707052085E-002i, 2.49029866186928E-003-3.26908578232317E-002i, 
-0.204885728671642-7.60371335974082E-002i, -0.174609549526536-2.58285031988847E-002i, 
4.55943100777029E-002+3.62216126377679E-002i, 0.205437067084294+3.66474457853982E-002i, 
0.130866115437055-7.39089659931302E-003i, -8.90307098969982E-002-2.75195665163235E-
002i, -0.206016142964952, -8.90307098969848E-002+2.75195665163199E-002i, 
0.130866115437044+7.39089659931835E-003i, 0.205437067084297-3.66474457854036E-002i, 
4.55943100777004E-002-3.62216126377661E-002i, -0.174609549526531+2.58285031988801E-
002i, -0.204885728671643+7.60371335974132E-002i, 2.49029866187001E-
003+3.26908578232264E-002i, 0.227409826380234-7.86489707052067E-002i, 0.21113594855297-
0.126065441827174i, -5.83069102281978E-002-1.54514819958551E-002i, 
-0.313777442633101+0.174757927010727i, -0.280149317662962+0.244195928734507i, 
-8.20687157856043E-003+0.123202767234886i, 1.77660184883125-1.59539043421572i, 
-2.11497450796919+1.82531206712061i, 0.930190039748879-0.842491953501215i, 
-0.684335876271989+0.810862267851559i, 0.837117486838478-0.985681387258952i, 
-0.457862624800567+0.586349217392971i, 0.690373934734765-1.16057125940753i, 
-1.08027274688043+1.77950446999263i, 0.642189640425861-1.09157435002371i, 
-0.584707361656583+1.41705783059227i, 1.02811278581891-2.5331069394699i, 
-0.735142602781236+1.81755637723511i, 0.480276094694689-1.88418789653125i, 
-0.876737136684699+3.79393194973719i, 0.76158172523462-3.2398820477072i, 
-0.393281811348889+4.24261013057827i, 0.729587297164646-12.4883097743252i, 
-1.04956742046715+14.885596686908i

Ressemble à ca:

entrez la description de l'image ici

Ces résultats sont-ils valables? Parce que je ne semble toujours pas arriver à quoi que ce soit!


J'ai fait deux autres expériences et semble être incroyablement proche des résultats escomptés, mais la solution a la sensation d'un hack pour moi.

Expérience 5

3r5thseptth9th11th

0, 0.853079823, 0.857877516, 0.603896038, 0.762429734, 0.896260999, 0.695656841, 
0.676188057, 0.928419527, 0.897723205, 0.664562475, 0.765676034, 0.968738879, 
0.802820512, 0.632264626, 0.814329015, 0.875637458, 0.639141079, 0.696479632, 
0.954031849, 0.50925641, -0.50925641, -0.954031849, -0.696479632, -0.639141079, 
-0.875637458, -0.814329015, -0.632264626, -0.802820512, -0.968738879, -0.765676034, 
-0.664562475, -0.897723205, -0.928419527, -0.676188057, -0.695656841, -0.896260999, 
-0.762429734, -0.603896038, -0.857877516, -0.853079823.

J'ai fait une interpolation linéaire et en ai dérivé 64 échantillons. Ils ressemblaient à ceci:

entrez la description de l'image ici

La représentation du domaine fréquentiel par rapport à la sortie idéale souhaitée (première expérience) est la suivante:

entrez la description de l'image ici

J'ai retiré la seconde moitié de l'espace d'échantillonnage lorsque les composants se replient après la limite de Nyquist. Il y a un peu d'atténuation aux fréquences d'intérêt, mais un bruit de fond est ajouté à travers le spectre. Des explications?


Expérience 6

Identique à l' expérience 5 , mais 32 échantillons interpolés.

entrez la description de l'image ici

Comparaison des domaines de fréquence:

entrez la description de l'image ici

Les rapports sont corrects mais les amplitudes sont divisées par deux! Pourquoi?


Donc, je peux déduire, et je peux me tromper (j'espère que je le suis), que si le nombre d'échantillons dans une période de forme d'onde complète n'est pas une puissance de 2, la FFT de la même chose ne révèle rien sans une sorte d'opération , cela m'échappe pour le moment.

Étant donné que j'ai très peu de contrôle sur la fréquence d'échantillonnage, quelles sont les options qui s'offrent à moi pour récupérer les valeurs que j'ai injectées dans le domaine temporel?

Vaibhav Garg
la source
Plutôt que de publier une grande liste de chiffres, pouvez-vous publier un graphique de la sortie DFT? Il est assez difficile de se faire une idée approximative de la sortie en tant que simple liste de nombres.
Fake Name
Souhaitez-vous un graphique des grandeurs (valeurs absolues)?
Ça va maintenant?
Je pense que le fenêtrage ne fonctionne pas bien sur une seule période, tout comme le DFT sur 1 période sans fenêtrage. Il n'y a aucune trace de votre signal d'origine.
1
Je ne sais pas à quoi tu veux en venir avec la prime. Je vois juste un gros tas de complots avec des commentaires épars et des questions vagues. Comprendre les subtilités de la DFT et du fenêtrage nécessitera au moins quelques études théoriques en DSP. Je recommanderais le livre d'introduction de Lyon . Deuxièmement, quelle est votre question spécifique sur la mise en œuvre du fenêtrage? C'est une technique simple et vous comprendrez mieux comment l'implémenter dans votre système contraint.
Jason R

Réponses:

12

Bienvenue dans le fenêtrage. Rien à voir avec William G.

Le remède le plus simple qui fonctionne par force brute pour enterrer les erreurs de bruit en utilisant la moyenne est d'échantillonner un grand nombre de cycles afin que les conditions aux limites ne prédominent pas.

Je n'ai pas regardé vos résultats numériques, mais:

Regardez vos deuxième et troisième graphiques.
Les formes d'onde que vous avez affichées sont les formes d'onde en cours d'analyse.
Le premier exemple a 2 demi-cycles positifs et un négatif.
Je m'attends à ce qu'il soit très fort dans la 3e harmonique et raisonnablement dans d'autres harmoniques impaires et probablement avec des paires paires beaucoup plus basses. C'est une estimation intuitive.
Quel que soit le résultat, la transformation décrit (correctement) ce qu'elle voit et ce que vous voyez.

Je m'attendrais à ce que le deuxième exemple soit extrêmement difficile à représenter correctement et nécessiterait un grand nombre de composants haute fréquence. C'est 1/3 + ve, 1/3 -ve et 1/3 zéro. Il est difficile de dire comment vous obtiendrez facilement la sortie de droite totalement nulle sans qu'un grand nombre de termes à haute fréquence presque égaux d'environ phase opposée s'annulent.

DONC

La DFT ou la FFT indique ce qu'elle voit. Vous devez lui fournir des formes d'onde intégrales du signal d'intérêt ou prendre en compte les points finaux. Il existe toute une forme d'art dédiée à cette dernière tâche. Des termes comme le fenêtrage, le cosinus surélevé, la fenêtre de brouillage (et bien d'autres) vous permettront de démarrer votre voyage.

Wikipedia - fenêtrage Cooley Hann Lanczos Hamming Blackman Kaiser Nutttall et beaucoup d'amis :-)

Probablement utile

National Instruments et encore ici

Analyse du spectre DFT


la source
Le troisième tiers de la troisième forme d'onde a été défini sur zéro dans Excel de force ici, et dans le micrologiciel pendant la mise en œuvre.
5
Forcer une partie du signal à zéro ne fera que rectanguler les données avec un rectangle plus court, ce qui fera juste convolutionner le résultat avec une fonction Sinc plus large.
hotpaw2
@VaibhavGarg - Les 0 sont dans une feuille de calcul et sur votre graphique. J'ai donc supposé qu'ils se trouvaient dans votre analyse. Dans l'affirmative, les commentaires généraux s'appliquent. Sinon, vous devez changer ce que vous montrez.
@RussellMcMahon Yup- Je suis d'accord.
Le fenêtrage d'un nombre entier de périodes aligne les valeurs nulles du sinc sur l'espacement harmonique, ce qui empêche les fuites entre les harmoniques lorsque le spectre de la fenêtre est convolué. Voici un DFT de 1024 points (interpolé avec un remplissage nul) pour les expériences 2 et 3 (c'est-à-dire une fenêtre rectangulaire de 64 points contre une fenêtre rectangulaire de 41 points). Les valeurs idéales sont représentées par des points bleus. L'expérience 2 montre une fuite spectrale (en particulier aux harmoniques paires qui devraient être nulles), mais l'expérience 3 est correcte aux harmoniques.
Eryk Sun
7

Les résultats de la FFT révèlent réellement tout sur les fréquences injectées d'origine. Mais parce que les fréquences injectées n'étaient pas exactement périodiques dans la longueur d'ouverture de la FFT, les fréquences ont été transformées en formes d'onde Sinc en raison de ce fenêtrage non périodique, puis rééchantillonnées. Pour récupérer les fréquences d'origine, vous devrez peut-être déconvolver, interpoler et redimensionner en fonction de la longueur de la FFT.

hotpaw2
la source
Pourriez-vous illustrer les 3 étapes? Je peux vous envoyer le fichier Excel avec les échantillons originaux pour jouer avec si vous le souhaitez.
6

Ce n'est en aucun cas une réponse complète, et je ne m'attends pas à ce qu'elle soit acceptée, mais je pense également que cette réponse a une valeur éducative importante.

Donc, je peux déduire, et je peux me tromper (j'espère que je le suis), que si le nombre d'échantillons dans une période de forme d'onde complète n'est pas une puissance de 2, la FFT de la même chose ne révèle rien sans une sorte d'opération , cela m'échappe pour le moment.

Vous avez surtout raison. La FFT profite de la symétrie des échantillons de fréquence le long du cercle unitaire dans le plan z:

Cercle des unités génériques

Si votre nombre d'échantillons est une puissance de 2, comme indiqué ci-dessus, vous pouvez voir la symétrie à la fois sur l'axe réel et l'axe imaginaire. Essentiellement, la FFT utilise cette symétrie pour réduire les échantillons à 1 quadrant (ou moins? Je ne suis pas sûr des détails de cette symétrie) du cercle unitaire. Cela signifie que la FFT n'a qu'à effectuer un petit nombre de calculs, par rapport à toute la plage de fréquences.

Ce que vous pouvez faire avec un remplissage nul, c'est augmenter la résolution de la FFT en ajoutant des zéros pour produire une puissance plus élevée de 2 échantillons. La symétrie est toujours là, il y a juste plus d'échantillons emballés dans le cercle unitaire maintenant.

Donc, si vous n'avez PAS une puissance de 2, les FFT moins robustes ne seront pas à zéro pour vous, et vous pouvez rencontrer un alias dans votre sortie.

kevlar1818
la source