Transformada rápida de Fourier - número não inteiro de ciclos na abertura da FFT

15

Existem alguns tópicos e respostas excelentes para discussão neste site (eletronics.se) sobre a teoria das transformadas de Fourier. Eu tentei implementar o mesmo em uma ferramenta de simulação (MS Excel :)).

Eu tenho alguns problemas de interpretação e implementação em relação ao mesmo. Estou tentando analisar uma forma de onda de tensão de 50 Hz. No entanto, os dados abaixo são apenas dados fictícios gerados, tentando estabelecer uma estrutura conceitual para implementação em um processador de baixo custo incorporado de 16 bits com restrição de poder de processamento e memória.


ETA (30 de maio de 2012)

Versão TL; DR:

Escusado será dizer em electronics.se, mas estou usando um processador incorporado com restrição de memória e poder de processamento.

Existem algumas perguntas aqui que ainda não foram respondidas:

  1. Como é realizado o janelamento nas amostras que eu tenho, sem aumentar significativamente a pegada de memória do algoritmo? Gostaria que estas fossem uma descrição básica passo a passo, pois sou bastante novo no DSP.
  2. Por que as magnitudes foram reduzidas pela metade quando interpolamos 41 amostras para obter 32, mas permaneceram como estavam (exceto por algum ruído) quando as interpolaram para obter 64?

Estou declarando uma recompensa pela pergunta, na esperança de obter excelentes respostas que sejam acionáveis ​​para um iniciante no DSP.


Experiência 1:

Entrada no domínio do tempo

Eu criei uma onda senoidal usando para gerar 64 amostras. Em seguida, adicionou-se 30% 3 r d harmónicas, 20% 5 t h harmónicas, 15% 7 t h harmónicas, 10% 9 tpecado(2nπ/64)3rd5th7th harmónica, e 20% 11 t h harmónicas. Isso levou a estas amostras:9th11th

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

E esta forma de onda:

Período de amostras da forma de onda 64 no domínio do tempo 64

Peguei um DFT dessas amostras com base no algoritmo Radix 2 e obtive esses valores:

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

Tomando os valores absolutos dos números complexos acima como a razão do fundamental (2º valor) e ignorando as informações da fase (se houver), obtive as magnitudes dos componentes harmônicos injetados exatamente como injetados.

Representação no domínio da frequência

insira a descrição da imagem aqui

Por enquanto, tudo bem.


Experiência 2:

Entrada no domínio do tempo

pecado(2nπ/41.)3rd5th7th9th11th

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 

E esta forma de onda:

insira a descrição da imagem aqui

Peguei um DFT dessas amostras com base no algoritmo Radix 2 e obtive esses valores:

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

Representação no domínio da frequência

insira a descrição da imagem aqui

As magnitudes dos números complexos acima não revelam nada que eu possa deduzir dos valores injetados no domínio do tempo.


Experiência 3

Entrada no domínio do tempo:

Agora eu peguei a mesma forma de onda e a preenchi com zero, ou seja, ajuste todas as amostras além de 41 para zero. Portanto, a seguir é apresentada a entrada no domínio do tempo:

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

E a forma de onda:

insira a descrição da imagem aqui

Peguei um DFT dessas amostras com base no algoritmo Radix 2 e obtive esses valores:

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 

Representação no domínio da frequência

insira a descrição da imagem aqui

Novamente, as magnitudes dos números complexos acima não revelam nada que eu possa deduzir de volta aos valores injetados no domínio do tempo.


ETA Como as respostas aqui apontaram para a janela, fiz outro experimento e obtive os seguintes resultados após muitas partidas falsas.

Experiência 4

Representação no domínio do tempo

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

Parece:

insira a descrição da imagem aqui

Coeficientes da janela 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

Parece com isso

insira a descrição da imagem aqui

O produto deles (seria apenas um produto simples?)

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

Parece:

insira a descrição da imagem aqui

Representação no domínio da frequência

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

Parece com isso:

insira a descrição da imagem aqui

Estes resultados são válidos? Porque ainda não pareço chegar a lugar algum!


Fiz mais duas experiências e pareço estar tentadoramente próximo dos resultados pretendidos, mas a solução tem a sensação de um hack para mim.

Experiência 5

3rd5th7th9th11th

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.

Fiz uma interpolação linear e obtive 64 amostras da mesma. Eles se pareciam com o seguinte:

insira a descrição da imagem aqui

A representação no domínio da frequência comparada com a saída ideal desejada (Primeira experiência) é a seguinte:

insira a descrição da imagem aqui

Retirei a segunda metade do espaço da amostra quando os componentes se dobraram após o limite de Nyquist. Há uma pequena atenuação nas frequências de interesse, mas um piso de ruído é adicionado em todo o espectro. Explicações?


Experiência 6

Igual ao experimento 5 , mas 32 amostras interpoladas.

insira a descrição da imagem aqui

Comparação no domínio da frequência:

insira a descrição da imagem aqui

As proporções estão corretas, mas as magnitudes estão reduzidas pela metade! Por quê?


Portanto, posso deduzir, e posso estar errado (espero que esteja), que, se o número de amostras em um período completo de forma de onda não for uma potência de 2, a FFT do mesmo não revelará nada sem algum tipo de operação , isso me escapa no momento.

Como tenho muito pouco controle sobre a frequência de amostragem, quais são as opções disponíveis para recuperar os valores que injetei no domínio do tempo?

