0
$\begingroup$

I was expecting that when I take (for example, in MATLAB), s2 = fft(s1/norm(s1)), the norm of s2 is not equal one, norm(s2) $\neq$ 1.

I cannot figure out why this is! Can anyone shed light on this?

$\endgroup$
2
$\begingroup$

There are different conventions in scaling of the FFT, in MATLAB you need to scale it by $\sqrt{N}$, where $N$ is your number of samples. Saying it in matlabish:

clc, clear all
%% Create some sinusoidal signal with noise
t = linspace(0, 6*pi, 1000)+randn(1,1000);
s1 = sin(2*pi*t);
% Calculate the norm of s1
s1_norm = norm(s1);
display(sprintf('L2 norm of s1: %.2f', s1_norm))
%% Create signal s2 as the FFT of normalised s1
% Scale FFT by sqrt(N) - this is convention used in MATLAB
s2 = fft(s1)/sqrt(length(t));
% Calculate the norm of s2
s2_norm = norm(s2);
display(sprintf('L2 norm of s2: %.2f', s2_norm))
$\endgroup$
1
$\begingroup$

Depends on the scaling of the FFT pair for the conventional case (no scaling for the forward FFT and 1/N for the inverse FFT), the frequency domain norm will be higher by sqrt(N) where N is the FFT length.

The alternative would to to use 1/sqrt(N) for both forward and inverse FFT in which case the norm would be preserved. Both versions can be found in practice.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.