# I need to create this sine wave in MATLAB. How does one go about it?

I was given the original sine wave(Image 1) and a noisy version of it too(Image 2).

Image 1

Image 2

Now to find the original signal, I am looking at the frequency in the first half of the graph which has the greatest value. This would be 21. When I try to create a sine wave with 21 as a frequency using the code below, I get the result of Image 3.

```% Creating the Sine Wave
t = (1:1:256);
A = 1;
y = A*sin(2*pi*max_index*t);

plot(t,y);
```

Image 3

Why is this the case. What am I doing wrong?

RUNNABLE CODE

Here is my Function:

```function [  ] = function1b( Sig_noise )

% Max Index is the frequency of the pure tone
noise_f = fft(Sig_noise);
s_nf = size(noise_f);
size_f = s_nf(2);
max = 0;
max_index = 1;
for n = 1:(size_f/2)
if abs(noise_f(n)) > max
max = abs(noise_f(n));
max_index = n;
end
end

% Creating the Sine Wave
t = (1:1:256);
A = 1;
y = A*sin(2*pi*max_index*t);

plot(t,y);

end
```

And I am calling it from this part of the script:

```load('Sig'); % Original Signal
Sig_noise2=awgn(Sig,10);
function1b(Sig_noise2);
```

Andras' Solution

This is the result I seem to be getting:

Using linspace(0,2,100); gives me this result:

```t = (1:1:256);
A = 1;
y = A*sin(2*pi*max_index*t);
```

While your amplitude is nice and big and 1, if max_index is integer then your phase inside the sin is an integer multiple of 2*pi for every t, which is exactly zero. This is why your function is numerically zero. You need the frequency of the max index:

```y = A*sin(2*pi*freq(max_index)*t);
```

if the frequencies are stored in freq, or if max_index already stands for a frequency, then use a denser t mesh, like

```t = linspace(1,256,1000);
```

You might be misinterpreting the output of fft. From help fft:

``` For length N input vector x, the DFT is a length N vector X,
with elements
N
X(k) =       sum  x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N.
n=1

The inverse DFT (computed by IFFT) is given by
N
x(n) = (1/N) sum  X(k)*exp( j*2*pi*(k-1)*(n-1)/N), 1 <= n <= N.
k=1
```

That means that the frequencies are not max_index, but (max_index-1)/N if your original sample has N points. This turns your flawed large frequency into the actual small frequency, solving your issues.

To break it down to you: try

```t = 1:256;
y = A*sin(2*pi*(max_index-1)/length(Sig_noise)*t);
```

I guess there is some problem in sampling rate. replace

```t=(1:1:256)
```

with

```t = (1:1/(f*3):3)
```

Here f=max_index =21