What is the correct normalization for a flat top window?
14 次查看(过去 30 天)
显示 更早的评论
Hi, I have a question about FFT. Considering that I have a data vector of accelerations sampled with an accelerometer and that I want to apply a flat top window, in order to obtain the most accurate amplitude in the FFT, what would be the right code for normalization in this specific case?
I tried this one, but I'm not sure if it's correct:
N=numel(data);
w=flattopwin(N);
X=2*fft(data.*w)/sum(w);
Thanks in advance for you help.
1 个评论
Mathieu NOE
2024-4-23
try with a sine wave of known amplitude for instance (amplitude = 1 could be quite convenient !)
采纳的回答
Sudarsanan A K
2024-4-29
Hello Claudio,
Your approach to applying a flat top window and performing the FFT to obtain accurate amplitude information from your data vector is on the right track. The flat top window is particularly useful in spectral analysis when accurate amplitude measurements are essential, as it provides a very flat spectrum for the main lobe, minimizing amplitude errors for signals within its bandwidth.
Here is a simple demonstration of the normalization:
%% I am using a simple signal which is sum of two sinusoids
% Parameters for the signal
fs = 1000; % Sampling frequency in Hz
T = 1; % Total time duration of the signal in seconds
f1 = 50; % Frequency of the first sine wave component in Hz
f2 = 150; % Frequency of the second sine wave component in Hz
A1 = 1.0; % Amplitude of the first sine wave component
A2 = 0.5; % Amplitude of the second sine wave component
% Generate the time vector
t = 0:1/fs:T-1/fs;
% Generate the signal
signal = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t);
%% Apply a flat top window
N = numel(signal);
w = flattopwin(N);
windowedSignal = signal .* w';
%% Perform the FFT
X = fft(windowedSignal);
%% Normalize the FFT output
X_normalized = 2 * abs(X) / sum(w);
% Frequency vector
f = (0:N-1)*(fs/N);
%% Plotting
figure;
subplot(2,1,1);
plot(t, signal);
title('Original Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(f(1:N/2), X_normalized(1:N/2));
title('Magnitude Spectrum with Flat Top Window');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
xlim([0 200]);
Also, consider the following:
- If you are using the FFT output to calculate power spectral density or similar metrics, further processing might be necessary.
- The choice of 2 as a normalization factor assumes you are analyzing the one-sided spectrum. If you are looking at the full spectrum or have complex-valued data, you might need to adjust this.
- Ensure that your signal of interest's frequency components fall within the main lobe of the flat top window's frequency response to benefit from its amplitude accuracy.
For more information about the "flattopwin" function, please refer to the documentation:
I hope this helps!
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Spectral Measurements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!