How to design and implement a digital low-pass filter on an Arduino

  Рет қаралды 142,474

Curio Res

Curio Res

3 жыл бұрын

In this video, you'll learn how a low-pass filter works and how to implement it on an Arduino to process signals in real-time.
You don't have to be a mathematician to design your low-pass filter. You can use libraries to do the work for you. The python scripts linked below can help you to get started.
github.com/curiores/ArduinoTu...
github.com/curiores/ArduinoTu...
The Arduino examples are also available:
github.com/curiores/ArduinoTu...
There's also a high-pass version now:
github.com/curiores/ArduinoTu...
with a few details about the derivation here:
github.com/curiores/ArduinoTu...
To use the Jupyter Notebook, start by following the instructions to download Python:
wiki.python.org/moin/Beginner...
and then follow the instructions to install Jupyter:
jupyter.org/install.html
Correction(s):
@ 9:28, the Butterworth filter sum should be from 0 to n.

Пікірлер: 276
@vigneshperiyasamy3019
@vigneshperiyasamy3019 Жыл бұрын
I regret that i Have not seen this explanation during my College study. while i was studing, I could not understand DFT, FIlters, signal processing, what is the need of different plots, why we need to study bilinear transformation, what is the need of Continous, differential equations...etc. what is not covered in this video; Signals, Control system, Maths, Embedded system, Python programming.. really usefull. Thank u. thank god atleast now I came to know.
@ShirishJadav162
@ShirishJadav162 4 ай бұрын
Same.. professors go through the theories less of implementation or failed to explain the uses of the theory they are teaching. And mostly that is why they are professors and not engineers.
@tjb6255
@tjb6255 Жыл бұрын
You're truly underrated! I've never seen such a lucid explanation for implementing a project based on filters. Thank you very much Curio Res!!
@simonsattler9587
@simonsattler9587 2 жыл бұрын
Just great explaination of math background, transition and final implementation! Thank you!
@evanbarnes9984
@evanbarnes9984 2 жыл бұрын
This is insanely helpful for a project I'm working on in the long term. I can't believe you put this out for free! Instant sub
@ollydsouza
@ollydsouza Жыл бұрын
Thank you very much for your tutorials - calm , well paced and very educational. As a researcher this is not just learning - it is meditative experience as well.
@holo8447
@holo8447 Жыл бұрын
Imho your videos are among the best on KZbin. Not only is the quality of your animations extremely good, the depth of your explanations allows to easily follow and understand the topics. I really hope you have a great future on KZbin.
@RafaelKarosuo
@RafaelKarosuo Жыл бұрын
Digital filters is a huge topic and your example and explanations are superb! very digestible and easy to follow THANKS😃
@Corredor1230
@Corredor1230 Жыл бұрын
This is awesome, I’m learning filter design right now, and it was great to look at a practical application of it with Arduino. So cool!
@fahimfaisalamio8037
@fahimfaisalamio8037 2 жыл бұрын
I can't begin to think how underrated this channel is. You are a Philosopher's Stone level gem!
@wenhaoye8773
@wenhaoye8773 2 жыл бұрын
There is no doubt that this is one of the best videos i hv seen, super clear, easy to understand, visualization is very good.
@curiores111
@curiores111 2 жыл бұрын
Glad to hear that Wenhao!
@frank676
@frank676 2 жыл бұрын
Great video, you made the subject understandable and easy to implement. Made my own filter and it worked just fine. I was just wandering how do you make high-pass filters.
@MrMindMaster
@MrMindMaster Жыл бұрын
Just wanted to thank you.... The ugly math part is the most useful to me! I have to create the coefficients without using any scipy libraries for a project of mine. You're a lifesaver!
@mibrahim4245
@mibrahim4245 2 жыл бұрын
As a Mechatronics engineer I tell you this is ORIGINAL and indicates a deep understanding ! .. God Bless You
@rahim9568
@rahim9568 Жыл бұрын
Thank you so much, Not every teachers deserve to called one because that title is reserved for great ones like you.
@snivesz32
@snivesz32 2 жыл бұрын
This is so cool. It's very interesting how the continuous transfer function becomes a discrete transfer function with terms that only require the last value of y and current and last values of x. The accelerometer demonstration was a great applied example. Fantastic.
@curiores111
@curiores111 2 жыл бұрын
Yes its discrete form is surprisingly simple. Those coefficients pack a surprising amount of detail. Thank you for the kind words.
@snivesz32
@snivesz32 2 жыл бұрын
@@curiores111 Can you suggest other filters that have less phase delay?
@curiores111
@curiores111 2 жыл бұрын
@@snivesz32 Sorry, not off-hand. Generally speaking most filters I've encountered would have more phase delay than a basic low-pass filter. There are probably some exceptions (with other tradeoffs, no doubt).
@chrisdonnell7200
@chrisdonnell7200 Жыл бұрын
@@snivesz32 there are necessarily delays (unless you can look into the future). Even an analog low pass filter like a capacitor will cause a phase shift.
@Engineer_Valat
@Engineer_Valat 9 ай бұрын
Great explanation, I haven't watched a video explaining technical topics so beautifully in a long time.
@curiores111
@curiores111 9 ай бұрын
Many thanks, Valat. Hopefully more to come soon.
@manuel56354
@manuel56354 2 жыл бұрын
OMG this video is pure gold. I never turn on the notification bell, but I just did for your channel, your videos are amazing.
@curiores111
@curiores111 2 жыл бұрын
wow, thank you! 😁 I had a lot of fun making this one (well okay I did get a little tired after the 20th animation script but hey you gotta put a little blood and sweat in there or it doesn't come out right).
@maksymkloka7819
@maksymkloka7819 2 жыл бұрын
This is great. I wish every video on KZbin was this awesome. Thank you.
@curiores111
@curiores111 2 жыл бұрын
Too kind, Maksym, thank you!
@FirstLast-du8lb
@FirstLast-du8lb Жыл бұрын
This is unbelievably helpful. You rock!!!
@AbroadinSouthKorea
@AbroadinSouthKorea Жыл бұрын
the quality of the video is really great
@papalevies
@papalevies 3 жыл бұрын
Great explanation
@bilalzaenal3795
@bilalzaenal3795 2 жыл бұрын
This is great video! you explain the math background clearly and easy to understand. Thank you for sharing this video.
@curiores111
@curiores111 2 жыл бұрын
Glad to hear that. Thanks Bilal. 😊
@BeMuslimOnly
@BeMuslimOnly 2 ай бұрын
You did an exceptional job, please do more of these videos. It was very informative
@prashantnayak7278
@prashantnayak7278 2 ай бұрын
This is a really nice explanation of filter design and its implementation on real-time microcontrollers. Your python code is impressive; I am a research scientist, and I want to cite your work in one of my works on filter design for real-time noise control.
@satishrengarajan5806
@satishrengarajan5806 Жыл бұрын
Precise and concise presentation. Great video!
@TheTim2302
@TheTim2302 Жыл бұрын
Respect for the (hidden) effort making this represenatation.
@curiores111
@curiores111 Жыл бұрын
Too kind Tim, thank you.
@BorisGrishenco
@BorisGrishenco 2 жыл бұрын
High-quality video!! Thank you!
@akompsupport
@akompsupport Жыл бұрын
Excellent video! Thanks for posting!
@mohamedelsheraiy
@mohamedelsheraiy 3 жыл бұрын
Great video as usual, thank you!
@ArifRahmanMY
@ArifRahmanMY 6 ай бұрын
Fantastic explanation!
@curiores111
@curiores111 2 жыл бұрын
For those that care less about the theory, I created a new direct Arduino implementation, here's the video: kzbin.info/www/bejne/m36Xh3uqmtmnfck There's also a high-pass version now: github.com/curiores/ArduinoTutorials/blob/main/BasicFilters/ArduinoImplementations/HighPass/HighPass.ino with a few details about the derivation here: github.com/curiores/ArduinoTutorials/tree/main/BasicFilters/Design/HighPass
@danielardelian2
@danielardelian2 Ай бұрын
Excellent presentation! The Python and Arduino code is much appreciated!
@curiores111
@curiores111 Ай бұрын
That's very generous Daniel. I'm so glad you found the code useful. 💖
@jamate
@jamate 2 жыл бұрын
Thank you for making the video, keep up the great work!
@curiores111
@curiores111 2 жыл бұрын
😊
@surfacta
@surfacta Жыл бұрын
Wow, I have been looking for a clear tutorial on higher order digital filter and finally i found one! Would you mind making a more detailed video on deriving those parameters, and also for high pass filter? My prof didn't do a great job explaining this on DSP lecture. Thanks!
@herosamurai
@herosamurai 2 жыл бұрын
Great video! kinda funny the part about "ugly math" 'cause I studied mechatronics and when I took Signal processing I really dont understand so much because there was so much abstract theory and I am more of the practical side because I am focus on Robotics, but your explanation was precise, simple and efficient, thank you!
@curiores111
@curiores111 2 жыл бұрын
This was also my experience with this subject. Funny how underneath all that math the essential concepts are all actually very intuitive...
@jonni2734
@jonni2734 Ай бұрын
Beautiful video! Thanks!!!!!
@user-pk8hn6zw8m
@user-pk8hn6zw8m 2 жыл бұрын
just wanted to say that this was godsent for me!
@johnhopkins6731
@johnhopkins6731 Жыл бұрын
That was a great (although fast paced) overview.
@curiores111
@curiores111 Жыл бұрын
thank you for the feedback. :)
@dhanushkawijethunga
@dhanushkawijethunga Жыл бұрын
what a great explanation. Thank you so much !
@malikjavadov366
@malikjavadov366 Жыл бұрын
Damn, this was so smooth
@rafaguevara08
@rafaguevara08 2 жыл бұрын
WHAT A BEAUTIFUL WORK!! It was really useful for me... keep it on!!!
@curiores111
@curiores111 2 жыл бұрын
Glad to hear that 😊, thanks Rafael!
@mathmaker6946
@mathmaker6946 Жыл бұрын
Just what i´ve been looking for, thank you so much. I´m thinking on crating a simple guitar tuner.
@alimar1897
@alimar1897 Жыл бұрын
Wow, great explanation
@benjamincormack3217
@benjamincormack3217 6 ай бұрын
You have a wonderful channel!
@annacersongor8553
@annacersongor8553 3 жыл бұрын
Great video and great explanation, thanks a lot, keep going.
@Ivan-tw4cz
@Ivan-tw4cz 2 ай бұрын
Lovely video!
@rick_er2481
@rick_er2481 2 жыл бұрын
Great video!
@ashwatha532
@ashwatha532 Жыл бұрын
doing my masters and this video saved my assignment
@mbmaline
@mbmaline 2 жыл бұрын
this is what i was looking for, great video
@curiores111
@curiores111 2 жыл бұрын
Good and I hope it helped :)
@manhhuybui9609
@manhhuybui9609 3 жыл бұрын
Great video. Thank you so much!
@AhmadAsmndr
@AhmadAsmndr 6 ай бұрын
I am glad that i found your Channel. You are making perfect content thank you very much!
@curiores111
@curiores111 6 ай бұрын
Great to hear that. Thanks for stopping by, Ahmad.
@andreapecile3300
@andreapecile3300 Жыл бұрын
Excellent ! Subscribed !
@L2.Lagrange
@L2.Lagrange 3 ай бұрын
Very interesting. I'll have to give these a go in one of my projects, especailly that 2nd order butterworth
@gamerharmeet
@gamerharmeet 3 жыл бұрын
Thank you for such a nice, clear and useful video.
@curiores111
@curiores111 3 жыл бұрын
You are welcome, friend.
@aliala8008
@aliala8008 3 жыл бұрын
Thanks for video. I will wait the others :)
@curiores111
@curiores111 3 жыл бұрын
Thank you, friend. More coming soon!
@tahirkamboh147
@tahirkamboh147 3 жыл бұрын
What a great explanation 👌.
@RCShowdown
@RCShowdown 2 жыл бұрын
Thank you so much for this perfect and easy to follow explaination!! Thumbs Up! :)
@curiores111
@curiores111 2 жыл бұрын
Well thank you friend. 😊
@evanlane1690
@evanlane1690 Жыл бұрын
These are amazing! I'm really hoping you're planning on continuing your channel. Your explanations are fantastic.
@visit2explore832
@visit2explore832 2 жыл бұрын
Very well presentation... Clear my whole concept relate to filter... Well job done.. Really appreciate.
@curiores111
@curiores111 2 жыл бұрын
oh good! Hopefully you can filter with confidence now :)
@sullianetrajano2597
@sullianetrajano2597 Жыл бұрын
BROOO thankyou so much, this really helped and the tutorial was really easy to use as well :)
@aravindhdeivag111
@aravindhdeivag111 3 ай бұрын
Excellent content mam, you deserve a million views. I have never understood any of these before. You've connected all the subjects perfectly
@bflmpsvz870
@bflmpsvz870 Ай бұрын
This is amazing!
@janbabkiewicz9137
@janbabkiewicz9137 2 жыл бұрын
thanku you very much. Now i understand LPF. It will be great if you do this type video, visualization is the key.
@darkside3ng
@darkside3ng 2 жыл бұрын
Amazing!!! Loved it
@curiores111
@curiores111 2 жыл бұрын
Much obliged. 😄
@frodebang
@frodebang 3 жыл бұрын
Thank you for making this : )
@curiores111
@curiores111 3 жыл бұрын
sure, thanks for stopping by :)
@jakobgammelgaard4853
@jakobgammelgaard4853 2 жыл бұрын
Great video. Thanks!
@curiores111
@curiores111 2 жыл бұрын
Certainly :)
@klave8511
@klave8511 2 жыл бұрын
This is a great explanation and has a real input as an example, well done. Some inputs need different filters because they use the data for different reasons. Your example showed an IMU data stream likely useful for position control and so time delay becomes crucial. Could you also include some aspects of the time domain signal, how much is the waveform distorted by the filter. I’m thinking about, for example, a single bit of data or a sonar reflection. Ringing artifacts on the time signal add features to the filtered signal. If you choose the wrong filter, the response may affect position control too, causing overshoot and actuator wear. Your data bandwidth, your actuator bandwidth and your noise level are some of the inputs that your filter design needs, I’m sure there are a few more. Would be great to see you demystify these in a future video. As a late thought, some explanation of the difference between just using a PID control strategy and including a filter before the controller. Is it valid to filter the measured variable before using it for control?
@curiores111
@curiores111 2 жыл бұрын
time delay is absolutely crucial. Increases in delay directly destabilize the control system. So as you say, this would cause overshoot, and in extreme cases destabilize the control entirely. I'd certainly be interested in creating a video exploring the details of filter design. Thank you for the request. There would be a lot to unpack there, so I'd have to think about what might be useful to a general audience on youtube. It is absolutely valid to filter the variable in the control system. As you said, if the delay is high, this could cause some stability issues. But in other cases this can be very helpful (for example where there is measurement error, as you can see in this video: kzbin.info/www/bejne/foPEi395d6uJeqc ). The delay caused by the first order filter is pretty small, so on the time scale of the motor response it's not really destabilizing the system. If you compute the transfer function of the motor, you could multiply the transfer funciton of the filter, and analyze exactly how much the stability using standard methods.
@user-tb2oj1tj4f
@user-tb2oj1tj4f 2 жыл бұрын
your explanation is best!
@curiores111
@curiores111 2 жыл бұрын
thank you 😄
@gvcallen
@gvcallen 2 жыл бұрын
Amazing video. Great high level overview of the math it takes to perform such a task as well, which is what I was mainly interested in. Thanks a lot!
@curiores111
@curiores111 2 жыл бұрын
Hi Gary, you're welcome and great to hear that! 😁
2 жыл бұрын
Thank you for sharing
@gabrielgraf2521
@gabrielgraf2521 2 жыл бұрын
Wow this Video help me alot thxx
@MohitGupta-qm6ff
@MohitGupta-qm6ff 2 жыл бұрын
Great video... 2nd order low pass filter tutorial will b of great help
@curiores111
@curiores111 2 жыл бұрын
Hi Mohit, I actually go over the 2nd order butterworth filter in the second half of the video ;)
@tihomirraicevic4761
@tihomirraicevic4761 2 жыл бұрын
Great video.
@alirezaakhavi9943
@alirezaakhavi9943 Жыл бұрын
really amazing video thank you very much! very informative beautifully explained and technical! subbed! :)
@malehakim248
@malehakim248 Жыл бұрын
First of all, this is a very much master piece. After getting frustrated in implementing a narrow-bandpass filter in the Analog world, am looking forward to implementing it in the digital world. Do you mind doing a video on using a bandpass filter?
@curiores111
@curiores111 Жыл бұрын
Appreciate the request. I actually have a analog filter video planned as well as bandpass/high-pass. Hard to get to them, though. Hopefully I will find some time soon.
@fikrizaini6443
@fikrizaini6443 Жыл бұрын
Thanks for this great lecture. Help me a lot in my final project😊
@curiores111
@curiores111 Жыл бұрын
Delighted to hear that fikri :)
@ramiramiz5555
@ramiramiz5555 2 жыл бұрын
Really that was amazing, i will recommend your video to my students.
@curiores111
@curiores111 2 жыл бұрын
Thanks Rami, very kind.
@andrewandrosow4797
@andrewandrosow4797 Жыл бұрын
Hello! Good video! For the first.There are loat of calculations with floating point - it takes a lot of processor time because there isn`t any FPU.The RAM can be too little. It is real to implementation a moving average filter - but this filter is more fit to time domain (it`s bad filtering in frequency domain).
@SLguitarGuy
@SLguitarGuy 2 жыл бұрын
Good explanation
@gkhnylmz53
@gkhnylmz53 7 ай бұрын
Omg thank you so much 😍
@curiores111
@curiores111 7 ай бұрын
You are so welcome! 😊
@TheOmnimorpheus
@TheOmnimorpheus 2 жыл бұрын
Very good explanation 👍🏻👍🏻👍🏻👍🏻👍🏻
@MEan0207
@MEan0207 3 жыл бұрын
thank you! It's great and very useful video.
@curiores111
@curiores111 3 жыл бұрын
glad to hear that! Thanks for stopping by. :)
@Petch85
@Petch85 Жыл бұрын
This was a grate refresh of and old cause I took years ago. But I have some questions. 1. What influence dos the sampling frequency have. What would happen if you sampled slow or if you sampled super fast? (say 100 Hz and 10kHz) 2. If it was sound. If I needed real time sound, say I was recording on my pc, and I could only allow a delay of 5 ms, who would I find the order I could accept. 3. And if it was sound and the phase change is different for different frequencies, how high an order could I accept without hearing the phase change? Assuming it was for a recording and the delay could be handled before combining with other signals. 4. If you have multiple signals and you want a low of high pass filter on all the signals, is it better to apply the filters on each signal chain or only one filter on the combined signal. You know it is a good video when you just keep coming up with new questions. 🙂
@tonyray91
@tonyray91 Жыл бұрын
Very impressive
@Kaka-zs4cp
@Kaka-zs4cp 2 жыл бұрын
I freaking Love you. Thank you very much
@Dheerajsingh0509
@Dheerajsingh0509 2 жыл бұрын
Who are you my love? You have made my life easy. Thank you.
@tomitomi7941
@tomitomi7941 Жыл бұрын
Thank you.
@marcinwitkowski2981
@marcinwitkowski2981 2 жыл бұрын
9999999!!!!!!!!!!!!! the best explanation EVER !!!!!!!!!!!!!!!
@sametkarakoyunlu8835
@sametkarakoyunlu8835 Жыл бұрын
Great !!
@qli880
@qli880 2 жыл бұрын
I took a dynamic system course at university 4 years ago and still not clear about the phase diagram mean in the bode plot until I watched this video.
@curiores111
@curiores111 2 жыл бұрын
That's *exactly* what I thought about the phase plot. One of the reasons I included so much detail in this video. Thanks for noticing Q.
@RESC_Eng
@RESC_Eng 2 жыл бұрын
your videos are fantastic reference.really the words is too few to thank you. I do the same using matlab , it is simpler than python code, just two or three instructions do the same.
@eyadmothana5506
@eyadmothana5506 2 ай бұрын
I always want to learn about these things. But never find any. Thank u very much
@user-fe7iy2cl6h
@user-fe7iy2cl6h Жыл бұрын
Congratulations for this great work, it's very useful. Please let us know how you did you get coefficients a and b.
@botanysilkiebreeders7732
@botanysilkiebreeders7732 Жыл бұрын
A Low Pass filter acts as an integrator too. This content is only available in my 4th year UNI, you learn all the prerequisite math but it's up to you to figure out how to apply the math for hardware applications.
@jaydeepumarya1110
@jaydeepumarya1110 8 ай бұрын
Really nice video 🎉🎉❤❤
@curiores111
@curiores111 8 ай бұрын
Appreciate this 😊
@alirezasarrami1955
@alirezasarrami1955 Жыл бұрын
very nice
@qzorn4440
@qzorn4440 6 ай бұрын
What wonderful example and a beautiful voice. 😎 Thank you. Is there something better?
@EmbeddedEnigma
@EmbeddedEnigma 2 жыл бұрын
the video is nice, but man holyshit u were going quick through every step. I had to watch multiple other videos to understand the code here, I guess I am just dumb but u are going super quick and I think u should really include maths in this, that how u are calculating the formulas and etc, because who ever will watch it, they just don't want to copy and paste stuff, they are watching this video to understand the concepts and modify stuff for there own need. And I know u have included python script to modify the cutoff frequency to our use but still need actual formulas to understand the stuff. Dont take this comment as negative, It still helped me.
@curiores111
@curiores111 2 жыл бұрын
Thanks for the feedback Haseeb, it is valuable. Here are a few of my thoughts: I can understand why you would like to see the details of the math. Unfortunately the details do really require a lot more flushing out (at least an hour). For this video, the intention is to give the high level overview and access to the necessary tools. In other words, the goal is to get you to the practical application of the tools as quickly as possible. For many, spending a lot of time on the theory can be frustrating and uninteresting. TBH, I wouldn't mind creating an hour long video about the math (I have a PhD in applied math), I just have no idea if anyone would watch it.
@subhadipsaha2667
@subhadipsaha2667 2 жыл бұрын
Awesome tutorial. I was still wondering how is the phase delay calculated ? and, How can we compensate that ? Thanks.
@Jintsoo
@Jintsoo Жыл бұрын
This is amazing, DSP looks like pure magic when filtering out those harmonics!! A question regarding the math derivation, is that something you would realistically derive each time for every type of filter, or is it something you would memorize the implementation of? Because the math looks hard and I even studied that stuff 😅
@curiores111
@curiores111 Жыл бұрын
Definitely wouldn't derive it every time. You would write software...or use already written software. There are a few different options.
FIR Filter Design and Software Implementation - Phil's Lab #17
30:35
How to control a DC motor with an encoder
9:30
Curio Res
Рет қаралды 423 М.
Вечный ДВИГАТЕЛЬ!⚙️ #shorts
00:27
Гараж 54
Рет қаралды 14 МЛН
I wish I could change THIS fast! 🤣
00:33
America's Got Talent
Рет қаралды 110 МЛН
ОСКАР vs БАДАБУМЧИК БОЙ!  УВЕЗЛИ на СКОРОЙ!
13:45
Бадабумчик
Рет қаралды 2,9 МЛН
Я нашел кто меня пранкует!
00:51
Аришнев
Рет қаралды 3,8 МЛН
15 | Combine a gyroscope and accelerometer to measure angles - precisely
9:49
The Simplest Digital Filter (STM32 Implementation) - Phil's Lab #92
23:31
How Low Pass Filters Work
8:37
Matthew Johnson
Рет қаралды 33 М.
Passive RC low pass filter tutorial!
8:33
Afrotechmods
Рет қаралды 873 М.
How to Implement an FIR Filter in C++ [DSP #15]
8:39
WolfSound
Рет қаралды 12 М.
How to build an Arduino controlled solar charger
16:20
Curio Res
Рет қаралды 85 М.
DC motor PID speed control
15:29
Curio Res
Рет қаралды 222 М.
RC Low Pass Filter Explained (with Speaker Example)
8:30
66. Low Pass Active Filters
59:44
The Offset Volt
Рет қаралды 117 М.
Applied DSP No. 9: The z-Domain and Parametric Filter Design
21:16
Youngmoo Kim
Рет қаралды 21 М.
Gizli Apple Watch Özelliği😱
0:14
Safak Novruz
Рет қаралды 6 МЛН
OZON РАЗБИЛИ 3 КОМПЬЮТЕРА
0:57
Кинг Комп Shorts
Рет қаралды 506 М.
Урна с айфонами!
0:30
По ту сторону Гугла
Рет қаралды 8 МЛН
Хотела заскамить на Айфон!😱📱(@gertieinar)
0:21
Взрывная История
Рет қаралды 5 МЛН
When you have 32GB RAM in your PC
0:12
Deadrig Gaming
Рет қаралды 1,2 МЛН
КРУТОЙ ТЕЛЕФОН
0:16
KINO KAIF
Рет қаралды 2,3 МЛН