filename = ('Book5.xlsx');
data = readmatrix(filename);
[samples,channels] = size(signal);
spectrogram_dB_scale = 80;
newsignal(:,ck) = decimate(signal(:,ck),decim);
samples = length(signal);
time = (0:samples-1)'*1/Fs;
leg_str{ck} = ['Channel ' num2str(ck) ];
figure(1),plot(time,signal);grid on
title(['Time plot / Fs = ' num2str(Fs) ' Hz ']);
xlabel('Time (s)');ylabel('Amplitude');
[freq, sensor_spectrum] = myfft_peak(signal,Fs,NFFT,OVERLAP);
sensor_spectrum_dB = 20*log10(sensor_spectrum);
pondA_dB = pondA_function(freq);
sensor_spectrum_dB = sensor_spectrum_dB+pondA_dB;
my_ylabel = ('Amplitude (dB (A))');
my_ylabel = ('Amplitude (dB (L))');
figure(2),plot(freq,sensor_spectrum_dB);grid on
title(['Averaged FFT Spectrum / Fs = ' num2str(Fs) ' Hz / Delta f = ' num2str(df,3) ' Hz ']);
xlabel('Frequency (Hz)');ylabel(my_ylabel);
[sg,fsg,tsg] = specgram(signal(:,ck),NFFT,Fs,hanning(NFFT),floor(NFFT*OVERLAP));
sg_dBpeak = 20*log10(abs(sg))+20*log10(2/length(fsg));
pondA_dB = pondA_function(fsg);
sg_dBpeak = sg_dBpeak+(pondA_dB*ones(1,size(sg_dBpeak,2)));
my_title = ('Spectrogram (dB (A))');
my_title = ('Spectrogram (dB (L))');
min_disp_dB = round(max(max(sg_dBpeak))) - spectrogram_dB_scale;
sg_dBpeak(sg_dBpeak<min_disp_dB) = min_disp_dB;
imagesc(tsg,fsg,sg_dBpeak);colormap('jet');
axis('xy');colorbar('vert');grid on
title([my_title ' / Fs = ' num2str(Fs) ' Hz / Delta f = ' num2str(df,3) ' Hz / Channel : ' num2str(ck)]);
xlabel('Time (s)');ylabel('Frequency (Hz)');
function pondA_dB = pondA_function(f)
n = ((12200^2*f.^4)./((f.^2+20.6^2).*(f.^2+12200^2).*sqrt(f.^2+107.7^2).*sqrt(f.^2+737.9^2)));
r = ((12200^2*1000.^4)./((1000.^2+20.6^2).*(1000.^2+12200^2).*sqrt(1000.^2+107.7^2).*sqrt(1000.^2+737.9^2))) * ones(size(f));
pondA_dB = 20*log10(pondA(:));
function [freq_vector,fft_spectrum] = myfft_peak(signal, Fs, nfft, Overlap)
[samples,channels] = size(signal);
s_tmp = zeros(nfft,channels);
s_tmp((1:samples),:) = signal;
offset = fix((1-Overlap)*nfft);
spectnum = 1+ fix((samples-nfft)/offset);
sw = signal((1+start):(start+nfft),:).*(window*ones(1,channels));
fft_spectrum = fft_spectrum + (abs(fft(sw))*4/nfft);
fft_spectrum = fft_spectrum/spectnum;
select = (1:(nfft+1)/2)';
fft_spectrum = fft_spectrum(select,:);
freq_vector = (select - 1)*Fs/nfft;