Skip to main content
Bumped by Community user
code language
Source Link
lennon310
  • 3.6k
  • 19
  • 25
  • 27

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code:

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code:

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code:

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}
void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code.:

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}
float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code.

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code:

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

added 38 characters in body
Source Link

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code.

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code.

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

I am very new to the concept of Fourier transforms and DFTs so please explain in as simple terms as possible.

I am messing around with Fourier transforms in processing. I wanted to determine the average wavelength of an input - trigonometric or otherwise.

void generateHeightsCos()
{
  heights = new float[xResolution][yResolution];
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      heights[x][y] = cos(2 * 3 * PI * x / xResolution);
    }
  }
}

I use the above code to generate a cosine curve (I'm also using a 2d input and 2d Fourier transforms which is unshifted but I can shift it). The transform looks like this - I don't think there's any problem here.

enter image description here

So now to get the average frequency (not wavelength I know but its in frequency domain) I used the following code.

float GetMeanFrequency(Complex[][] input)
{
  float total = 0;
  float totalCounts = 0;
  
  float count;
  for (int y = 0; y < yResolution; y++) {
    for (int x = 0; x < xResolution; x++) {
      count = input[x][y].magnitude();
      total += x * count;
      totalCounts += count;
    }
  }
  return total / totalCounts;
}

So the problem with this is the symmetry of Fourier transforms. Because of the symmetry it will return xResolution / 2 no matter the frequency of the input. I could add a condition so it only checks the left half but then it won't work for higher frequency inputs.

All answers are appreciated.

Source Link
Loading