Voici mon code pour un signal à deux tons, où j'utilise une bande d'arrêt pour supprimer la tonalité plus élevée, puis tracé le avant (en bleu) et après (en rouge) dans le domaine fréquentiel après avoir convolu mon signal avec les coefficients de filtre .
Si vous mettez ce code dans Matlab, vous pouvez clairement voir que la fréquence supérieure a été supprimée avec succès par le filtre, mais pour une raison quelconque, l'amplitude de la fréquence inférieure a été réduite de moitié, et plus j'augmente le nombre de coefficients de filtre, plus cela aplatit toute ma courbe, pourquoi cela se produit-il? Et comment puis-je l'empêcher pour que la bande d'arrêt ne se propage pas vers l'extérieur? Voici l'image et le code:
fSampling = 8000; tSampling = 1 / fSampling; t = 0: t Échantillonnage: 0,005; F0 = 1000; F1 = 3000; xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t); ht = fir1 (40, 0,25, «stop»); yt = conv (xt, ht); fAxis = -4000: 125: 4000-125; xF = fft (xt, 64); MagXF = fftshift (abs (xF)); tracé (fAxis, MagXF); attendez yF = fft (yt, 64); MagYF = fftshift (abs (yF)); plot (fAxis, MagYF, 'r')
Réponses:
Les filtres ont toujours un "roll-off" inhérent à leur réponse en fréquence, car vous ne pouvez pratiquement pas réaliser une bande passante qui est une fonction rectangulaire parfaite. Pour un filtre passe-bas, le point où la magnitude de votre réponse en fréquence chute à -3 dB est appelé la bande passante et tout ce qui est au-delà est appelé la bande d'arrêt (techniquement, tout ce qui dépasse la fréquence du coin, mais nous prendrons la la fréquence de coin doit être le niveau -3 dB). La vitesse à laquelle votre réponse en fréquence s'atténue au-delà de la bande passante dépend de la longueur du filtre.
Si vous regardez la réponse en fréquence de votre filtre,
ht
vous verrez qu'elle chute à -6 dB à 1000 Hz:Il est donc logique que la puissance diminue de 6 dB après le filtrage, ce que vous voyez dans votre figure comme une réduction de moitié de l'amplitude.
Si vous aviez regardé la documentation de la
fir1
fonction que vous avez utilisée, vous l'auriez réalisé aussi (c'est moi qui souligne):Maintenant, pour créer des filtres plus nets, avec des réponses qui se rapprochent assez d'un rectangle, vous devrez utiliser des filtres IIR, qui viennent avec leur propre hôte de problèmes de stabilité, etc., mais certainement une option. Vous pouvez voir ma réponse ici pour quelques idées sur la mise en œuvre d'un filtre IIR de section 2 de forme discrète de deuxième ordre qui donne des coins très nets. L'exemple existe pour un filtre passe-bande, mais vous pouvez lire les documents pour les fonctions qui y sont utilisées et implémenter vous-même une version passe-bas.
la source
Il faut du temps pour qu'un filtre "décide" si un signal est juste à l'intérieur ou juste à l'extérieur d'une transition de filtre. Une solution consiste à simplement éloigner la transition du filtre de tout signal d'intérêt, comme à mi-chemin entre vos deux signaux de test, où, dans votre cas de test, il y a très peu de signal à déformer par une décision imparfaite.
la source
Utilisation
à la place, et vous aurez une très faible atténuation à F0 et une très forte atténuation à F1.
la source