How to add harmonics to a signal ? Help please !!
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Is there anyone who can help me?
I need to add harmonics of a signal to that signal. Signal is given in vectorized form and it is a discrete signal. If fundamental frequency is w0, it will be 2*w0 for the first harmonic. But how can I find that signal with 2*w0 frequency ?
my samples of the signal s (in vectorized form): -0.239570299386578 0.1034882656331065 0.434308908352916 0.7137668996246224 0.9088106936857204 0.9963988158818323 0.9661854915005951 0.8217108676412244 0.5800958281197547 0.2698446607867672 -0.07226783043916135 -0.4058656575212867 -0.6914578691976684 -0.8952909939878536 -0.9932554094058046 -0.9737846003601184 -0.8391674550614948 -0.6053346354564043 -0.2999053926206244 0.04098635822626423
it's period = 18. I want to find the amplitute's of the signal with period 9 by using this values.. w0=0.34907 given. There are 16000 samples I have copied only 20 of them.
here is my code :
function [ans] = Harmonic(s,w0,k) % function to add harmonics to a discrete signal, s is the vector of input signal, w0 is frequency, k is the kth harmonic
scaled_N=2*pi/(w0*k); % period for the kth harmonic
scaled=[];
x=numel(s)/k; % sample length for the signal whose kth harmonic is calculated
for m=1:1:x
scaled(m,1)=s(k*m,1); % this finds the kth harmonic
end
s_m=1;
for n=1:1:numel(s)
if(s_m==x+1) % scaled has x elements when finished turn to back
s_m=1;
end
ans(n,1)=s(n,1)+scaled(s_m,1); % addition of input signal to the harmonic calculated form is the answer
s_m=s_m+1;
end
endfunction
Another information to control: answer for the 2nd harmonic is : -0.4651631214331491 0.2058778649250771 0.78240302743614 0.9998168889431442 0.7583239234595782 0.1687673574022643 -0.4982757042146062 -0.9365825373088779 -0.9450361644337291 -0.5196996978667562 0.1441694387646107 0.7418744468520158 0.9990539262062441 0.7976622821741386 0.2301705984679712 -0.4429761650440993 -0.9128086184270765 -0.9636524552140873 -0.5721915341654712 0.08191167943357644
But I'm stuck and cannot reach to the answer Thanks in advance.
2 commentaires
Rick Rosson
le 23 Avr 2012
Please EDIT your original question, paste your code into the question, and then FORMAT and INDENT your code so that it is readable. Thanks!
Rick Rosson
le 23 Avr 2012
Also, please add appropriate COMMENTS to your code explaining how it works. Thanks!
Réponse acceptée
Rick Rosson
le 23 Avr 2012
Does the following function do what you want?
function y = harmonic(x,k)
% assumes that x is a column vector
assert(size(x,1) > 0);
assert(size(x,2) == 1);
% Interpolate by k and add k-th harmonic:
y = interp(x,k) + repmat(x,k,1);
end
HTH.
Rick
Plus de réponses (0)
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!