मैं असतत फूरियर करने के लिए कोशिश कर रहा हूँ सीअसतत फूरियर गलत परिणाम
शुरू में सिर्फ जानवर बल विधि में बदल देती देने को बदलने। सबसे पहले मैंने प्रोग्राम डेटा फ़ाइल (आयामों) को खोल दिया था और डेटा को सरणी में रखा था (केवल एक, क्योंकि मैं खुद को वास्तविक मूल्यवान इनपुट तक सीमित कर रहा हूं)।
लेकिन परिवर्तन गलत लग रहा था, इसलिए इसके बजाय मैंने एक सरल तरंग उत्पन्न करने की जांच की और जांच की कि यह ठीक से बदलता है या नहीं।
यहाँ मेरी कोड, घंटियां और सीटियां छीन है: पूरा करता है, लेकिन बजाय एक शक्ति (आवृत्ति) भूखंड पर कई तेज चोटियों की,
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M_PI 3.14159265358979323846
//the test wavefunction
double theoretical(double t)
{
double a = sin(M_PI * t) + 2 * sin(2 * M_PI * t) + 4 * sin(4 * M_PI * t);
return a;
}
//-------------------------------------------------------------------------
void dftreal(double inreal[], double outreal[], double outimag[], int linecount)
{
int n, k;
for (k = 0; k < linecount; k++)
{
double sumreal = 0;
double sumimag = 0;
for (n = 0; n < linecount; n++)
{
double angle = 2 * M_PI * n * (k/(double) linecount);
sumreal += inreal[n] * cos(angle);
sumimag += inreal[n] * sin(angle);
}
outreal[k] = sumreal;
outimag[k] = sumimag;
}
}
//=========================================================================
int main(void)
{
int linecount = 44100;
//creates all necessary arrays
double inreal[linecount], outreal[linecount], outimag[linecount], p[linecount];
FILE *fout = fopen("Output.txt", "w");
for (int i = 0 ; i < linecount ; ++i)
{
inreal[i] = theoretical(i/(double) linecount);
}
//actually computes the transform
dftreal(inreal, outreal, outimag, linecount);
for (int i = 0 ; i < linecount ; ++i)
{
p[i] = 2*(outreal[i] * outreal[i] + outimag[i] * outimag[i]);
fprintf(fout, "%f %f \n", (i/(double) linecount), p[i]);
}
fclose(fout);
printf("\nEnd of program");
getchar();
return 0;
}
कार्यक्रम को संकलित करता है, मैं इस मिल: ।
एक आवृत्ति या विभिन्न आवृत्तियों सटीक समान उलटा-बाथटब-वक्र देते हैं।
मैं एफ टी के बारे में कई स्रोतों की जाँच की और मैं अभी भी नहीं जानता कि क्या गलत हो रहा है, वहाँ समारोह के साथ किसी भी स्पष्ट त्रुटियों होने लगते नहीं है:
dftreal
ही। मैं इस मुद्दे के कारण क्या हो सकता है इस बारे में मदद मांगना चाहता हूं। मैं विंडोज 7 पर मिनीजीडब्ल्यू कंपाइलर का उपयोग कर रहा हूं। धन्यवाद!
डीएफटी उच्च दशमलव परिशुद्धता की आवश्यकता है। क्या आपने अपने fprintf कथन को बदलने की कोशिश की है ताकि वे अधिक दशमलव शामिल कर सकें? % .10f या अधिक की तरह ... –