door entropy » zo 31 aug 2014, 13:17
Analoge signaal naar een A/D converter, en steeds een reeks samples nemen (bijv. 512 samples). Dan vermenigvuldig je de waarden van de tabel met die van het signaal. Normaliseer de waarden in de tabel en die van de samples van het signaal naar een bereik van 0 tot 1 (dus achter de komma); dan krijg je uit de berekening, als je deelt door het aantal waarden (512) de correlatiewaarde van de sinus in de tabel met het signaal. Deze correlatiewaarde geeft de hoogte van het balkje voor die frequentie (tussen 0 en 1). LET OP: De sinus in de tabel heeft een bepaalde frequentie. Om uit deze tabel een sinus met een andere frequentie te destilleren (een harmonische, zoals 2x de basisfrequentie van de sinus, of 3x de frequentie, of 4x etc) moet je de 'tussenliggende waarde' van twee samples in de tabel kunnen nemen. Dit kun je in de praktijk doen met lineaire interpolatie, dus als de ene waarde in de tabel 0.1 is en de volgende 0.2, en je wilt de waarde op 1/3 tussen de 0.1 en de 0.2 berekenen, dan krijg je dus (lineair) 0.13333...! Deze waarde (0.13333) kun je dan vermenigvuldigen met de waarde van de sample uit het signaal. (de tabel bevat 1 frequentie, maar je wil sinussen met willekeurige frequenties eruit kunnen berekenen)
(Misschien moet je naast de sinussen ook de cosinussen nemen, maar dat weet ik niet precies...(dit kan overigens uit dezelfde tabel volgens cos(x)=sin(x+1/2 pi) Ik denk dat je dan de stelling van Pythagoras moet toepassen √(sin²(x)+cos²(x)) - ik weet zo snel niet hoe een microcontroller dat kan berekenen... misschien ook een tabel van maken?

D.w.z. een reeks van wortels tussen 0 en 1, en een reeks van kwadraten van 0 tot 1

)
Analoge signaal naar een A/D converter, en steeds een reeks samples nemen (bijv. 512 samples). Dan vermenigvuldig je de waarden van de tabel met die van het signaal. Normaliseer de waarden in de tabel en die van de samples van het signaal naar een bereik van 0 tot 1 (dus achter de komma); dan krijg je uit de berekening, als je deelt door het aantal waarden (512) de correlatiewaarde van de sinus in de tabel met het signaal. Deze correlatiewaarde geeft de hoogte van het balkje voor die frequentie (tussen 0 en 1). LET OP: De sinus in de tabel heeft een bepaalde frequentie. Om uit deze tabel een sinus met een andere frequentie te destilleren (een harmonische, zoals 2x de basisfrequentie van de sinus, of 3x de frequentie, of 4x etc) moet je de 'tussenliggende waarde' van twee samples in de tabel kunnen nemen. Dit kun je in de praktijk doen met lineaire interpolatie, dus als de ene waarde in de tabel 0.1 is en de volgende 0.2, en je wilt de waarde op 1/3 tussen de 0.1 en de 0.2 berekenen, dan krijg je dus (lineair) 0.13333...! Deze waarde (0.13333) kun je dan vermenigvuldigen met de waarde van de sample uit het signaal. (de tabel bevat 1 frequentie, maar je wil sinussen met willekeurige frequenties eruit kunnen berekenen)
(Misschien moet je naast de sinussen ook de cosinussen nemen, maar dat weet ik niet precies...(dit kan overigens uit dezelfde tabel volgens cos(x)=sin(x+1/2 pi) Ik denk dat je dan de stelling van Pythagoras moet toepassen √(sin²(x)+cos²(x)) - ik weet zo snel niet hoe een microcontroller dat kan berekenen... misschien ook een tabel van maken? :D D.w.z. een reeks van wortels tussen 0 en 1, en een reeks van kwadraten van 0 tot 1 ;) )