Finding peak value of distorted sine wave signal with varying phase shift of harmonics

9 views (last 30 days)
I am trying to simulate effect of phase angle variation of harmonic on peak value of the fundamental signal.
My harmonics are ranging from fundamental to 21storder. At the moment I am studying impact of each harmonic order individually. For each harmonic order , I am varying phase angle form 0 degree to 359 degree and reading the peak of the signal ( as can be seen in code) and storing the angle corresponding to maximum and minimum peak values. Code is for 5th harmonic only but I want to extend it to do same thing for all 21 harmoics and storeresults in a table.
clear all
clc
f=50; %frequency [Hz]
a1=10; %amplitude fundamental
phi1=0; %phase fundamental
a2=1; %amplitude of harmonic [V]
phi2=0:1:360; %phase harmonic
t=0:1/1e6:0.02;
y_fund=a1*sin(2*pi*f*t+phi1);
for i= 1:length(phi2)
y_5h=a2.*sin(2*pi*5*f*t+phi2(i)*pi/180);
Total_sig= y_fund+y_5h; %Total signal generation
hold on
plot(t,y_fund,t,y_5h,t,Total_sig)
peak_Total_signal(i) = max(Total_sig); % saving peak values to array
end
max_val = max(peak_Total_signal); % finding maximum of all peak values
min_val = min(peak_Total_signal); % finding min. of all peak values
idx_max = find(peak_Total_signal==max_val);
idx_min = find(peak_Total_signal==min_val);
phase_max= phi2(idx_max); % finding phase angle corresponding to max peak value
phase_min= phi2(idx_min); % finding phase angle corresponding to min peak value
array= table(max_val,phase_max, min_val,phase_min)
My problems are:
Q1: Though I am able to find peaks in waveform, But I alos want to find the valley point in the waveform as shown in figure ( only shown for 5thharmonic 180 degree pahse) below for each of the 0:360 angles.
Q2: I want to find the phase angle at which maximum shift in Zero crossing from the fundamental point (0.01 sec in figure) occurs, as shown by double arrows in figure. I have to do it for 21 harmonic signals.
Q3: I have to do it for 21 harmonics, considering all together at the same time. But it would be very inefficient to use for loops as there would be 21 nested for loops each varying from 0 to 360 degrees.
Is there any other approach to find the combination of phase angles for all 21 harmonics at which maximum and minimum peak is obtained and max. positive and max negative shift in zero-crossing occurs.
Help on any of the above questions would be precious for me.
Thanks

Accepted Answer

David Goodmanson
David Goodmanson on 20 Mar 2022
Hello Haroon,
This answer addresses the first part, getting a maximum or "minimum-at-maximum" value. It's a lot easier to do this problem in terms of cosines instead of sines. If you have an answer in terms of cosine, then you can find the answer for sine with
cos(2*pi*f*n+t + phi_n) = sin(2*pi*f*n+t + [phi_n + pi/2] )
so <phi_n for sine> is just <phi_n for cos> + 90 degrees.
Cos maxes out at t = 0 and it's clear that you can get a max for the sum of all the terms simply by putting the value 1 for each of the cosines to be at the origin. For cos(2*pi*f*n+t + phi_n) that happens when phi_n is zero, so the phase angle for each of the 21 harmonics is zero. The sum of the whole works is Sum {n=1,21} a_n. For "minimum-at-maximum", set the phases of all the harmonics (not the fundamental) to pi = 180 degrees. Then the cosine for each of the harmonics has value -1 at t = 0 and the sum is a_1 - Sum {n=2,21} a_n.
The zero crossing part is definitely harder.

More Answers (1)

Image Analyst
Image Analyst on 19 Mar 2022
So just put that in a loop over all 21 harmonics.
  2 Comments
Haroon Zafar
Haroon Zafar on 19 Mar 2022
So using 21 nested for loops is th eonly way to do it.
And do you have any suggestions for the valley finding and zero crossing?
Image Analyst
Image Analyst on 20 Mar 2022
Why do you need 21 nested loops? I was thinking of having just one loop where you iterate over the 21 sets of parameters.

Sign in to comment.

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!