Яка частота відсічення фільтра, що рухається, середнього?


18

Мені потрібно розробити середній фільтр, котрий має частоту відсікання 7,8 Гц. Раніше я використовував фільтри з ковзними середніми, але, наскільки мені відомо, єдиний параметр, який можна подати, - це кількість балів, які потрібно усереднювати ... Як це може стосуватися частоти відсічення?

Зворотний показник 7,8 Гц становить ~ 130 мс, і я працюю з даними, відібраними в 1000 Гц. Чи означає це, що я повинен використовувати середній вікно фільтру, що рухається, середнього розміру 130 зразків, чи є мені щось інше?


Спершу слід визначити своє розуміння "відсікання". Якщо на останній частоті вище (внизу) відповідь фільтра дорівнює нулю, то відповідь буде "ні", оскільки ядро ​​фільтра, що рухається, має кінцеву підтримку, а кінцеві вейвлети перетворюються на нескінченні зображення фур'є.
mbaitoff

Фільтр ковзного середнього - це фільтр, який використовується у часовій області для видалення доданого шуму, а також для згладжування, але якщо ви використовуєте той самий фільтр, що рухається середнього значення, у частотній області для поділу частоти, то продуктивність буде найгіршою ...... так у цьому випадку використовуйте частотні доменні фільтри

Відповіді:


27

Ковзаючий середній фільтр (іноді розмовно відомий як фільтр боксерського автомобіля ) має прямокутний імпульсний відгук:

h[n]=1Nk=0N1δ[nk]

Або заявлено інакше:

h[n]={1N,0n<N0,otherwise

Пам’ятаючи, що частотна характеристика системи дискретного часу дорівнює дискретному перетворенню Фур’є в її імпульсній реакції, ми можемо обчислити її наступним чином:

H(ω)=n=x[n]ejωn=1Nn=0N1ejωn

Щоб спростити це, ми можемо використовувати відому формулу для суми першого N доданків геометричного ряду :

n=0N1ejωn=1ejωN1ejω

Що нас найбільше цікавить у вашому випадку - це величина відгуку фільтра, . Використовуючи пару простих маніпуляцій, ми можемо отримати це у більш легкій для розуміння формі:|H(ω)|

H(ω)=1Nn=0N1ejωn=1N1ejωN1ejω=1NejωN/2ejω/2ejωN/2ejωN/2ejω/2ejω/2

Це може бути не легшим для розуміння. Однак, завдяки особі Ейлера, нагадайте , що:

sin(ω)=ejωejωj2

Тому ми можемо написати вище:

H(ω)=1NejωN/2ejω/2j2sin(ωN2)j2sin(ω2)=1NejωN/2ejω/2sin(ωN2)sin(ω2)

Як я вже говорив раніше, те, що вас насправді хвилює, - це величина частотної характеристики. Отже, ми можемо скористатись величиною вищезазначеного, щоб спростити його далі:

|H(ω)|=1N|sin(ωN2)sin(ω2)|

|ejω|=1ω|xy|=|x||y|xy

The resulting function inside the magnitude brackets is a form of a Dirichlet kernel. It is sometimes called a periodic sinc function, because it resembles the sinc function somewhat in appearance, but is periodic instead.

Anyway, since the definition of cutoff frequency is somewhat underspecified (-3 dB point? -6 dB point? first sidelobe null?), you can use the above equation to solve for whatever you need. Specifically, you can do the following:

  1. Set |H(ω)| to the value corresponding to the filter response that you want at the cutoff frequency.

  2. Set ω equal to the cutoff frequency. To map a continuous-time frequency to the discrete-time domain, remember that ω=2πffs, where fs is your sample rate.

  3. Find the value of N that gives you the best agreement between the left and right hand sides of the equation. That should be the length of your moving average.


By my reckoning, that's a 'yes'? As far as I can tell, 130 samples seems to fit N with ω = 7.8, but I'm no mathematician.
CaptainProg

@CaptainProg: Only you can say for sure; I'm not sure what you wanted the magnitude response to be at the cutoff frequency.
Jason R

1
Could you define what n and N are? An example with a given sampling frequency would also be very helpful. This may sound simple, but this question is the top result for "moving average cutoff frequency", so I am sure there will be many other viewers who have fallen out of touch with the math behind filters.
FvD

@FvD n is the sample index for the signal x[n], as is typically used for discrete-time signals. N is defined in the first equation above. If I get a chance I can add an example, but I suspect that anyone who is choosing to design a filter to meet a particular cutoff frequency can follow the math.
Jason R

10

If N is the length of the moving average, then an approximate cut-off frequency Fco (valid for N>=2) in normalized frequency F=f/fs is:

Fco=0.442947N21

The inverse of this is

N=0.196202+Fco2Fco

This formula is asymptotically correct for large N, and has about 2% error for N=2, and less than 0.5% for N>=4.

P.S.: After two years, here finally what was the approach followed. The result was based on approximating the MA amplitude spectrum around f=0 as a parabola (2nd order Series) according to

MA(Ω)=Sin(ΩN/2)Sin(Ω/2)

MA(Ω)1+(124N224)Ω2

which can be made more exact near the zero crossing of MA(Ω)22 by multiplying Ω by a coefficient

α=0.95264

obtaining MA(Ω)1+0.907523(124N224)Ω2

The solution of MA(Ω)22=0 gives the results above, where 2πFco=Ωco.

All of the above relates to the -3dB cut off frequency, the subject of this post.

Sometimes though it is interesting to obtain an attenuation profile in stop-band which is comparable with that of a 1st order IIR Low Pass Filter (single pole LPF) with a given -3dB cut off frequency (such a LPF is also called leaky integrator, having a pole not exactly at DC but near to it).

relations between a MA filter (FIR, N-1 zeros) and a 1-pole IIR LPF

In fact both the MA and the 1st order IIR LPF have -20dB/decade slope in the stop band (one needs a larger N than the one used in the figure, N=32, to see this), but whereas MA has spectral nulls at F=k/N and a 1/f evelope, the IIR filter only has a 1/f profile.

HIIR=1Exp(Ωco)1Exp(Ωco)Exp(jΩ)

If one wants to obtain an MA filter with similar noise filtering capabilities as this IIR filter, and matches the 3dB cut off frequencies to be the same, upon comparing the two spectra, he would realize that the stop band ripple of the MA filter ends up ~3dB below that of the IIR filter.

In order to get the same stop-band ripple (i.e. same noise power attenuation) as the IIR filter the formulas can be modified as follows:

Fco,IIR=0.32N21

N=0.1024+Fco,IIR2Fco,IIR


I changed your formula to the latex format. Please double check and confirm both of them are correct. Thanks.
lennon310

I added a derivation of this approximation here dsp.stackexchange.com/a/28186/15347
Olli Niemitalo

2
As far as i remember i derived this formula with pragmatic concerns in mind, by means of numerical methods (either NSolve in Mathematica or something similar in Matlab), which should be asymptotically correct for large N. The number you gave is about 3% off, so i am not sure what to say.
Massimo

1
@Massimo we did a lot of work on this and other approximations in the other question. If you ever need more decimal places this is your magic number: 0.442946470689452340308369
Olli Niemitalo

1
I found back the Mathematica script where i calculated the cut off for several filters, including the MA one. The result was based on approximating the MA spectrum around f=0 as a parabola according to MA(Ω)=Sin(ΩN/2)/Sin(Ω/2) ; Omega=2πF; MA(F)N+1/6F2(NN3)π2 . And deriving the crossing with 1/2 from there.
Massimo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.