Is there a way to extract only the content related to the main and important frequencies when we get the FFT and have the information related to the important frequencies only (amplitude and frequency especially)? with help of @dan boschen so it became clear that such a work is acceptable with a good approximation that if we use the high amplitudes,it can be said that we have extracted the original signal with a good estimate.
Now, if I want to show the amplitude and frequency of the main signals with parameters, what should I do?
That is, instead of checking the entire block, we should only check two parameters that are a measure of the frequency and ampitude of the entire block.(memory constrain problem)
What comes to my mind is step by step:
1- Taking fft with specific length
2- Finding the main components of the signal: 1- their amplitude 2- their frequency
3- Showing the amplitude and frequency of the entire block, each with one parameter For the amplitude after taking FFT, well :
1- get the maximum amplitude
2- The whole block should be divided by the maximum amplitude.
3- I should note the amplitude greater than 0.5 and their frequency.
4- Consider a factor for amplitude, for example, mean
- 5- I can't think of anything for the frequency any suggestion
1- Is this procedure logical?
2- Do you have a better suggestion?
3- Regarding the frequency, do you know a parameter that can express the frequencies in the signal
What is my goal? I want to be able to find out if there are any changes in the signal ( its frequency and amplitude are changed ) by comparing these two parameters. and not by checking the entire signal block.
here is pseudocode that what im gonna do :
fft_magnitude[N]=....
max_fft=max; // find maximum
fft_magnitude / max_fft; //scale all magnitudes
//finding bins that have amplitude >0.5
for( i=0 ; i<N ; i++ ){
if( fft_magnitude[i] > 0.5 ){
bin_buff[j]=i; // save index of bin that have amplitude>0.5
j++ ;
}
}
//calculate mean of bins that have amplitude>0.5
while( bin_buff[j]!=0 ){
sum+=fft_magnitude[ bin_buff[j] ]; //summation of bins that have amplitude>0.5
j++;
counter++; //to use for mean calculate
}
mean= sum / counter ;
amplitude_content=mean ;
frequency_content=? ; // now we have index of bins -->so we have frequency
//but i dont know how & what parameter should be used that indicates frequency content like mean ,std_dev ....
.....
//calculate frequency_content & amplitude_content for all signal
//so we will have data like:
//data[2] that contain data[0]=amplitude_content & data[1]=frequency_content
//and next use correlation to calculate how similar new data is to previous data ;
this is my approach but the frequency content is problem yet, How do I give a value to the frequency content? Do you know a suitable parameter?
and this is an example : we have strong amplitudes in the range of 22,30,45,67 Hz and if we want to see what frequency changes we had, I just want to check the dominant frequencies Now here we have 4 more dominant frequencies, but I mean more generally, that is, in places where even more frequencies have high amplitude, is there a way to have a feature that represents the dominant frequencies?




