diff options
Diffstat (limited to 'md/writeup/calculate_fir_coefficients_with_c.md')
-rw-r--r-- | md/writeup/calculate_fir_coefficients_with_c.md | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/md/writeup/calculate_fir_coefficients_with_c.md b/md/writeup/calculate_fir_coefficients_with_c.md index c8c9552..e364eb4 100644 --- a/md/writeup/calculate_fir_coefficients_with_c.md +++ b/md/writeup/calculate_fir_coefficients_with_c.md @@ -29,16 +29,26 @@ MathJax = { </script> Low pass ideal impulse response -Impulse response of the filter +Ideal impulse response of the filter $$2f_c\frac{sin(n \omega_c)}{n \omega_c}$$ + + ```c for (i=0;i<filter_N;i++) { arg = (double)i-(double)(filter_N-1)/2.0; h[i] = omega_c * sinc(omega_c*arg*M_PI); } ``` +Sinc function implementation + +```c +double sinc(double x) { + if (x>-1.0E-5 && x < 1.0E-5) return (1.0); + return sin(x)/x; +} +``` Rectangular window for low pass filter @@ -70,6 +80,12 @@ How to use calculated coefficients Here is most common windows for window methods that can give you better results then naive rectangular windows filter. There is better ways how to calculate filters, but that for laters. +|Name|Main lobe|Stop band attenuation|Window function| +|---|---|---|---| +| Rectangluar | 13dB | 21dB | 1 | +| Hanning | 31dB | 44dB | $0.5+0.5cos(\frac{2\pi n}{N})$ | +| Hamming | 41dB | 53dB | $0.54 + 0.46 cos\frac{2\pi n}{N}$ | +| Blackman | 57dB | 74dB | $0.42+0.5cos(\frac{2\pi n}{N-1}) + 0.08 cos(\frac{4\pi n }{N-1})$ | ### Rectangular ```c @@ -232,6 +248,7 @@ run program [main.lv/writeup/dsp_lp_filter.md](/writeup/dsp_lp_filter.md) [http://git.main.lv/cgit.cgi/code-snippets.git/tree/fir1](http://git.main.lv/cgit.cgi/code-snippets.git/tree/fir1) +https://en.wikipedia.org/wiki/Sinc_function https://ccrma.stanford.edu/~jos/st/FFT_Simple_Sinusoid.html https://ccrma.stanford.edu/~jos/st/Example_Applications_DFT.html https://ccrma.stanford.edu/~jos/st/Use_Blackman_Window.html |