Dominating frequency in a "clear" 50 Hz signal I am trying to find out the dominating frequency of a signal with a frequency of 50 Hz (sampled at 200 Hz - every 5 milliseconds).

The python code I am using to do this is the following (based on this):

import numpy
from numpy import sin
from math import pi

t = numpy.linspace(0, 1, 201)  # 200 Hz sampling rate
y = sin(2*pi*t*50)

fourier = numpy.fft.fft(y)
frequencies = numpy.fft.fftfreq(len(t), 0.005)  # where 0.005 is the inter-sample time difference
positive_frequencies = frequencies[numpy.where(frequencies &gt; 0)]
magnitudes = abs(fourier[numpy.where(frequencies &gt; 0)])  # magnitude spectrum

peak_frequency = numpy.argmax(magnitudes)


The peak frequency I get is 49 Hz, not 50 Hz (what I think I should obtain).

Is this the correct way to calculate the peak frequency? If yes, then can you please explain why this happens? Where is my mistake?

EDIT
Code modified according to SergV's answer:

import numpy
from numpy import sin
from math import pi

Fs=200.
F=50.
t = [i*1./Fs for i in range(200)]
y = sin(2*pi*numpy.array(t)*F)

fourier = numpy.fft.fft(y)
frequencies = numpy.fft.fftfreq(len(t), 0.005)  # where 0.005 is the inter-sample time difference
positive_frequencies = frequencies[numpy.where(frequencies &gt; 0)]  
magnitudes = abs(fourier[numpy.where(frequencies &gt; 0)])  # magnitude spectrum

peak_frequency = numpy.argmax(magnitudes)


The calculated peak frequency is still 49 Hz...

EDIT 2:
It seems that the problem was that the positive frequencies were not including 0. After changing the code to 

positive_frequencies = frequencies[numpy.where(frequencies &gt;= 0)]  
magnitudes = abs(fourier[numpy.where(frequencies &gt;= 0)])


the calculated dominating frequency was 50 Hz (as expected).

This is the magnitude spectrum I get: http://imgur.com/JxhnNc5 It shows that the dominating frequency is 50 Hz. Interestingly, even when, because of the bug, the calculated peak frequency was 49 Hz, the magnitude spectrum was showing the correct dominating frequency (50 Hz)
The size of $y$ is 201. So frequency bin of fft is not 1 Hz. Change code for calculating $t$:

Fs=200.
F=50.
t = [i*1./Fs for i in range(200)]


Now you have only 1 peak on 50 Hz.

P.S.


Plot magnitude spectrum
Try to modify F (49, 49.5, 49.67). Enjoy!


Welcome to DSP and new questions!