Citant le traitement numérique classique des signaux de Bellanger - Théorie et pratique , le point n'est pas où est votre fréquence de coupure, mais combien d'atténuation dont vous avez besoin, combien d'ondulation dans le signal que vous souhaitez préserver, vous pouvez tolérer et, surtout, comment rétrécissez votre transition de la bande passante à la bande d'arrêt (largeur de transition).
Je suppose que vous voulez un filtre de phase linéaire (bien que vous spécifiez une latence minimale, je ne pense pas qu'un filtre de phase minimum soit une bonne idée, en général, à moins que vous sachiez bien ce que vous allez faire avec votre signal par la suite) . Dans ce cas, l'ordre de filtrage (qui est le nombre de prises) est
N≈23log10[110δ1δ2]fsΔf
avec
fsΔfδ1δ2 the sampling rate the transition width, ie. the difference between end of pass band and start of stop band the ripple in passband, ie. "how much of the original amplitude can you afford to vary" the suppresion in the stop band.
Connectons quelques chiffres! Vous avez spécifié une fréquence de coupure de , je vais donc continuer et déclarer que votre largeur de transition ne sera pas supérieure à la moitié, donc .fs100Δf=fs200
Issu de la technologie SDR / RF, une suppression de 60 dB est généralement tout à fait suffisante - le matériel, sans coûts fous, ne sera pas meilleur pour garder les signaux indésirables hors de votre entrée, alors meh, ne gaspillons pas le processeur avec un filtre fantastique qui est meilleur que ce que votre matériel peut faire. Par conséquent, δ2=−60 dB=10−3 .
Disons que vous pouvez vivre avec une variation d'amplitude de 0,1% dans la bande passante (si vous pouvez vivre avec plus, envisagez également de rendre l'exigence de suppression moins stricte). C'est δ1=10−4 .
Donc, en branchant ceci:
NFiltre de Tommy≈ 23Journaldix[ 110 δ1δ2]FsΔ f= 23Journaldix[ 110 ⋅ 10- 4⋅ 10- 3]FsFs200= 23Journaldix[ 110 ⋅ 10- 7]200= 23Journaldix[ 1dix- 6]200= 23( journaldixdix6)200= 23⋅ 6 ⋅ 200= 800 .
Donc, avec vos 200 taps, vous êtes loin, si vous utilisez une bande passante extrêmement étroite dans votre filtre comme je le pensais.
Notez que cela n'ont un problème - tout d'abord, un filtre 800-tap est effrayant, mais franchement, seulement à première vue:
- Comme je l'ai testé dans cette réponse sur StackOverflow : le processeur est aujourd'hui rapide , si vous utilisez l'implémentation FIR optimisée par le processeur de quelqu'un. Par exemple, j'ai utilisé l' implémentation FFT-FIR de GNU Radio avec exactement le contour de spécification de filtre ci-dessus. J'ai obtenu une performance de 141 millions d'échantillons par seconde - cela pourrait ou pourrait ne pas vous suffire. Voici donc notre cas de test spécifique à la question (qui m'a pris quelques secondes à produire):
- MMM= 50120050= 24
- 96kSs≪ridiculement141MMEs
- 1100