Glad it was helpful. Two more videos are coming in this series which I'll be releasing over the next few weeks. However, you can see them already as I have linked to them on the end screen.
Great video. I especially like the part about the windowing function. You explain why it's needed really well. Hanning window is OK when you are dealing with low dynamic range. Like 10 to 20 dB. It falls short when you increase the dynamic range above that. I recommend the Kaiser window. It has somewhat narrow main lobes and is adjustable. You can even go above 100 dB of dynamic range. You can select the correct value for the Kaiser window based on how much dynamic range you need. For audio 50-60 dB is sufficient.
I just released the course today. If you sign up before 12th September, you can get a 10% discount by entering the coupon code: LAUNCHWEEK on the checkout page. Clicking on the following link should apply the code automatically: howthefouriertransformworks.com/courses/?coupon_code=LAUNCHWEEK
I just got a notification that you bought the course. Thanks. I hope you find it useful. If you have any questions, please email me at mark@howthefouriertransformworks.com
@@MarkNewmanEducation Yeah I bought it because your book saved me countless hours. I will probably let you know in a few months how I would rate it. Also, I’m close to becoming an instructor at a university, so if your course turns out to be legendary like the book, I would seriously consider making your book and online lessons a required text/supplement for students
Hi Mark could you please help, I follow what you are saying in the video, but for applications of the FFT, typically the algorithm does not ask for the Fs of the signal when I implement it in MATLAB or Python. At most it allows for me to specify the size if I want to pad it up to a different length, but it doesn’t need the Fs. I know how to scale the axis when it gives me an output, but how does it know what frequencies to test in the signal if I don’t feed it the sample rate? For example, If I have a function with frequency content up to say 10 MHz and I only have 10,000 data points with a sampling rate of 30 MHz, the FFT in programming doesn’t explicitly ask for the sampling rate, so wouldn’t it only check frequencies up to 10 kHz for the 10,000 points? Caveat that the result looks correct without the giving the sample rate. Why is this?
The FFT algorithm itself will not actually tell you the frequency of any of the sinusoids in your signal. It doesn't care about it. As far as it is concerned, it sees the frequency as an index which ranges from 0 to your FFT size rather than what we would like to see as a number in Hz. In the same way, the FFT algorithm won't directly tell you the Magnitude or Phase of each sinusoid. It only gives you the cosine (real) and sine (imaginary) components for each sinusoid in the signal. If you want to know the Frequency, Magnitude or Phase, you have to work it out for yourself from the list of complex numbers. In your example, you are sampling your signal at 3 times the highest frequency which is great. You won't miss out on any data. To work out the actual frequency of each item in the list, you need to take the position of the item (which will range from 0 to 9,999) and divide it by the number of samples in your FFT (10,000), then multiply the result by 30Mhz. This will give you the frequency in Hz. Just an observation: 10,000 samples is not a power of 2. If the FFT is running without giving you an error message, then MATLAB is doing something to your signal to make the number of samples a power of 2. Otherwise, the FFT cannot run. The shape of your output may well look right. However, check the actual sample values. They will be a scaled version of the real frequency of each sinusoid unless MATLAB is doing something really clever and is somehow working out what the sample rate is in some way. (For example, if you are feeding it 2 columns of data, one containing the timestamp of each sample and the other containing the amplitude).
If you feed your fft algorithm with a sample of size N, the fft by default gives the spectra for only N values of frequencies. But it could give you more. If you want more values, you trick the fft algorithm by using Zero padding (adding zeros to your original sample to increase artificially N without changing the information of the signal). Zero padding does nothing to address the sampling rate issue; it doesn't change the information contained in the signal.
Ahh. That's difficult. You really need to know something about your signal first. How do you know how big something is until you measure it, but the very act of measuring, in this case, has the potential to alter the measurement. It's more a case of deciding which frequency range interests you. For example, if this is an audio signal that you want humans to hear, filter out anything above 20kHz as we can't hear those frequencies anyway.
Thank you. Concise and accessible, yet still gives a surprisingly thorough introduction to sampling issues.
Glad it was helpful. Two more videos are coming in this series which I'll be releasing over the next few weeks. However, you can see them already as I have linked to them on the end screen.
I did not expect this video in my feed, but it's exactly what I need
Glad to have been of service.
im not an engineer, im learning EEG analisis and ur vudeos have been so helpfull, thanks and greettings from CDMX
OMG you are INCREDIBLE. what a treasure!
You're always so nice about my stuff! Thanks.
Welcome back sir! Great video as always!
Great video. I especially like the part about the windowing function. You explain why it's needed really well. Hanning window is OK when you are dealing with low dynamic range. Like 10 to 20 dB. It falls short when you increase the dynamic range above that. I recommend the Kaiser window. It has somewhat narrow main lobes and is adjustable. You can even go above 100 dB of dynamic range. You can select the correct value for the Kaiser window based on how much dynamic range you need. For audio 50-60 dB is sufficient.
Great tip. Thanks.
Very nicely explained.
Really happy to have helped.
Just ordered the book.
Brilliant , brilliant brilliant 👏.
Thanks so much.
This is fantastic, thanks!
You're very welcome!
Has the course been released yet? I clicked the link hoping to buy it but it said it was not available
I just released the course today. If you sign up before 12th September, you can get a 10% discount by entering the coupon code: LAUNCHWEEK on the checkout page. Clicking on the following link should apply the code automatically: howthefouriertransformworks.com/courses/?coupon_code=LAUNCHWEEK
@@MarkNewmanEducation Totally going to do it. Thanks a ton
I just got a notification that you bought the course. Thanks. I hope you find it useful. If you have any questions, please email me at mark@howthefouriertransformworks.com
@@MarkNewmanEducation Yeah I bought it because your book saved me countless hours. I will probably let you know in a few months how I would rate it. Also, I’m close to becoming an instructor at a university, so if your course turns out to be legendary like the book, I would seriously consider making your book and online lessons a required text/supplement for students
The boss is back!
Great video! Very entertaining
Glad you enjoyed it!
The G.O.A.T
Thanks.
Thank you ❤
You're welcome 😊
treasure chest found hiding on youtube! Thanks for sharing!
really good
real life sheldon cooper feels like hosting fun with flags but its actually really fun to watch
Hi Mark could you please help, I follow what you are saying in the video, but for applications of the FFT, typically the algorithm does not ask for the Fs of the signal when I implement it in MATLAB or Python. At most it allows for me to specify the size if I want to pad it up to a different length, but it doesn’t need the Fs. I know how to scale the axis when it gives me an output, but how does it know what frequencies to test in the signal if I don’t feed it the sample rate? For example, If I have a function with frequency content up to say 10 MHz and I only have 10,000 data points with a sampling rate of 30 MHz, the FFT in programming doesn’t explicitly ask for the sampling rate, so wouldn’t it only check frequencies up to 10 kHz for the 10,000 points? Caveat that the result looks correct without the giving the sample rate. Why is this?
The FFT algorithm itself will not actually tell you the frequency of any of the sinusoids in your signal. It doesn't care about it. As far as it is concerned, it sees the frequency as an index which ranges from 0 to your FFT size rather than what we would like to see as a number in Hz. In the same way, the FFT algorithm won't directly tell you the Magnitude or Phase of each sinusoid. It only gives you the cosine (real) and sine (imaginary) components for each sinusoid in the signal. If you want to know the Frequency, Magnitude or Phase, you have to work it out for yourself from the list of complex numbers. In your example, you are sampling your signal at 3 times the highest frequency which is great. You won't miss out on any data. To work out the actual frequency of each item in the list, you need to take the position of the item (which will range from 0 to 9,999) and divide it by the number of samples in your FFT (10,000), then multiply the result by 30Mhz. This will give you the frequency in Hz.
Just an observation: 10,000 samples is not a power of 2. If the FFT is running without giving you an error message, then MATLAB is doing something to your signal to make the number of samples a power of 2. Otherwise, the FFT cannot run. The shape of your output may well look right. However, check the actual sample values. They will be a scaled version of the real frequency of each sinusoid unless MATLAB is doing something really clever and is somehow working out what the sample rate is in some way. (For example, if you are feeding it 2 columns of data, one containing the timestamp of each sample and the other containing the amplitude).
How about zero padding the signal with low number of sample ? 🤔
Aha... you're anticipating next week's video. I've linked to it on the end screen.
If you feed your fft algorithm with a sample of size N, the fft by default gives the spectra for only N values of frequencies. But it could give you more. If you want more values, you trick the fft algorithm by using Zero padding (adding zeros to your original sample to increase artificially N without changing the information of the signal). Zero padding does nothing to address the sampling rate issue; it doesn't change the information contained in the signal.
@@keipfar And what if we insert zero between sparse less number of samples before FFT/DFT ?
@@polarizadmaxI am not aware of such techniques. My guess is you will distort the content of the signal. I don't know.
give some examples of the power of the fourier transform, always show applications
How do we find the highest frequency present in a signal?
Ahh. That's difficult. You really need to know something about your signal first. How do you know how big something is until you measure it, but the very act of measuring, in this case, has the potential to alter the measurement. It's more a case of deciding which frequency range interests you. For example, if this is an audio signal that you want humans to hear, filter out anything above 20kHz as we can't hear those frequencies anyway.
@@MarkNewmanEducation Thank for your kind reply sir.
have you used the FFT on thought?
No I haven't! That's an interesting idea. How would you measure thought?
We call aliasing VoIP 😂