2011-03-07 5 views
0

저는 작업중인 데이터 세트에 대해 FFT를 코딩했습니다. 내 의도는 결과의 폭포 음모를 만드는 것입니다,하지만 내가 겪고있는 문제는 내가 입력 데이터 크기를 변경하면 주파수 빈의 다른 수를 얻는 것입니다. 현재 필자는 입력해야하는 픽셀 수의 두 배 크기의 입력 데이터 세트를 만들고 있습니다. 나는 특정 데이터 세트 크기의 빈 빈을 특정 픽셀 수에 매핑하는 방법을 찾아 내려하고있다. 예를 들어, 500 값의 배열을 1250 요소 길이의 배열에 매핑합니다. 데이터 매핑에서 선형 및 비선형 보간을 수행하는 옵션을 갖는 것이 좋을 것입니다. 또 다른 방법으로, 값을 300 요소 길이의 배열에 매핑해야 할 수도 있습니다. 저는 수학 전공이 아니며이 문제에 대한 공란으로 떠오르고 있습니다.C#에서 FFT 빈 빈 분포를 다시 매핑하십시오.

답변

2

사용자가 입력해야하는 것은 입력하려는 픽셀의 수를 제로 패딩하기 만하면됩니다. 이 작업은 입력에 0을 추가하여 원하는 길이로 픽셀 단위로 가져 오기만하면됩니다. FFT가 수행되면 제로 패딩 이후의 길이에서 수행되고 픽셀이있는 것과 동일한 수의 출력 샘플을 제공합니다.

FFT 입력을 제로 - 패드하면 FFT는 본질적으로 주파수 도메인에서 자동으로 보간합니다. this을 확인하십시오. 주파수 도메인 샘플의 수가 증가하더라도 주파수 도메인에서 더 이상 정보를 얻지 못합니다 (새 주파수 콘텐츠는이 방법을 사용하면 표시되지 않습니다). 이것은 기존 데이터를 오버 샘플링하는 것입니다.

다른 방법 (다운 샘플링)을 수행하는 가장 좋은 방법은 확실치 않지만 한 가지 방법은 필요한 첫 번째 N 개의 샘플을 변환하는 것이라고 가정합니다. 이것으로 데이터를 잃어 버릴 수도 있지만, 애플리케이션에 따라서는 문제가되지 않을 수도 있습니다.

+0

다운 샘플링은 고주파수를 떨어 뜨리는 FFT 후에 가장 잘 수행됩니다. – wnoise

+0

데이터 수를 늘리기위한 좋은 제안입니다. 나는 샘플을 완성하는 방법을 거의 가지고있다. – Davido

1

이산 푸리에 변환 (빠르거나하지 않음)은 항상 입력 배열과 동일한 크기의 출력 배열을 제공합니다. 크기를 늘리려면 sinc 함수를 적절한 윈도우와 함께 사용해야합니다. 예 : http://en.wikipedia.org/wiki/Lanczos_resampling

+0

내 질문에 내가 조금 불분명했을 수도 있습니다. 기본적으로 그 출력 배열을 가져 와서 값을 보간하여 더 길거나 더 큰 다른 길이의 배열에 매핑하려고합니다. 그것이 Lanczos 리샘플링이하는 것이면, 그것은 내 머리 위로 조금이었을 것입니다. 그것은 바른 선을 따라있는 것처럼 보이지만 그것을 구현하는 방법을 모르겠습니다. – Davido

+0

@Davido, 그것이 무엇입니까. 주위를 둘러 보면 내가 구현 한 라이브러리를 찾을 수 있기를 기대한다. –