add the frequencySpectrum.m to plot the power spectrum
This commit is contained in:
parent
4bb74c4534
commit
c7035c6f6a
|
|
@ -0,0 +1,58 @@
|
|||
function [f,power] = frequencySpectrum(signal,freq_sampling,plt)
|
||||
%{
|
||||
function [f,power] = frequencySpectrum(signal,freq_sampling,plt)
|
||||
ex: [f,power] = frequencySpectrum(x, 40, 1)
|
||||
|
||||
Task: to generate the power spectrm of a signal
|
||||
|
||||
Inputs:
|
||||
-signal: the signal that we want to get FFT
|
||||
-freq_sampling: how many samples we want per second
|
||||
|
||||
Outputs:
|
||||
-f: vector of frequency
|
||||
-power: power spectrum of the input signal
|
||||
|
||||
Author: Tikea TE
|
||||
Date: 11/04/2025
|
||||
%}
|
||||
|
||||
n = length(signal); % this is our number of samples
|
||||
|
||||
% generate the frequency vector
|
||||
f = (0:n-1)*(freq_sampling/n); % fs/n is the frequency resolution, it tells how many hz are between each bin
|
||||
|
||||
% generate the power vector
|
||||
y = fft(signal,n); % compute DFT of the signal with the same length
|
||||
power = abs(y).^2/n; % compute the power(spectrum) of the DFT of the signal
|
||||
|
||||
% find the max value of the power and its index
|
||||
[val,ind] = max(power);
|
||||
|
||||
% plotting the figure
|
||||
if (plt)
|
||||
figure;
|
||||
subplot(1,3,1) % time plot
|
||||
t=0:1/freq_sampling:(n-1)/freq_sampling; % time range
|
||||
plot(t, signal)
|
||||
xticks(0:0.1*freq_sampling:n);
|
||||
xticklabels(0:0.1:n/freq_sampling);
|
||||
xlabel('Time (s)');
|
||||
ylabel('Amplitude (a.u.)');
|
||||
|
||||
subplot(1,3,2) % linear frequency plot
|
||||
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)')
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue