현재 푸리에 변환 알고리즘을 쓰려고합니다. 이산 푸리에 변환
public class DFT {
public static Complex[] Transform(Complex[] input) {
int N = input.Length;
Complex[] output = new Complex[N];
double arg = -2.0 * Math.PI/(double)N;
for (int n = 0; n < N; n++) {
output[n] = new Complex();
for (int k = 0; k < N; k++)
output[n] += input[k] * Complex.Polar(1, arg * (double)n * (double)k);
}
return output;
}
}
그래서 나는 다음과 같은 코드를 사용하여이 알고리즘을 테스트 : 수학적 정의에 설명 된대로 나는 간단한 DFT 알고리즘을 시작
private int samplingFrequency = 120;
private int numberValues = 240;
private void doCalc(object sender, EventArgs e) {
Complex[] input = new Complex[numberValues];
Complex[] output = new Complex[numberValues];
double t = 0;
double y = 0;
for (int i = 0; i < numberValues; i++) {
t = (double)i/(double)samplingFrequency;
y = Math.Sin(2 * Math.PI * t);
input[i] = new Complex(y, 0);
}
output = DFT.Transform(input);
printFunc(input);
printAbs(output);
}
변환은 잘 작동하지만 numberValues 경우 배수 samplingFrequency의 번호 (이 경우 : 120, 240, 360, ...). (240 개) 값에 대한 내 결과 그게 전부 :
http://s1.directupload.net/images/110928/n3m8hqg6.jpg
변환은 잘했다. 내 계산 값의 수를 변경하는 경우
http://s7.directupload.net/images/110928/qizoiqbt.jpg
왜 내가 잘못된 결과를 얻고있다 : 나는이 결과를 얻을 수 (280 개) 값을 계산하려고하면
? 여기 내 문제가 내 코드에 문제가 있거나 DFT의 수학적 정의에 대한 오해가 있는지 확실하지 않습니다. 어느 쪽이든, 아무도 내 문제를 도와 줄 수 있습니까? 감사.
변환 기능의 입력이 복잡한 배열 인 이유를 알려주십시오.확실히 표준 음파 (시간 영역)에서 변환하는 경우 단일 이중 배열일까요? –
좋아요, 알 겠어요. 허수 부분이 0으로 설정 되었으니, 그것은 단지 하나의 더블이라면 본질적으로 같습니다. 그런데 코드에서 'Complex.Polar'는 'Complex.FromPolarCoordinates'여야합니다. –
플롯에 무엇을 사용합니까? – GorillaApe