Mettre En Œuvre La Fenêtre De Hann
Je prends des blocs de données entrants et de les transmettre par le biais de fftw pour obtenir certaines informations spectrales. Tout semble fonctionner, cependant, je pense que je suis l'obtention de certains problèmes d'aliasing.
J'ai essayé de travailler sur la façon de mettre en œuvre une fenêtre de hann sur mes blocs de données. Google m'a laissé tomber pour des exemples. Des idées ou des liens que je devrais regarder?
double dataIn[2048] > /* windowing here? */ > FFT > double freqBins[2048]
Mise à jour
Merci à Oli pour préciser la question, je suis en train d'essayer de résoudre est spectrale de fuite, PAS d'aliasing...
Vous devez vous connecter pour publier un commentaire.
http://en.wikipedia.org/wiki/Hann_function . La mise en œuvre résulte de la définition très simplement. Utilisez simplement le
w(n)
de la fonction en tant que multiplicateur de la boucle à travers tous vos échantillons (changement den
que vous allez), et c'est tout.Pourquoi ne pas l'utiliser Math.NET s'Hann fenêtrage mise en œuvre?
Trouve ici: https://numerics.mathdotnet.com/api/MathNet.Numerics/Window.htm
Wikipédia est votre ami: Fenêtre de Hanning
Sûrement votre googler venu avec wikipédia?! De toute façon il suffit de créer une fonction qui retourne un tableau de longueur N avec les coefficients de Hanning et multiplier cette matrice par votre
dataIn[2048]
.Pas de réponse à votre question, mais d'un côté sur votre problème. Le fenêtrage permet de résoudre fuite spectrale problèmes, pas aliasing problèmes.
Spectrale-les effets de fuite se produire lorsque les composantes de fréquence de l'onde ne sont pas exactes entier sous-multiples de votre taux d'échantillonnage.
Si vous avez de l'aliasing, alors vous êtes fondamentalement vissé. Vous aurez besoin d'augmenter votre taux d'échantillonnage, ou de les mettre dans une (meilleure) filtre anti-repliement avant de l'échantillon.
La fonction complète qui est équivalent à MATLAB
de hanning.m
peut être trouvé ici:C'est bien, mais la plupart des gens veulent probablement pour ce faire sur des milliers de tableaux plein de données. Vous pouvez remplir un tableau de constant multiplicateurs une fois que votre programme d'initialisation (utiliser la même taille de la matrice de vous nourrir de la FFT) ensuite, il suffit de multiplier chaque point dans votre vrai tableau en chaque point du coefficient multiplicateur de tableau. Plus vite/moins cher que de prendre tous ceux cosinus encore à chaque fois.