The scope is clickable & draggable - interactive demo is here. The Fourier Series Coefficient plots are draggable as well (drag the marker).

Control Panel

**MatLab(©) code A**

This code calculates Fourier Series Coefficients of the selected time-domain signal.

```
```

% Control Systems Academy Example 18

%

% This example calculates the Fourier Series coefficients from various

% waveforms. Signals are reconstructed using the original (not modified by

% the reader) coefficients.

%

% 6/30/2017

clc; clear;

Ts = 0.1e-3; % sampling time

T = 0.2; % signal period

t = linspace(0,1,1/Ts+1); % form a time vector

x = zeros(1, length(t)); % form a zero vector to hold the selected waveform

y = zeros(1, length(t)); % form a zero vector to hold the selected waveform

which_wave = 'half_rectified_cosine'

num_of_coeffs = 5;

phase_shift = 0.0

% Make the desired wave

for k = 1:length(t),

t_mod = t(k) + T + phase_shift*T;

if strcmp(which_wave,'square')

if(mod(t_mod,T) <= (T/2))

x(k) = 1;

else

x(k) = - 1;

end

elseif strcmp(which_wave,'triangle')

x(k) = 4/T * (abs(mod(t_mod, T) - T/2) - T/4);

elseif strcmp(which_wave,'ramp')

if(mod(t_mod,T) <= (T/2))

x(k) = mod(2*t_mod,T)/T;

else

x(k) = mod(2*t_mod,T)/T - 1;

end

elseif strcmp(which_wave,'full_rectified_sine')

x(k) = abs(sin(2*pi*t_mod/T));

elseif strcmp(which_wave,'full_rectified_cosine')

x(k) = abs(cos(2*pi*t_mod/T));

elseif strcmp(which_wave,'half_rectified_sine')

x(k) = sin(2*pi*t_mod/T);

if(x(k) < 0), x(k) = 0; end

elseif strcmp(which_wave,'half_rectified_cosine')

x(k) = cos(2*pi*t_mod/T);

if(x(k) < 0), x(k) = 0; end

end

end

% Determine Fourier coefficients

a = [];

b = [];

a0 = 2*sum(x)/length(y);

c0 = a0 / 2;

for n = 1:num_of_coeffs,

a(n) = 2/T*sum(x .* cos(2*pi*n*t / T)) / (length(y) / T);

b(n) = 2/T*sum(x .* sin(2*pi*n*t / T)) / (length(y) / T);

c(n) = a(n)/2-j*b(n)/2;

end

% Form the complete c(n) vector

f = zeros(1,31);

for n = 1:num_of_coeffs

f(16+n) = c(n);

f(16-n) = conj(c(n));

end

f(16) = c0;

% Reconstruct the signal

y = y + c0;

for n = 1:num_of_coeffs,

y = y + a(n) * cos(2*pi*n*t/T) + b(n) * sin(2*pi*n*t/T);

end

subplot(311)

plot(t,x,t,y)

grid on

xlabel('time [s]')

ylabel('Amplitude')

subplot(312)

stem(-15:15,abs(f))

grid on

xlabel('c[n]')

ylabel('Magnitude')

subplot(313)

stem(-15:15,angle(f))

grid on

ylabel('Phase [rad]')

xlabel('c[n]')

% no more

**MatLab(©) code B**

This code reconstruct the time domain signal from the Fourier Series coefficients modified using the stem plots above.

```
```

% Control Systems Academy Example 18

%

% This example reconstructs the signal using the modifier Fourier series

% coefficients

%

% 6/27/2017

clc; clear;

Ts = 0.1e-3; % sampling time

T = 0.2; % signal period

t = linspace(0,1,1/Ts+1); % form a time vector

x = zeros(1, length(t)); % form a zero vector to hold the selected waveform

y = zeros(1, length(t)); % form a zero vector to hold the selected waveform

a0 = 0;

a(1) = 0;

a(2) = 0;

a(3) = 0;

a(4) = 0;

a(5) = 0;

a(6) = 0;

a(7) = 0;

a(8) = 0;

a(9) = 0;

a(10) = 0;

a(11) = 0;

a(12) = 0;

a(13) = 0;

a(14) = 0;

a(15) = 0;

b(1) = 0;

b(2) = 0;

b(3) = 0;

b(4) = 0;

b(5) = 0;

b(6) = 0;

b(7) = 0;

b(8) = 0;

b(9) = 0;

b(10) = 0;

b(11) = 0;

b(12) = 0;

b(13) = 0;

b(14) = 0;

b(15) = 0;

num_of_coeffs = 5;

c0 = a0 / 2;

for n = 1:num_of_coeffs,

c(n) = a(n)/2-j*b(n)/2;

end

% Form the complete c(n) vector

f = zeros(1,31);

for n = 1:num_of_coeffs

f(16+n) = c(n);

f(16-n) = conj(c(n));

end

f(16) = c0;

% Reconstruct the signal

y = y + c0;

for n = 1:num_of_coeffs,

y = y + a(n) * cos(2*pi*n*t/T) + b(n) * sin(2*pi*n*t/T);

end

subplot(311)

plot(t,y)

grid on

xlabel('time [s]')

ylabel('Amplitude')

subplot(312)

stem(-15:15,abs(f))

grid on

xlabel('c[n]')

ylabel('Magnitude')

subplot(313)

stem(-15:15,angle(f))

grid on

ylabel('Phase [rad]')

xlabel('c[n]')

% no more

**Time domain to Frequency Domain**

Trigonometric and complex Fourier Series definitions follow:

Zero-index coefficients are special case:

The a0 coefficient is the equal to twice the value of the DC offset of the signal:

The b0 coefficient is always zero:

Complex coefficients can be obtained from trigonometric coefficients as follows:

**Frequency domain to Time Domain**

The time domain signals can be reconstructed using the following formulas:

The Euler identity:

**Fourier Series of Square Wave**

For square wave with period T and x0 = -T/2

Split the a[n] evaluation integral to two parts, <-T/2,0> and (0,T/2>:

Therefore:

Split the b[n] evaluation integral to two parts:

Therefore:

The complex coefficients can be obtained from trigonometric coefficients as follows:

**Fourier Series of Full-wave Rectified Sine Wave**

Utilize the symmetry and the effectively doubled frequency:

Use a trig identity:

Therefore:

Even harmonics are zero due to the cosine term on the first line. The DC component is not zero.

Further, let's calculate the b[n] coefficient:

Use a trig identity:

Therefore:

All b[n] terms are zero since *n* is a natural number.

**Time domain phase shift vs. Frequency Spectrum**

As can be seen in the interactive demo above, the magnitude spectrum does not change with regards to time-domain phase shift.

The amount of time domain phase shift is directly correlated to the phase of the first harmonic.

E.g., look at the phase spectrum of these three square wave cases:

1) Zero time aligned with rising edge (non-interactive snapshot only):

2) Zero time aligned with the center of the flattop (non-interactive snapshot only):

3) Zero time aligned with falling edge (non-interactive snapshot only):

Q: If the time-domain signal is continuous, why is the frequency-domain spectrum not continuous as well?

A: Fourier series describes signals that are repetitive with period T. If a signal is not periodic, its effective period T becomes large and the Fourier Series coefficients become more dense. When T -> infinity, the Fourier Series spectrum becomes continuous and would be called Fourier Transform.

Further Reading

In MatLab, DSPs, and FPGAs.

.

The fundamentals of signal flow.

Introduction to dynamic systems.

It is all sine waves.

Please leave us a comment regarding the content at this page.