combine spectrogram result in one figure

3 ビュー (過去 30 日間)
nirwana
nirwana 2024 年 6 月 1 日
回答済み: Suraj Kumar 2024 年 8 月 6 日
I have 20 min signal and would like to combine its sepectogram become one spectrogram consecutively. my idea is put index of each S, P, T value and then joining together in one array then using imagesc. But I don't know if this flow is effective, since I have to combine for each 20 minutes into a month.
I write part of coding but I don't know how to looping index for spectogram result.
Please help me.
%% SPECTROGRAM
clc, close all, clear all
set(0,'DefaultFigureWindowStyle','docked')
datafold = uigetdir(pwd,'Select data Folder');
myfiles=dir([datafold '/*.DAT']);
N = length(myfiles) ; % total number of files
data = cell(N,1)
for i = 1:N
thisfile = myfiles(i).name ;
y = importdata(thisfile);
t=(0:length(y)-1)';
Nspec=512;
wspec=hamming(Nspec);
Noverlap=Nspec/2;
fs=100;
[Si,Fi,Ti,P]=spectrogram(y,wspec,Noverlap,Nspec,fs,'xaxis');
% nexttile
% imagesc(T/60,F,10*log10(P));
% axis xy;
% axesHandle.YLim = [0.1 10000];
% colormap default;
% cbar = colorbar;
% cbar.Label.String = {'Intensity in dB'};
% xlabel('Time (s)');
% ylabel('Freqwency(Hz)');
% title('Spectrogram with RemInsRes');
end

回答 (1 件)

Suraj Kumar
Suraj Kumar 2024 年 8 月 6 日
Hi Nirwana,
Based on my understanding, you want to combine the spectrogram results of multiple signal files into a single, continuous spectrogram plot by comprehensively looping through the spectrogram for individual files.
You can refer to the following steps along with the attached code snippets :
1. Initialize two empty arrays “combined_S” and “combined_T”, to store the concatenated spectrogram data and time indices from all files.
% Initialize empty arrays for concatenated results
combined_S = [];
combined_T = [];
2. Loop through the files and calculate the spectrogram of the current file. Then concatenate the power spectral density to “combined_S and time indices to “combined_T”.
% Calculate the spectrogram
[Si, Fi, Ti, Pi] = spectrogram(y, wspec, Noverlap, Nspec, fs, 'xaxis');
% Concatenate the results
combined_S = [combined_S, Pi];
if isempty(combined_T)
combined_T = Ti;
else
combined_T = [combined_T, Ti + combined_T(end)];
end
3. Then plot the combined spectrogram using “imagesc” function and further update the plot in each iteration of the loop to visualise the spectrogram built up gradually.
% Update the plot
imagesc(combined_T / 60, Fi, 10 * log10(combined_S));
axis xy;
drawnow;
See the output below for better understanding :
For more details on the “spectrogram” and “imagesc” function, kindly refer to the following documentations:
Happy Coding!

カテゴリ

Help Center および File ExchangeTime-Frequency Analysis についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by