From fec84e305f4da2267337e3a12298be9fd6aad762 Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Thu, 29 Oct 2020 13:28:20 +0100 Subject: [PATCH] Add link to home --- figs/velocity_time.png | Bin 37804 -> 37809 bytes index.html | 746 ++++++++++++++--------------------------- index.org | 5 +- 3 files changed, 257 insertions(+), 494 deletions(-) diff --git a/figs/velocity_time.png b/figs/velocity_time.png index e5f082a17542b05c01ee5a9a90d662525e1b22b9..c88d90698dc78601f5a1c800550216cd2b1695c9 100644 GIT binary patch literal 37809 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 Jt@g-_{{v%35#Im+ literal 37804 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 fr&#lUHOf?x-m0?3Qe8H*N - + - Spectral Analysis using Matlab - @@ -200,119 +15,63 @@ - - - + + -
+
+ UP + | + HOME +

Spectral Analysis using Matlab

Table of Contents

@@ -328,25 +87,25 @@ Some matlab documentation about Spectral Analysis can be found 1, some basics of spectral analysis are presented. +First, in section 1, some basics of spectral analysis are presented.

In some cases, we want to generate a time domain signal with defined Power Spectral Density. -Two methods are presented in sections 2 and 3. +Two methods are presented in sections 2 and 3.

-Finally, some notes are done on how to compute the noise level and signal level from a given Power Spectral Density in section 4. +Finally, some notes are done on how to compute the noise level and signal level from a given Power Spectral Density in section 4.

-
-

1 Spectral Analysis - Basics

+
+

1 Spectral Analysis - Basics

- +

-
+

All the files (data and Matlab scripts) are accessible here.

@@ -366,11 +125,11 @@ This include:
-
-

1.1 Sensitivity of the instrumentation

+
+

1.1 Sensitivity of the instrumentation

-A typical measurement setup is shown in figure 1 where we measure a physical signal which is here a velocity \(v(t)\) using a geophone. +A typical measurement setup is shown in figure 1 where we measure a physical signal which is here a velocity \(v(t)\) using a geophone. The geophone has some dynamics that we represent with \(G_g(s)\), its output a voltage. The output of the geophone is then amplified by a voltage amplifier with a transfer function \(G_a(s)\).

@@ -384,14 +143,14 @@ To obtain the real physical quantity \(v(t)\) as measured by the sensor from the

-
+

velocity_to_voltage.png

Figure 1: Schematic of the instrumentation used for the measurement

-Let's say, we know that the sensitivity of the geophone used is +Let’s say, we know that the sensitivity of the geophone used is \[ G_g(s) = G_0 \frac{\frac{s}{2\pi f_0}}{1 + \frac{s}{2\pi f_0}} \quad \left[\frac{V}{m/s}\right] \]

@@ -399,10 +158,10 @@ Let's say, we know that the sensitivity of the geophone used is The parameters are defined below.

-
G0 = 88; % Sensitivity [V/(m/s)]
-f0 = 2; % Cut-off frequency [Hz]
+
G0 = 88; % Sensitivity [V/(m/s)]
+f0 = 2; % Cut-off frequency [Hz]
 
-Gg = G0*(s/2/pi/f0)/(1+s/2/pi/f0);
+Gg = G0*(s/2/pi/f0)/(1+s/2/pi/f0);
 
@@ -410,21 +169,21 @@ Gg = G0* -
Ga = 1000;
+
Ga = 1000;
 
-
-

1.2 Convert the time domain from volts to velocity

+
+

1.2 Convert the time domain from volts to velocity

-Let's here try to obtain the time domain signal \(v(t)\) from the measurement \(x\). +Let’s here try to obtain the time domain signal \(v(t)\) from the measurement \(x\).

-If \({G_a(s)}^{-1} {G_g(s)}^{-1}\) is proper, we can simulate this dynamical system to go from the voltage \(x\) to the velocity \(v\) as shown in figure 2. +If \({G_a(s)}^{-1} {G_g(s)}^{-1}\) is proper, we can simulate this dynamical system to go from the voltage \(x\) to the velocity \(v\) as shown in figure 2.

@@ -432,7 +191,7 @@ If \({G_a(s)}^{-1} {G_g(s)}^{-1}\) is not proper, we add low pass filters at hig

-
+

voltage_to_velocity.png

Figure 2: Schematic of the instrumentation used for the measurement

@@ -440,16 +199,16 @@ If \({G_a(s)}^{-1} {G_g(s)}^{-1}\) is not proper, we add low pass filters at hig

-Let's load the measured \(x\). +Let’s load the measured \(x\).

-
data = load('mat/data_028.mat', 'data'); data = data.data;
+
data = load('mat/data_028.mat', 'data'); data = data.data;
 
-t = data(:, 3); % Time vector [s]
-x = data(:, 1)-mean(data(:, 1)); % The offset if removed (coming from the voltage amplifier) [v]
+t = data(:, 3); % Time vector [s]
+x = data(:, 1)-mean(data(:, 1)); % The offset if removed (coming from the voltage amplifier) [v]
 
-dt = t(2)-t(1); % Sampling Time [s]
-Fs = 1/dt; % Sampling Frequency [Hz]
+dt = t(2)-t(1); % Sampling Time [s]
+Fs = 1/dt; % Sampling Frequency [Hz]
 
@@ -457,7 +216,7 @@ Fs = 1/ We simulate this system with matlab using the lsim command.

-
v = lsim(inv(Gg*Ga), x, t);
+
v = lsim(inv(Gg*Ga), x, t);
 
@@ -465,7 +224,7 @@ We simulate this system with matlab using the lsim command. And we plot the obtained velocity

-
+

velocity_time.png

Figure 3: Computed Velocity from the measured Voltage

@@ -473,8 +232,8 @@ And we plot the obtained velocity
-
-

1.3 Power Spectral Density and Amplitude Spectral Density

+
+

1.3 Power Spectral Density and Amplitude Spectral Density

From the Matlab documentation: @@ -520,16 +279,16 @@ with:

-As explained in schmid12_how_to_use_fft_matlab, it is recommended to use the pwelch function the following way: +As explained in (Schmid 2012), it is recommended to use the pwelch function the following way:

First, define a window (preferably the hanning one) by specifying the averaging factor na.

-
nx = length(v);
-na = 8;
-win = hanning(floor(nx/na));
+
nx = length(v);
+na = 8;
+win = hanning(floor(nx/na));
 
@@ -537,30 +296,30 @@ win = hanning(floor
-
[Sv, f] = pwelch(v, win, 0, [], Fs);
+
[Sv, f] = pwelch(v, win, 0, [], Fs);
 

-The obtained PSD is shown in figure 4. +The obtained PSD is shown in figure 4.

-
+

psd_velocity.png

Figure 4: Power Spectral Density of the measured velocity

-The Amplitude Spectral Density (ASD) is defined as the square root of the Power Spectral Density and is shown in figure 5. +The Amplitude Spectral Density (ASD) is defined as the square root of the Power Spectral Density and is shown in figure 5.

\begin{equation} \Gamma_{vv}(f) = \sqrt{S_{vv}(f)} \quad \left[ \frac{m/s}{\sqrt{Hz}} \right] \end{equation} -
+

asd_velocity.png

Figure 5: Power Spectral Density of the measured velocity

@@ -568,22 +327,22 @@ The Amplitude Spectral Density (ASD) is defined as the square root of the Power
-
-

1.4 Modification of a signal's Power Spectral Density when going through an LTI system

+
+

1.4 Modification of a signal’s Power Spectral Density when going through an LTI system

Instead of computing the time domain velocity before computing the Power Spectral Density, we could have directly computed the PSD of the measured voltage \(x\) and then take into account the sensitivity of the measurement devices to have the PSD of the velocity.

-To do so, we use the fact that a signal \(u\) with a PSD \(S_{uu}\) going through a LTI system \(G_(s)\) (figure 6) will generate a signal \(y\) with a PSD: +To do so, we use the fact that a signal \(u\) with a PSD \(S_{uu}\) going through a LTI system \(G_(s)\) (figure 6) will generate a signal \(y\) with a PSD:

\begin{equation} S_{yy}(\omega) = \left|G(j\omega)\right|^2 S_{uu}(\omega) \end{equation} -
+

velocity_to_voltage_psd.png

Figure 6: Schematic of the instrumentation used for the measurement

@@ -605,10 +364,10 @@ Thus, we could have computed the PSD of \(x\) and then obtain the PSD of the vel The PSD of \(x\) is computed below.

-
nx = length(x);
-na = 8;
-win = hanning(floor(nx/na));
-[Sx, f] = pwelch(x, win, 0, [], Fs);
+
nx = length(x);
+na = 8;
+win = hanning(floor(nx/na));
+[Sx, f] = pwelch(x, win, 0, [], Fs);
 
@@ -616,16 +375,16 @@ win = hanning(floor
-
Svv = Sx.*squeeze(abs(freqresp(inv(Gg*Ga), f, 'Hz'))).^2;
+
Svv = Sx.*squeeze(abs(freqresp(inv(Gg*Ga), f, 'Hz'))).^2;
 

-The result is compare with the PSD computed from the \(v\) signal obtained with the lsim command in figure 7. +The result is compare with the PSD computed from the \(v\) signal obtained with the lsim command in figure 7.

-
+

psd_velocity_lti_method.png

Figure 7: Obtain PSD of the velocity using the formula (png, pdf)

@@ -633,15 +392,15 @@ The result is compare with the PSD computed from the \(v\) signal obtained with
-
-

1.5 From PSD of the velocity to the PSD of the displacement

+
+

1.5 From PSD of the velocity to the PSD of the displacement

-Similarly to what has been done in the last section, we can consider the displacement \(d\) can be obtained from the velocity \(v\) by going through an LTI system \(1/s\) as shown in figure 8. +Similarly to what has been done in the last section, we can consider the displacement \(d\) can be obtained from the velocity \(v\) by going through an LTI system \(1/s\) as shown in figure 8.

-
+

velocity_to_displacement_psd.png

Figure 8: Schematic of the instrumentation used for the measurement

@@ -680,15 +439,15 @@ Note here that the PSD (and ASD) of one variable and its derivatives/integrals a With Matlab, the PSD of the displacement can be computed from the PSD of the velocity with the following code.

-
Sd = Sv.*(1./(2*pi*f)).^2;
+
Sd = Sv.*(1./(2*pi*f)).^2;
 

-The obtained PSD of the displacement can be seen in figure 9. +The obtained PSD of the displacement can be seen in figure 9.

-
+

psd_velocity_displacement.png

Figure 9: PSD of the Velocity and Displacement (png, pdf)

@@ -696,14 +455,14 @@ The obtained PSD of the displacement can be seen in figure
-
-

1.6 Cumulative Power/Amplitude Spectrum

+
+

1.6 Cumulative Power/Amplitude Spectrum

The Cumulative Power Spectrum is the cumulative integral of the Power Spectral Density:

\begin{equation} -\label{orge0135a5} +\label{org19842f1} CPS_v(f) = \int_0^f PSD_v(\nu) d\nu \quad [(m/s)^2] \end{equation} @@ -711,7 +470,7 @@ The Cumulative Power Spectrum is the cumulative integral of the Power Spectral D It is also possible to integrate from high frequency to low frequency:

\begin{equation} -\label{org05d7308} +\label{orgc547762} CPS_v(f) = \int_f^\infty PSD_v(\nu) d\nu \quad [(m/s)^2] \end{equation} @@ -722,7 +481,7 @@ The Cumulative Power Spectrum taken at frequency \(f\) thus represent the power

The choice of the integral direction depends on the shape of the PSD. -If the power is mostly present at low frequencies, it is preferable to use equation \eqref{org05d7308}. +If the power is mostly present at low frequencies, it is preferable to use equation \eqref{orgc547762}.

@@ -737,37 +496,37 @@ The Root Mean Square value of the velocity corresponds to the Cumulative Amplitu

-With Matlab, the Cumulative Power Spectrum can be computed with the below formulas and the results are shown in figure 10. +With Matlab, the Cumulative Power Spectrum can be computed with the below formulas and the results are shown in figure 10.

-
CPS_v  = cumtrapz(f, Sv); % Cumulative Power Spectrum from low to high frequencies
-CPS_vv = flip(-cumtrapz(flip(f), flip(Sv))); % Cumulative Power Spectrum from high to low frequencies
+
CPS_v  = cumtrapz(f, Sv); % Cumulative Power Spectrum from low to high frequencies
+CPS_vv = flip(-cumtrapz(flip(f), flip(Sv))); % Cumulative Power Spectrum from high to low frequencies
 
figure;
-ax1 = subplot(1, 2, 1);
+ax1 = subplot(1, 2, 1);
 hold on;
-plot(f, CPS_v);
+plot(f, CPS_v);
 hold off;
-set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
-xlabel('Frequency [Hz]'); ylabel('Cumulative Power Spectrum [$(m/s)^2$]')
+set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
+xlabel('Frequency [Hz]'); ylabel('Cumulative Power Spectrum [$(m/s)^2$]')
 
-ax2 = subplot(1, 2, 2);
+ax2 = subplot(1, 2, 2);
 hold on;
-plot(f, CPS_vv);
+plot(f, CPS_vv);
 hold off;
-set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
-xlabel('Frequency [Hz]');
+set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
+xlabel('Frequency [Hz]');
 
-linkaxes([ax1,ax2],'xy');
-xlim([0.1, 500]); ylim([1e-15, 1e-11]);
+linkaxes([ax1,ax2],'xy');
+xlim([0.1, 500]); ylim([1e-15, 1e-11]);
 
-
+

cps_integral_comp.png

Figure 10: Cumulative Power Spectrum (png, pdf)

@@ -776,13 +535,13 @@ xlim( -

2 Time domain signal that approximate a PSD - TF technique

+
+

2 Time domain signal that approximate a PSD - TF technique

- +

-
+

All the files (data and Matlab scripts) are accessible here.

@@ -790,14 +549,14 @@ All the files (data and Matlab scripts) are accessible -

2.1 Signal's PSD

+
+

2.1 Signal’s PSD

We load the PSD of the signal we wish to replicate.

-
load('./mat/dist_psd.mat', 'dist_f');
+
load('./mat/dist_psd.mat', 'dist_f');
 
@@ -805,8 +564,8 @@ We load the PSD of the signal we wish to replicate. We remove the first value with very high PSD.

-
dist_f.f = dist_f.f(3:end);
-dist_f.psd_gm = dist_f.psd_gm(3:end);
+
dist_f.f = dist_f.f(3:end);
+dist_f.psd_gm = dist_f.psd_gm(3:end);
 
@@ -814,7 +573,7 @@ dist_f.psd_gm = dist_f.psd_gm(fig:psd_ground_motion
.

-
+

psd_ground_motion.png

Figure 11: PSD of the signal (png, pdf)

@@ -822,8 +581,8 @@ The PSD of the signal is shown on figure fig:ps
-
-

2.2 Transfer Function that approximate the ASD

+
+

2.2 Transfer Function that approximate the ASD

-
-

2.3 Generated Time domain signal

+
+

2.3 Generated Time domain signal

-We know that a signal \(u\) going through a LTI system \(G\) (figure 13) will have its ASD modified according to the following equation: +We know that a signal \(u\) going through a LTI system \(G\) (figure 13) will have its ASD modified according to the following equation:

\begin{equation} \Gamma_{yy}(\omega) = \left|G(j\omega)\right| \Gamma_{uu}(\omega) \end{equation} -
+

velocity_to_voltage_psd.png

Figure 13: Schematic of the instrumentation used for the measurement

@@ -872,27 +631,27 @@ Thus, if we create a random signal with an ASD equal to one at all frequency and To obtain a random signal with an ASD equal to one, we use the following code.

-
Fs = 2*dist_f.f(end); % Sampling Frequency [Hz]
-Ts = 1/Fs; % Sampling Time [s]
+
Fs = 2*dist_f.f(end); % Sampling Frequency [Hz]
+Ts = 1/Fs; % Sampling Time [s]
 
-t = 0:Ts:500; % Time Vector [s]
-u = sqrt(Fs/2)*randn(length(t), 1); % Signal with an ASD equal to one
+t = 0:Ts:500; % Time Vector [s]
+u = sqrt(Fs/2)*randn(length(t), 1); % Signal with an ASD equal to one
 

-We then use lsim to compute \(y\) as shown in figure 13. +We then use lsim to compute \(y\) as shown in figure 13.

-
y = lsim(G_gm, u, t);
+
y = lsim(G_gm, u, t);
 

-The obtained time domain signal is shown in figure 14. +The obtained time domain signal is shown in figure 14.

-
+

time_domain_u.png

Figure 14: Obtained time domain signal \(y(t)\) (png, pdf)

@@ -900,18 +659,18 @@ The obtained time domain signal is shown in figure 14.
-
-

2.4 Comparison of the Power Spectral Densities

+
+

2.4 Comparison of the Power Spectral Densities

We now compute the Power Spectral Density of the computed time domain signal \(y\).

-
nx = length(y);
-na = 16;
-win = hanning(floor(nx/na));
+
nx = length(y);
+na = 16;
+win = hanning(floor(nx/na));
 
-[pxx, f] = pwelch(y, win, 0, [], Fs);
+[pxx, f] = pwelch(y, win, 0, [], Fs);
 
@@ -919,7 +678,7 @@ win = hanning(floorfig:psd_comparison.

-
+

compare_psd_tf_technique.png

Figure 15: Comparison of the original PSD and the PSD of the computed time domain signal (png, pdf)

@@ -927,15 +686,15 @@ Finally, we compare the PSD of the original signal and the obtained signal on fi
-
-

2.5 Simulink

+
+

2.5 Simulink

One advantage of this technique is that it can be easily integrated into simulink.

-The corresponding schematic is shown in figure 16 where the block Band-Limited White Noise is used to generate a random signal with a PSD equal to one (parameter Noise Power is set to 1). +The corresponding schematic is shown in figure 16 where the block Band-Limited White Noise is used to generate a random signal with a PSD equal to one (parameter Noise Power is set to 1).

@@ -943,17 +702,17 @@ Then, the signal generated pass through the transfer function representing the w

-
+

simulink_psd_generate.png

Figure 16: Simulink Schematic

-We simulate the system shown in figure 16. +We simulate the system shown in figure 16.

-
out = sim('matlab/generate_signal_psd.slx');
+
out = sim('matlab/generate_signal_psd.slx');
 
@@ -961,54 +720,54 @@ We simulate the system shown in figure 16. And we compute the PSD of the generated signal.

-
nx = length(out.u_gm.Data);
-na = 8;
-win = hanning(floor(nx/na));
+
nx = length(out.u_gm.Data);
+na = 8;
+win = hanning(floor(nx/na));
 
-[pxx, f] = pwelch(out.u_gm.Data, win, 0, [], 1e3);
+[pxx, f] = pwelch(out.u_gm.Data, win, 0, [], 1e3);
 

-Finally, we compare the PSD of the generated signal with the original PSD in figure 17. +Finally, we compare the PSD of the generated signal with the original PSD in figure 17.

-
+

compare_psd_original_simulink.png

-

Figure 17: Comparison of the obtained signal's PSD and original PSD (png, pdf)

+

Figure 17: Comparison of the obtained signal’s PSD and original PSD (png, pdf)

-
-

3 Time domain signal that approximate a PSD - IFFT technique

+
+

3 Time domain signal that approximate a PSD - IFFT technique

- +

-
+

All the files (data and Matlab scripts) are accessible here.

-The technique comes from preumont94_random_vibrat_spect_analy (section 12.11). +The technique comes from (Preumont 1994) (section 12.11). It is used to compute a periodic signal that has any Power Spectral Density defined. It makes used of the Unversed Fast Fourier Transform (IFFT).

-
-

3.1 Signal's PSD

+
+

3.1 Signal’s PSD

We load the PSD of the signal we wish to replicate.

-
load('./mat/dist_psd.mat', 'dist_f');
+
load('./mat/dist_psd.mat', 'dist_f');
 
@@ -1016,8 +775,8 @@ We load the PSD of the signal we wish to replicate. We remove the first value with very high PSD.

-
dist_f.f = dist_f.f(3:end);
-dist_f.psd_gm = dist_f.psd_gm(3:end);
+
dist_f.f = dist_f.f(3:end);
+dist_f.psd_gm = dist_f.psd_gm(3:end);
 
@@ -1025,7 +784,7 @@ dist_f.psd_gm = dist_f.psd_gm(fig:psd_original.

-
+

psd_original.png

Figure 18: PSD of the original signal (png, pdf)

@@ -1033,18 +792,18 @@ The PSD of the signal is shown on figure fig:psd_ori
-
-

3.2 Algorithm

+
+

3.2 Algorithm

We define some parameters that will be used in the algorithm.

-
Fs = 2*dist_f.f(end);    % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
-N  = 2*length(dist_f.f); % Number of Samples match the one of the wanted PSD
+
Fs = 2*dist_f.f(end);    % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz]
+N  = 2*length(dist_f.f); % Number of Samples match the one of the wanted PSD
 T0 = N/Fs;               % Signal Duration [s]
-df = 1/T0;               % Frequency resolution of the DFT [Hz]
-                         % Also equal to (dist_f.f(2)-dist_f.f(1))
+df = 1/T0;               % Frequency resolution of the DFT [Hz]
+                         % Also equal to (dist_f.f(2)-dist_f.f(1))
 
@@ -1060,9 +819,9 @@ We then specify the wanted PSD. We create amplitudes corresponding to wanted PSD.

-
C = zeros(N/2,1);
-for i = 1:N/2
-  C(i) = sqrt(phi(i)*df);
+
C = zeros(N/2,1);
+for i = 1:N/2
+  C(i) = sqrt(phi(i)*df);
 end
 
@@ -1071,17 +830,17 @@ We create amplitudes corresponding to wanted PSD. Finally, we add some random phase to C.

-
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
+
theta = 2*pi*rand(N/2,1); % Generate random phase [rad]
 
-Cx = [0 ; C.*complex(cos(theta),sin(theta))];
-Cx = [Cx; flipud(conj(Cx(2:end)))];;
+Cx = [0 ; C.*complex(cos(theta),sin(theta))];
+Cx = [Cx; flipud(conj(Cx(2:end)))];;
 
-
-

3.3 Obtained Time Domain Signal

+
+

3.3 Obtained Time Domain Signal

The time domain data is generated by an inverse FFT. @@ -1091,13 +850,13 @@ The time domain data is generated by an inverse FFT. The ifft Matlab does not take into account the sampling frequency, thus we need to normalize the signal.

-
u = N/sqrt(2)*ifft(Cx); % Normalisation of the IFFT
-t = linspace(0, T0, N+1); % Time Vector [s]
+
u = N/sqrt(2)*ifft(Cx); % Normalisation of the IFFT
+t = linspace(0, T0, N+1); % Time Vector [s]
 
-
+

signal_time_domain.png

Figure 19: Obtained signal in the time domain (png, pdf)

@@ -1105,14 +864,14 @@ t = linspace( -

3.4 PSD Comparison

+
+

3.4 PSD Comparison

We duplicate the time domain signal to have a longer signal and thus a more precise PSD result.

-
u_rep = repmat(u, 10, 1);
+
u_rep = repmat(u, 10, 1);
 
@@ -1120,11 +879,11 @@ We duplicate the time domain signal to have a longer signal and thus a more prec We compute the PSD of the obtained signal with the following commands.

-
nx = length(u_rep);
-na = 16;
-win = hanning(floor(nx/na));
+
nx = length(u_rep);
+na = 16;
+win = hanning(floor(nx/na));
 
-[pxx, f] = pwelch(u_rep, win, 0, [], Fs);
+[pxx, f] = pwelch(u_rep, win, 0, [], Fs);
 
@@ -1132,7 +891,7 @@ win = hanning(floorfig:psd_comparison.

-
+

psd_comparison.png

Figure 20: Comparison of the PSD of the original signal and the PSD of the obtained signal (png, pdf)

@@ -1141,13 +900,13 @@ Finally, we compare the PSD of the original signal and the obtained signal on fi
-
-

4 Compute the Noise level and Signal level from PSD

+
+

4 Compute the Noise level and Signal level from PSD

- +

-
+

All the files (data and Matlab scripts) are accessible here.

@@ -1155,21 +914,21 @@ All the files (data and Matlab scripts) are accessible schmid12_how_to_use_fft_matlab sections 5 and 6. +Everything is explained in (Schmid 2012) sections 5 and 6.

-
-

4.1 Time Domain Signal

+
+

4.1 Time Domain Signal

-Let's first define the number of sample and the sampling time. +Let’s first define the number of sample and the sampling time.

-
N  = 10000; % Number of Sample
-dt = 0.001; % Sampling Time [s]
+
N  = 10000; % Number of Sample
+dt = 0.001; % Sampling Time [s]
 
-t = dt*(0:1:N-1)'; % Time vector [s]
+t = dt*(0:1:N-1)'; % Time vector [s]
 
@@ -1185,26 +944,26 @@ We generate of signal that consist of: The parameters are defined below.

-
asig = 0.1; % Amplitude of the signal [V]
-fsig = 10;  % Frequency of the signal [Hz]
+
asig = 0.1; % Amplitude of the signal [V]
+fsig = 10;  % Frequency of the signal [Hz]
 
-ahar = 0.5; % Amplitude of the harmonic [V]
-fhar = 50;  % Frequency of the harmonic [Hz]
+ahar = 0.5; % Amplitude of the harmonic [V]
+fhar = 50;  % Frequency of the harmonic [Hz]
 
-anoi = 1e-3; % RMS value of the noise
+anoi = 1e-3; % RMS value of the noise
 

-The signal \(x\) is generated with the following code and is shown in figure 21. +The signal \(x\) is generated with the following code and is shown in figure 21.

-
x = anoi*randn(N, 1) + asig*sin((2*pi*fsig)*t) + ahar*sin((2*pi*fhar)*t);
+
x = anoi*randn(N, 1) + asig*sin((2*pi*fsig)*t) + ahar*sin((2*pi*fhar)*t);
 
-
+

time_domain_x_zoom.png

Figure 21: Time Domain Signal (png, pdf)

@@ -1212,18 +971,18 @@ The signal \(x\) is generated with the following code and is shown in figure
-
-

4.2 Estimation of the magnitude of a deterministic signal

+
+

4.2 Estimation of the magnitude of a deterministic signal

-Let's compute the PSD of the signal using the blackmanharris window. +Let’s compute the PSD of the signal using the blackmanharris window.

-
nx = length(x);
-na = 8;
-win = blackmanharris(floor(nx/na));
+
nx = length(x);
+na = 8;
+win = blackmanharris(floor(nx/na));
 
-[pxx, f] = pwelch(x, win, 0, [], 1/dt);
+[pxx, f] = pwelch(x, win, 0, [], 1/dt);
 
@@ -1231,11 +990,11 @@ win = blackmanharris(floor
-
CG = sum(win)/(nx/na);
-NG = sum(win.^2)/(nx/na);
-fbin = f(2) - f(1);
+
CG = sum(win)/(nx/na);
+NG = sum(win.^2)/(nx/na);
+fbin = f(2) - f(1);
 
-pxx_norm = pxx*(NG*fbin/CG^2);
+pxx_norm = pxx*(NG*fbin/CG^2);
 
@@ -1243,8 +1002,8 @@ pxx_norm = pxx* -
isig = round(fsig/fbin)+1;
-ihar = round(fhar/fbin)+1;
+
isig = round(fsig/fbin)+1;
+ihar = round(fhar/fbin)+1;
 
@@ -1252,7 +1011,7 @@ ihar = round(fhar
-
srmt = asig/sqrt(2); % Theoretical value of signal magnitude
+
srmt = asig/sqrt(2); % Theoretical value of signal magnitude
 
@@ -1260,8 +1019,8 @@ The theoretical RMS value of the signal is: And we estimate the RMS value of the signal by either integrating the PSD around the frequency of the signal or by just taking the maximum value.

-
srms = sqrt(sum(pxx(isig-5:isig+5)*fbin)); % Signal spectrum integrated
-srmsp = sqrt(pxx_norm(isig) * NG*fbin/CG^2); % Maximum read off spectrum
+
srms = sqrt(sum(pxx(isig-5:isig+5)*fbin)); % Signal spectrum integrated
+srmsp = sqrt(pxx_norm(isig) * NG*fbin/CG^2); % Maximum read off spectrum
 
@@ -1305,8 +1064,8 @@ Thus, always the integrated method should be used.
-
-

4.3 Estimation of the noise level

+
+

4.3 Estimation of the noise level

The noise level can also be computed using the integration method. @@ -1316,7 +1075,7 @@ The noise level can also be computed using the integration method. The theoretical RMS noise value is.

-
nth = anoi/sqrt(max(f)) % Theoretical value [V/sqrt(Hz)]
+
nth = anoi/sqrt(max(f)) % Theoretical value [V/sqrt(Hz)]
 
@@ -1324,7 +1083,7 @@ The theoretical RMS noise value is. We can estimate this RMS value by integrating the PSD at frequencies where the power of the noise signal is above the power of the other signals.

-
navg = sqrt(mean(pxx_norm([ihar+10:end]))) % pwelch output averaged
+
navg = sqrt(mean(pxx_norm([ihar+10:end]))) % pwelch output averaged
 
@@ -1362,40 +1121,40 @@ The estimate of the noise level is quite good.
-
-

5 Further Notes

+
+

5 Further Notes

-
-

5.1 PSD of ADC quantization noise

+
+

5.1 PSD of ADC quantization noise

This is taken from here.

-Let's note: +Let’s note:

  • \(q\) is the corresponding value in [V] of the least significant bit (LSB)
  • \(\Delta V\) is the full range of the ADC in [V]
  • -
  • \(n\) is the number of ADC's bits
  • +
  • \(n\) is the number of ADC’s bits
  • \(f_s\) is the sample frequency in [Hz]

-Let's suppose that the ADC is ideal. +Let’s suppose that the ADC is ideal. The only noise comes from the quantization error. Interestingly, the noise amplitude is uniformly distributed.

The quantization noise can take a value between \(\pm q/2\), and the probability density function is constant in this range (i.e., it’s a uniform distribution). -Since the integral of the probability density function is equal to one, its value will be \(1/q\) for \(-q/2 < e < q/2\) (Fig. 22). +Since the integral of the probability density function is equal to one, its value will be \(1/q\) for \(-q/2 < e < q/2\) (Fig. 22).

-
+

probability_density_function_adc.png

Figure 22: Probability density function \(p(e)\) of the ADC error \(e\)

@@ -1443,16 +1202,17 @@ Finally:

-

Bibliography

-

+ +

Bibliography

+
+
Preumont, André. 1994. Random Vibration and Spectral Analysis. Solid Mechanics and Its Applications. Springer Netherlands. https://doi.org/10.1007/978-94-017-2840-9.
+
Schmid, Hanspeter. 2012. “How to Use the FFT and Matlab’s Pwelch Function for Signal and Noise Simulations and Measurements.” Institute of Microelectronics.
+

Author: Dehaeze Thomas

-

Created: 2019-12-02 lun. 15:47

-

Validate

+

Created: 2020-10-29 jeu. 13:28

diff --git a/index.org b/index.org index 483462f..4f731f0 100644 --- a/index.org +++ b/index.org @@ -4,6 +4,9 @@ #+EMAIL: dehaeze.thomas@gmail.com #+AUTHOR: Dehaeze Thomas +#+HTML_LINK_HOME: ../index.html +#+HTML_LINK_UP: ../index.html + #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: @@ -12,7 +15,7 @@ #+HTML_HEAD: #+HTML_HEAD: -#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}") +#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{config.tex}") #+PROPERTY: header-args:latex+ :imagemagick t :fit yes #+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150 #+PROPERTY: header-args:latex+ :imoutoptions -quality 100