1
$\begingroup$

I intend to perform spectral analysis with R stat:spectrum and then plot power spectrum.

My code is listed here:

  t <- seq(0,1024,by=0.1)
  x <- cos(2*pi*t) + 0.75*sin(2*pi*4*t) + 2*sin(2*pi*6*t)
  x.spec <- spectrum(x,log="no",span=5,plot=FALSE)
  del <- 0.1
  spx <- x.spec$freq/del
  spy <- 2*x.spec$spec
  plot(spy~spx,xlab="frequency",ylab="spectral density",type="l")

the signal has 3 periodic components with 1 Hz, 4 Hz, 6 Hz, but the final spectrum only shows the first 2 frequencies, without 6 Hz. And I don't know why the range of x.spec$freq is [0,0.5] before scaling.

Please tell me my possible concept misunderstanding and guide me how to plot the spectrum correctly. Thank you very much.

enter image description here

$\endgroup$
1
$\begingroup$

Hi: Your sampling frequency is $f_{s} = 10 $ but the frequency of the third component is $f_{3} = 6$.. Therefore, the nyquist criterion for the maximum frequency is not being met because $2 * 6 = 12$ which is not less than $f_{s} = 10$. I'm new at this but hopefully this is the reason why. Someone will surely correct me if not.

$\endgroup$
  • $\begingroup$ your answer helps me much, when I change sampling frequency to 20 Hz, that sampling period ts = 0.05 s, the result comes to what I expected. $\endgroup$ – dawei Feb 19 '18 at 3:24
  • $\begingroup$ i'm glad it helped. in fact, this is the first "pure-dsp" question that I've answered on this list so thanks for the question. $\endgroup$ – mark leeds Feb 19 '18 at 6:02
1
$\begingroup$

as @mark leeds suggested, my code changed as followed:

ts <- 0.05
fs <- 1/ts
t <- seq(0,512,by=ts)
x <- cos(2*pi*t) + 0.75*sin(2*pi*4*t) + 2*sin(2*pi*6*t)
x.spec <- spectrum(x,log="no",span=5,plot=FALSE)
spx <- x.spec$freq * fs
spy <- 2*x.spec$spec
plot(spy~spx,xlab="frequency",ylab="spectral density",type="l")

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.