Vaibhav Garg
fonte
Em vez disso, publique uma grande lista de números. Você pode publicar um gráfico da saída DFT? É bastante difícil ter uma idéia aproximada do resultado como apenas uma grande lista de números.
Nome falso
Deseja um gráfico das magnitudes (valores absolutos)?
Tudo bem agora?
Acho que a janela não funciona bem em apenas um período, assim como a DFT em 1 período sem janela. Não há vestígios do seu sinal original.
11
Não tenho certeza do que você está recebendo com a recompensa. Acabei de ver uma grande pilha de parcelas com alguns comentários dispersos e perguntas vagas. A compreensão das sutilezas da DFT e da janela requererá pelo menos algum estudo teórico no DSP. Eu recomendaria o livro introdutório de Lyons . Em segundo lugar, qual é a sua pergunta específica sobre a implementação de janelas? É uma técnica simples e você entenderia melhor como implementá-la em seu sistema restrito.
Jason R

Respostas:

12

Bem-vindo ao janelas. Nada a ver com William G.

A cura mais fácil que funciona por força bruta enterrando os erros no ruído usando a média é a amostragem de um grande número de ciclos, para que as condições de contorno não predominem.

Não analisei seus resultados numéricos, mas:

Olhe para o seu segundo e terceiro gráficos.
As formas de onda que você exibiu são as formas de onda que estão sendo analisadas.
O primeiro exemplo tem 2 semi-ciclos positivos e um negativo.
Eu esperaria que fosse muito forte no terceiro harmônico e razoavelmente em outros harmônicos ímpares e provavelmente com os pares muito mais baixos. Essa é uma estimativa intuitiva.
Qualquer que seja o resultado, a transformação é (feita corretamente) descrevendo o que vê e o que você vê.

Eu esperaria que o segundo exemplo fosse imensamente difícil de representar bem e precisaria de um grande número de componentes de alta frequência. É 1/3 + ve, 1/3-ve e 1/3 de zero. É difícil dizer como você facilmente obteria a saída direita totalmente zero, sem que um grande número de termos de alta frequência quase iguais da fase oposta se cancelasse.

ASSIM

O DFT ou FFT diz o que vê. Você precisa alimentar formas de onda integrais do sinal de interesse ou levar em consideração especialmente os pontos finais. Existe toda uma arte dedicada à última tarefa. Termos como janelamento, cosseno elevado, janela hamming (e muitos mais) o iniciarão em sua jornada.

Wikipedia - janelas Cooley Hann Lanczos Hamming Blackman Kaiser Nutttall e muitos amigos :-)

Provavelmente útil

National Instruments e novamente aqui

Análise de espectro DFT


fonte
O terceiro terço da terceira forma de onda foi definido como zero à força - no Excel aqui e no firmware durante a implementação.
5
Forçar parte do sinal a zero irá apenas exibir de forma retangular os dados com um retângulo menor, o que apenas convolveu o resultado com uma função Sinc mais ampla.
hotpaw2
@ VaibhavGarg - Os 0 estão na planilha e no seu gráfico. Então eu assumi que eles estão na sua análise. Nesse caso, os comentários gerais se aplicam. Caso contrário, você precisará alterar o que mostra.
@RussellMcMahon Yup- Eu concordo.
A janela de um número inteiro de períodos alinha os nulos do sinc ao espaçamento harmônico, o que evita vazamentos entre harmônicos quando o espectro da janela é convolvido. Aqui está um DFT de 1024 pontos (interpolado com preenchimento zero) para os experimentos 2 e 3 (ou seja, janela retangular de 64 pontos versus janela retangular de 41 pontos). Os valores ideais são plotados como pontos azuis. O experimento 2 mostra vazamento espectral (especialmente nos harmônicos pares que devem ser zero), mas o experimento 3 está correto nos harmônicos.
Eryk Sun
7

Os resultados da FFT revelam tudo sobre as frequências originais injetadas. Mas como as frequências injetadas não eram exatamente periódicas no comprimento da abertura da FFT, as frequências foram convoluídas em formas de onda Sinc devido a essa janela não periódica relacionada e, em seguida, reamostradas. Para recuperar as frequências originais, talvez seja necessário desconvolver, interpolar e redimensionar com base no comprimento da FFT.

hotpaw2
fonte
Você poderia ilustrar os 3 passos? Posso enviar o arquivo do Excel com as amostras originais para brincar, se você quiser.
6

Esta não é uma resposta completa, de forma alguma, e não espero que seja aceita, mas também acho que há um valor educacional significativo nessa resposta.

Portanto, posso deduzir, e posso estar errado (espero que esteja), que, se o número de amostras em um período completo de forma de onda não for uma potência de 2, a FFT do mesmo não revelará nada sem algum tipo de operação , isso me escapa no momento.

Você está quase certo. A FFT aproveita a simetria de amostras de frequência ao longo do círculo unitário no plano z:

Círculo de unidades genéricas

Se o seu número de amostras for uma potência de 2, como mostrado acima, você poderá ver simetria no eixo real e no eixo imaginário. Essencialmente, o que a FFT faz é usar essa simetria para recolher as amostras em até 1 quadrante (ou menos - não tem certeza dos detalhes dessa simetria) do círculo unitário. Isso significa que a FFT precisa fazer apenas um pequeno número de cálculos, em relação a toda a faixa de frequência.

O que você pode fazer com o preenchimento zero é aumentar a resolução da FFT adicionando zeros para produzir uma potência maior de 2 amostras. A simetria ainda está lá, há apenas mais amostras embaladas no círculo unitário agora.

Portanto, se você NÃO tiver uma potência de 2, FFTs menos robustos não serão zero para você, e você poderá encontrar um alias na saída.

kevlar1818
fonte