Notch Filters - Theory and Software Implementation - Phil's Lab #39
Everything from notch filter basics, uses of a notch filter, through to derivation, discretisation of an analogue prototype/model, and final implementation on an embedded system (STM32 microcontroller) using the C programming language.
[SUPPORT]
Free trial of Altium Designer: www.altium.com/yt/philslab
PCBA from $0 (Free Setup, Free Stencil): jlcpcb.com/RHS
Patreon: / phils94
[LINKS]
Git: github.com/pms67
IIR Filters: • IIR Filters - Theory a...
Z-Transform: • Z-Transform - Practica...
Real-Time Implementation of Analogue Filters: • Real-Time Software Imp...
Tustin Transform: en.wikipedia.org/wiki/Bilinea...
[TIMESTAMPS]
00:00 Introduction
00:25 Altium Designer Free Trial
00:54 Content
1:26 Notch Filter Baiscs
3:01 Analogue Notch Filter
5:29 Standard Form Transfer Function
5:57 Example Frequency Responses
6:21 Discretisation
8:37 Digital Notch Filter
8:54 Pre-Warping
9:33 Analogue vs Digital Frequency Response
10:06 Practical Considerations
11:28 Software Implementation (STM32CubeIDE)
12:25 Filter Initialisation and Update Functions
14:48 Main.c Filter and Test Set-Up
15:39 Demonstration
ID: QIBvbJtYjWuHiTG0uCoK
You create great content! from designing PCB to DSP! I had tough time implementing these filters on software! But you're videos really help me to understand. Thank you so much 🥰💕
Awesome video Phil! This gave me a great idea for a project I'm working on. Thanks for making this!
That's the first time i hear about prewarping. It's always nice to learn something new 👍🏻
Thank you, awesome content!
Phil, your videos are fascinating and really well done. Thank you for continuing to make them! However, I do have to give you a hard time, only because it made me chuckle... around the 6:15 mark you twice said "nodth witch" instead of "notch width." I was so engrossed in the material that I had to go back and listen to it about three times to make sure I heard it right.
Haha yes, I heard that while editing but decided to keep it in :D
If you ever are looking to adopt, please consider my candidature. Thank you so much for these videos
This content is really helpful for me. and i am waiting for the EKF software implamentation
One day I will try to implement one of this filters !!!
I must say you are a great teacher.. I must try the serial oscilloscope. I have two questions. I know that float uses single precision format, but can we always be sure that the FPU is used? Do you measure the execution time of your different parts of code?
Impressive !
Thank you 😊❤️.
Just awesome
Thanks Sir
Hi Phil, thanks you for your effort!! I cloned the LittleBrain-STM32F4-Sensorboard repo but it doesn't include the NotchFilter library. Is there another repo that you have included?
Good job Phil, thanks for the effort. You mentioned the applications of use as motor vibration noise elimination from accelerometer sensors, but as you know the props are spinning at variable speeds, so the vibration frequency may vary. So, how do we decide which freq to be notched?
Maybe a bit late, but I got to this problem actually today. I was measuring my system by putting in a constant accelertion of a linear actuator, but because of a big mass which was undamped, a resonance in my measurement signal was determined. By putting a notch filter in my controller on the resonance frequency, the controller completely damped the resonance frequency. Another implementation can be that you indeed want to damp your input signal. Therefor, a moving notch filter can be applied (currently being implemented for a wide range of drone's). With that, your acceleration changes are damped, such that your accelerometer can actually measure your accelerations. It sounds not that intuative, but you think of it by blocking your input accelation from your measured accelerion.
Great video. At 16:11, the signal jumps 40% higher momentarily when you switch from 2 Hz to 3 Hz. This worries me that it could saturate the signal in many applications. Why does that happen? Is it just coincidence that it jumps to almost exactly 1.414x the amplitude, i.e., the square root of 2? Also, will this approach work well for narrow notch filters at higher frequencies, for example a 1 Hz notch filter at 50 Hz to remove powerline interference? Can it even do something like 1 Hz width at 10 kHz or is something going to fall apart? Thanks!
Great content as always! Can we do the same with the bluepill developing board?
15:39 "Serial monitor link in the desctription" it seems to be missing.
amazing
Hi Phil thank you and congratulations, this is excellent material. Are you planning to cover other filters like Chebyshev or Butterworth ? That would make this series very complete. Thanks again.
Awesome!!! Just one question. Why not use ZOH to discretize the tf?
Thank you, Matheus. There are many ways to discretise - I've just opted with this method in this case.
I cant find the notch filter code in your github. Also, im trying to use the serial oscilloscope with DAC DMA, but i cant
Hello Phil, Any news about the KiCAD PCB course you were planning to release. thanks!
Hi, Sorry for the delay - I'm really putting my head down to get this course finished now. Just need to do the voice overs and check the content, then it should be ready!
can you build flight controller for model rocket tvc
instant like
Thanks!
good contend
Thanks!
I have a problem with a set of IIR filters where the filter computation of a bit stream needs to be done in parallel (to gain speed on a multicore system). So, the input stream is split on overlapping chunks of fixed sample count and sent each to the parallel filter threads, then the outputs of the filters are concatenated in order to assemble the output signal as it was done with a single filter. There are a major issue there. As the IIR are feedback type, the current output depends on previous values, so it produces edge distortion at the beginning of each block (it does not know the previous values). The question is. Are there a way to compute how many samples of the previous block are needed to minimize the start of the block edge distortion in a way the resulting distortion is less than a given error magnitude? (The procedure is to add N samples of the previous block to the beginning of the current one, the question is how to determine N given an arbitrary IIR) I guess it is something related to the maximum absolute value of the Z exponent on the transfer function and its weight. But I guess someone solved that before. Do you know some specific keywords for searching for this particular problem available solutions? Searching for parallel IIR implementations I found a summing solution, but not the one I described. In this one the filter is applied to different time portions of the input in parallel not the same portion and then the output summed.
I think I love you
You're generating 100 samples per second, so, your sample rate is 100 Hz, and you're filtering out 50 Hz. Nice and fine. But if you have a much higher sample rate, say, 10 KHz, and still want to filter out 50 Hz, wouldn't you need a formula that stores many more of the previous samples (and converted results)?
ok, that was a stupid question - the X and Y values are sufficient to describe a "correction wave", which, if subtracted from the original values, filters out the 50Hz signal. But you only need X and Y to describe that correction, not a memory of all previous values that describe how the parameters were found.
Altium is too expensive for hobbists... you sold out man! - im unsubscribing