Clear Filters
Clear Filters

Filtering specific wavenumber range in Fourier Transforms result.

6 views (last 30 days)
Hello. I am currently dealing with the interference signal from the Coherence Scanning interferometer. My plan for processing the signal is as follows:
  1. Applying a discriminator to normalize the signal to the center amplitude at zero,
  2. Zero padding the signal to increase the resolution in the frequency domain.
  3. Doing FFT to convert the interference signal from scanning distance to spatial frequency domain ( um to rad/um).
  4. Filtering out the interested domain ( my light source is 380 nm to 780 nm, so I only care about the range from 8 ~ 17 rad/um).
  5. Calculating and unwrapping the phase from the filtered result.
  6. Compensating the phase with the phase error calculated by material properties.
  7. Doing IFFT with the compensated phase to convert it back to an interference signa
Figure 1. Original phase from interferogram.
Figure 2. Calculated phase error.
The problem is the wavenumber range of the interference signal is 0 to ~ 25 rad/um while the phase error I calculated only supports from 6~30 rad/um. I would like to know if there are any ways to take out entirely then wavenumber range from 8 ~17 rad/um and do the rest of my work on this range. I also shared my code and raw data here.
Thank you all for reading my problem. Hope you guys have a nice weekend.
  1 Comment
Umar
Umar on 13 Jul 2024
Hi Hoang,
After reading your comments, it seems that you are interested in excluding the wavenumber range from 8 to 17 rad/μm and focusing on the rest of the data within that range. Well, you could utilize filtering techniques to extract the desired wavenumber range for your analysis. After analyzing your code, you have already performed an FFT on the zero-padded discriminator data and filtered the FFT result based on a specified range of wave numbers but you modify this filtering step to exclude the range from 8 to 17 rad/μm by adjusting the filter_range accordingly.Here is my suggested modification to your code snippet for filtering the FFT result:
% Filtering the FFT result
filter_range = (wavenumber < 8 | wavenumber > 17);
filtered_fft_result = fft_result .* filter_range';
% Plot the updated filtered FFT magnitude figure;
plot(wavenumber(positive_freq_indices),
abs(filtered_fft_result(positive_freq_indices)), 'b-');
xlabel('Wave Number (rad/μm)');
ylabel('Filtered FFT Magnitude');
title(['Filtered FFT Magnitude for File ', num2str(file_num)]);
By updating the filter_range condition to exclude the wavenumber range from 8 to 17 rad/μm, now you can focus on analyzing the remaining data within your desired range. Please make sure to adapt any subsequent analysis steps in your code to work with the new filtered data within the specified wavenumber range. This way, you can effectively isolate and work with the specific data range that aligns with your phase error calculations.
If you encounter any issues or need further assistance with refining your data processing based on this modified approach, feel free to provide additional details or questions for more tailored guidance. Good luck!

Sign in to comment.

Answers (0)

Products


Release

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!