how to isolate harmonic component from figure
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hassan Abdelazeem
le 15 Mar 2022
Commenté : Simon Chan
le 16 Mar 2022
Dear all ,
If I have a signal with harmonic how can I automatical know the index (the position of each number of the harmonic) . In another way , I need to know when the harmonic happens.
The data are in the attachment file
0 commentaires
Réponse acceptée
Simon Chan
le 15 Mar 2022
Try the following to see whether this is what you want or not.
clear; clc;
load('xx.mat');
x = 1:length(xx);
% Separate entire signal into 3 sections
upperTh = 0.95*max(xx);
lowerTh = 0.95*min(xx);
index = xx<upperTh & xx>lowerTh;
istart = find(diff(index)==1);
iend = find(diff(index)==-1);
profile = arrayfun(@(r,s) xx(r:s),istart,iend,'uni',0); % 3 separate profiles
% Determine the positions of the turning points
[~,idx1] = cellfun(@(x) min(diff(diff(x)>0)),profile);
[~,idx2] = cellfun(@(x) max(diff(diff(x)>0)),profile);
rangeIdx = sort([idx1, idx2],2) + istart;
% Adding some offset besides turning points to find min/max
offset = 5;
harmonic = arrayfun(@(r,s) xx(r-offset:s+offset),rangeIdx(:,1),rangeIdx(:,2),'uni',0);
[maxValue,maxIdx] = cellfun(@max,harmonic);
[minValue,minIdx] = cellfun(@min,harmonic);
% Plot result only (Can be ignored)
for k = 1:3
subplot(3,1,k)
plot(x(rangeIdx(k,1)-offset:rangeIdx(k,2)+offset),harmonic{k});
title({sprintf('MinValue = %.4f, MinPos = %d',minValue(k),rangeIdx(k,1)-offset+minIdx(k)-1);...
sprintf('MaxValue = %.4f, MaxPos = %d',maxValue(k),rangeIdx(k,1)-offset+maxIdx(k)-1)});
grid on
end
2 commentaires
Simon Chan
le 16 Mar 2022
Use another approach to retrieve the positions of the hystersis loops as follows.
After that, you can use the start and end position index for further actions.
clear; clc;
load('m3rdr.mat');
xx = m3rdr(:,1);
yy = m3rdr(:,2);
% Extract the holes from the polygons
pgon = polyshape(xx,yy); % Build the polyshape, ignore the warning
polyout = holes(pgon); % Extract holes which are the hystersis loops
figure
subplot(2,2,1)
plot(pgon); % Display original signals
ax1 = gca;
title('Original shape');
xLimit = ax1.XLim;
yLimit = ax1.YLim;
grid(ax1,'on');
subplot(2,2,2)
plot(polyout); % Display the extracted holes
ax2 = gca;
title('Extract holes coordinates');
ax2.XLim = xLimit;
ax2.YLim = yLimit;
grid(ax2,'on');
for k = 1:length(polyout)
subplot(2,2,k+2)
% Start position of the extarcted hole
xstart = polyout(k).Vertices(1,1);
% End position of the extarcted hole, the last vertice is not used
xend = polyout(k).Vertices(end-1,1);
startIdx = find(xx == xstart);
endIdx= find(xx == xend);
plot(xx(startIdx:endIdx+1),yy(startIdx:endIdx+1));
hold on
grid on
plot(xx(startIdx),yy(startIdx),'g*'); % Start point showing green dot
plot(xx(endIdx+1),yy(endIdx+1),'r*'); % Last point showing red dot
title({sprintf('Start Position = %d',startIdx);...
sprintf('End Position = %d',endIdx+1)});
hold off
end
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Industrial Statistics dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!