diff --git a/LIIEEng06SignalProcessing_T5.pdf b/LIIEEng06SignalProcessing_T5.pdf new file mode 100644 index 0000000..bc7ce34 Binary files /dev/null and b/LIIEEng06SignalProcessing_T5.pdf differ diff --git a/frequencySpectrum.m b/frequencySpectrum.m new file mode 100644 index 0000000..a72746c --- /dev/null +++ b/frequencySpectrum.m @@ -0,0 +1,47 @@ +function frequencySpectrum(signal, fs) +%%%%%%%%%%%%%%%%%% +%function frequencySpectrum(signal, fs) +% +% Task: Display the power spectrum of a given signal +% +% Input: +% - signal: the input signal to process +% - fs: the sampling rate +% +% Output: None +% +% +% Guillaume Gibert, guillaume.gibert@ecam.fr +% 25/04/2022 +%%%%%%%%%%%%%%%%%% + +n = length(signal); % number of samples + +y = fft(signal, n);% compute DFT of input signal +power = abs(y).^2/n; % power of the DFT + +[val, ind] = max(power); % find the mx value of DFT and its index + +% plots +figure; + +subplot(1,3,1) % time plot +t=0:1/fs:(n-1)/fs; % time range +plot(t, signal) +xticks(0:0.1*fs:n*fs); +xticklabels(0:0.1:n/fs); +xlabel('Time (s)'); +ylabel('Amplitude (a.u.)'); + +subplot(1,3,2) % linear frequency plot +f = (0:n-1)*(fs/n); % frequency range +plot(f,power, 'b*'); hold on; +plot(f,power, 'r'); +xlabel('Frequency (Hz)') +ylabel('Power (a.u.)') + +subplot(1,3,3) % log frequency plot +plot(f,10*log10(power/power(ind))); +xlabel('Frequency (Hz)') +ylabel('Power (dB)') + diff --git a/sampling.m b/sampling.m new file mode 100644 index 0000000..f2d9b91 --- /dev/null +++ b/sampling.m @@ -0,0 +1,32 @@ +function signal = sampling(signal_freq_1, signal_duration, signal_phase_1, sampling_freq, signal_freq_2, signal_phase_2) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%function signal = sampling(signal_freq_1, signal_duration, signal_phase_1, sampling_freq, signal_freq_2, signal_phase_2) +% ex.: signal = sampling(10, 1, 0, 20, 15, 0) +% +% Inputs: +% - signal_freq_1: frequency of the 1st cosine function in Hz +% - signal_duration: duration of the signal in seconds +% - signal_phase_1: phase of the 1st signal in rad +% - sampling_freq: sampling frequency in Hz +% - signal_freq_2: frequency of the 2nd cosine function in Hz +% - signal_phase_2: phase of the 2nd signal in rad +% +% +% Output: +% - signal: an array containing the samples of a cosine function sampled at the given sampling freq (in a.u.) +% signal = cos(2*pi*signal_freq_1*t+signal_phase_1)+cos(2*pi*signal_freq_2*t+signal_phase_2) +% +% Author: Guillaume Gibert, guillaume.gibert@ecam.fr +% Date: 04/03/2024 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +t=-signal_duration/2:1/sampling_freq:signal_duration/2; + +signal = cos(2*pi*signal_freq_1*t+signal_phase_1) +cos(2*pi*signal_freq_2*t+signal_phase_2); + +figure; +plot(t, signal); +xlabel('Time (s)'); +ylabel('Signal amplitude (a.u.)'); + +frequencySpectrum(signal, sampling_freq); + diff --git a/windowing.m b/windowing.m new file mode 100644 index 0000000..d4561e8 --- /dev/null +++ b/windowing.m @@ -0,0 +1,54 @@ +function signal = windowing(signal_freq, signal_duration, signal_phase, sampling_freq) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%function signal = windowing(signal_freq, signal_duration, signal_phase, sampling_freq) +% ex.: signal = windowing(10, 12, 0, 50) +% +% Inputs: +% - signal_freq: frequency of the cosine function in Hz +% - signal_duration: duration of the signal in seconds +% - signal_phase: phase of the signal in rad +% - sampling_freq: sampling frequency in Hz +% +% Output: +% - signal: an array containing the samples of a cosine function sampled at the given sampling freq and windowed (in a.u.) +% signal = cos(2*pi*signal_freq*t+signal_phase) +% +% Author: Guillaume Gibert, guillaume.gibert@ecam.fr +% Date: 04/03/2024 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% generates a time array +t=-signal_duration/2:1/sampling_freq:signal_duration/2; + +% generates a sampled signal +signal = cos(2*pi*signal_freq*t+signal_phase); + +% window duration is half of signal duration +windowDuration = signal_duration/2; +% creates rectangular time window +rectangularWin = zeros(1, length(t)); +for l_sample=1:windowDuration*sampling_freq + rectangularWin(l_sample+signal_duration*sampling_freq/4) = 1; +end + +figure; +plot(rectangularWin); + +for l_sample=1:signal_duration*sampling_freq + signal_rect(l_sample) = signal(l_sample) * rectangularWin(l_sample); +end + +figure; +plot(signal); hold on; +plot(signal_rect); + + + +% creates the Hanning time window + +% creates the Hamming time window + +% creates the Balckman time window + + +