![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1114850/image.png)
How to fix a shift issue after taking hamonic mean?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Nisar Ahmed
le 24 Août 2022
Commenté : Mathieu NOE
le 12 Sep 2022
Hi everyone,
In the figure below, the red curve (Mdry) is the harmonic average of blue curve Md by using moving mean of 4 values. Due to harmic mean the red peak has been shifted a bit as shown in figure. How can I fix it? I have attached the data of both Md and Mdry. I am using following code to create a haromic mean (in such a way that the length of both Md and Mdry should remain same -- at the end).
Mdry = zeros(size(Md));
for k=1:length(Md)-3
Mdry(k)=harmmean(Md(k:k+3));
end
k = length(Md)-2;
Mdry(k) = harmmean(Md(k:k+2));
k = length(Md)-1;
Mdry(k) = harmmean(Md(k:k+1));
k = length(Md);
Mdry(k) = Md(k);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1106420/image.jpeg)
0 commentaires
Réponse acceptée
Mathieu NOE
le 2 Sep 2022
hello
is there a reason why the harmonic averaging is needed
here I compared it with a standard smoothing function with gaussain window (odd length) - yellow trace
seems to get similar results in terms of smoothing while better keeping peaks positions
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1114850/image.png)
Mdry = zeros(size(Md));
for k=1:length(Md)-3
Mdry(k)=my_harmmean(Md(k:k+3));
end
k = length(Md)-2;
Mdry(k) = my_harmmean(Md(k:k+2));
k = length(Md)-1;
Mdry(k) = my_harmmean(Md(k:k+1));
k = length(Md);
Mdry(k) = Md(k);
% my suggestion
Mdry2 = smoothdata(Md,'gaussian',7); % NB : odd window length to keep peak position closest to original position
plot(Md)
hold on
plot(Mdry)
plot(Mdry2)
hold off
function out = my_harmmean(in)
out = numel(in)./(sum(1./in));
end
4 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Fourier Analysis and Filtering 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!