Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

fourierreihen

Empfohlene Antworten

Veröffentlicht

EILT SEHR!!!

Hallo Gemeinde, kann jemand mir sagen ob diese quellcode funktioniert oder nicht! Wenn nicht können sie mir bitte dann helfen!?!?!

::

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <string.h>

#include <limits.h>

int main(int argc,char **argv){

int i, n;

int sample;

n = 1024;

sample = 256;

for (i=0; i<n; i++) {

printf("%lf \n",sin(2*M_PI*i/sample)+0.5*cos(6*M_PI*i/sample));

}

return 0;

}

--------------------------------------------------------------------------------

Fast Fourier Transform ©

--------------------------------------------------------------------------------

This little C-programme FOURIER-transforms the discrete (real) function given by n (which should be an integer power of 2!) data points on standard input to n records containing the real and imaginary part of the transform on standard output. The variables in FFT designate:

m: 2m: number of data points;

A: a (complex) vector of length at least 2m;

INV: INV=1 backward, otherwise forward FFT;

--------------------------------------------------------------------------------

/***** fft *****/

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define MX 13

#define NX 8192

typedef struct { double real, imag; } complex;

void FFT ( complex A[], int m, int INV ) {

/* This is a c-adaption by */

/* Bernard Metsch */

/* from the FORTRAN programme FFT */

/* from Paul. L. DeVries, Computerphysik, */

/* Spektrum Akademischer Verlag, */

/* Heidelberg 1994, */

/* which is in turn an adaption from */

/* a FORTRAN Code of the Cooley & Tukey method by: */

/* Cooley, Lewis and Welch, IEEE Transactions E-12 */

/* 1965 */

/* The array A contains the complex data to be transformed, */

/* `m' is log2(N), and INV is an index = 1 if the inverse */

/* transform is to be computed (The forward transform is */

/* evaluated if INV is not = 1). */

complex u, w, t;

double ang;

int N, Nd2, i, j, k, l, le, le1, ip;

/*

/* This routine computes the Fast Fourier Transform of the */

/* input data and returns it in the same array. Note that */

/* the k's and x's are related in the following way: */

/* */

/* IF K = range of k's and X = range of x's */

/* */

/* THEN delta-k = 2 pi / X and delta-x = 2 pi / K */

/* */

/* When the transform is evaluated, it is assumed that the */

/* input data is periodic. The output is therefore periodic */

/* (you have no choice in this). Thus, the transform is */

/* periodic in k-space, with the first N/2 points being */

/* 'most significant'. The second N/2 points are the same */

/* as the Fourier transform at negative k!!! That is, */

/* */

/* FFT(N+1-i) = FFT(-i) ,i = 1,2,....,N/2 */

/* */

N = pow(2,m);

Nd2 = N/2;

j = 1;

for (i=1; i<N; i++) {

if (i<j) { t = A[j-1]; A[j-1] = A[i-1]; A[i-1] = t; }

k = Nd2;

while (k<j) {

j -= k;

k /= 2;

}

j += k;

}

le = 1;

for (l=1; l<=m; l++) {

le1 = le;

le += le;

u.real = 1.0; u.imag = 0.0;

ang = M_PI / le1;

w.real = cos(ang); w.imag = -sin(ang);

if (INV==1) w.imag = -w.imag;

for (j=1; j<=le1; j++) {

for (i=j; i<=N; i+=le) {

ip = i + le1;

t.real = A[ip-1].real * u.real

- A[ip-1].imag * u.imag;

t.imag = A[ip-1].real * u.imag

+ A[ip-1].imag * u.real;

A[ip-1].real = A[i-1].real - t.real;

A[ip-1].imag = A[i-1].imag - t.imag;

A[i -1].real = A[i-1].real + t.real;

A[i -1].imag = A[i-1].imag + t.imag;

}

t.real = u.real * w.real

- u.imag * w.imag;

t.imag = u.real * w.imag

+ u.imag * w.real;

u = t;

}

}

if (INV!=1) for (i=0; i<N; i++) {

A.real /= N;

A.imag /= N;

}

} /* end FFT */

int main(int argc,char **argv){

int i, j, k;

int n, m, n2;

complex F[NX];

double a;

n = 0;

while ( scanf("%lg",&a)!=EOF ) {

F[n].real = a;

F[n].imag = 0.0;

n++;

if (n==NX) {

printf("too many data points!\n");

return 0 ;

}

}

printf("# number of data points read: %d\n",n);

// determine m:

j = 1;

m = -1;

for (i=0; i<=MX; i++) {

if (j==n) {

m = i;

}

j *=2;

}

if (m==-1) {

printf("# number of data points not a power of 2 !!!\n");

return 0;

} else {

printf("# log_2(%d) = %d\n", n, m);

}

FFT ( F, m, 0 );

n2 = n / 2;

for (i=0; i<n; i++) {

printf("%lg %lg\n",F.real,F.imag);

}

return 0;

} /* main */

Es ist mir unklar, was Du möchtest. Willst Du eine Fourierreihe einer Funktion angeben, auf n äqudistante Funktionswerte eine diskrete Fourier-Transformation anwenden?

Wofür brauchst Du das und falls es eine Hausaufgabe ist, warum wurde nicht erklärt, wie es geht?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.