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:
- 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.
- 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:
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:
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
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:
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:
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
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:
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
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 à:
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
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:
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:
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
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:
La représentation du domaine fréquentiel par rapport à la sortie idéale souhaitée (première expérience) est la suivante:
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.
Comparaison des domaines de fréquence:
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?
Réponses:
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
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.
la source
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.
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:
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.
la source