Datei:TDAC-MDCTs of a sweep.png
aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen
Zur Suche springen
Größe dieser Vorschau: 800 × 295 Pixel. Weitere Auflösungen: 320 × 118 Pixel | 640 × 236 Pixel | 1.024 × 378 Pixel | 1.280 × 472 Pixel | 2.560 × 944 Pixel | 13.282 × 4.899 Pixel
Originaldatei (13.282 × 4.899 Pixel, Dateigröße: 7,76 MB, MIME-Typ: image/png)
Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.
Beschreibung
BeschreibungTDAC-MDCTs of a sweep.png |
English: Plotted output of
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using u16 = unsigned __int16;
#define MAX (3 << 15)
#define WINSIZE 240
static double X [MAX+2048];
static double Y [MAX+2048];
static double* Z [MAX+2048];
static u16 Zlen[MAX+2048];
constexpr double Pi = 3.1415926535897932384626433832795;
static double
w0 (int N, int k /*0...2N-1*/)
{
double const q = (k - N + 0.5) / N;
return ::fabs(q) < 0.5 ? 1.0 : 0.0;
}
static double
w1 (int N, int k /*0...2N-1*/)
{
double const q = (k - N + 0.5) / N;
double const c = ::cos (Pi / 2 * q);
return c;
}
static double
w2 (int N, int k /*0...2N-1*/)
{
double const q = (k - N + 0.5) / N;
double const c = ::cos (Pi / 2 * q);
return sin (Pi/2*c*c);
}
#define W(N,k) w2(N,k)
static double
cs (int n, int N, int k /*0...2N-1*/)
{
return ::cos (Pi/4 / N * (2*n+1+N) * (2*k+1));
}
static double
MDCT (int _N0, int N, int k /*0...2N-1*/)
{
double S = 0.0;
for (int n = 0; n < 2*N; n++)
S += X[_N0 + n] * W(N, n) * cs(n, N, k);
return -S / N * sqrt(2);
}
static double
iMDCT (int _N0, int N, int n /*0...N-1*/)
{
double S = 0.0;
for (int k = 0; k < N; k++)
S += Z[_N0][k] * cs(n, N, k);
return -S * W(N, n);
}
static void
Process ()
{
for (int N0 = 0; N0 <= MAX; N0 += WINSIZE)
{
Z[N0] = (double*)::calloc (sizeof(double), Zlen[N0] = WINSIZE);
for (int k = 0; k < WINSIZE; k++)
Z[N0][k] = ::MDCT (N0, WINSIZE, k);
}
for (int N0 = 0; N0 < MAX; N0 += WINSIZE)
{
for (int n = 0; n < 2*WINSIZE; n++)
Y[N0+n] += iMDCT (N0, WINSIZE, n) * sqrt(2);
}
}
static void
Generate ()
{
for (int i = 0; i <= MAX; i++)
X[i] = 32000.0 * ::cos (Pi*i*i*i / MAX / MAX / 3);
}
static void
Print1 (FILE* const fp)
{
for (int i = 0; i < MAX; i++)
{
::fprintf (fp, "%7u\t%15.6f\t%15.6f", i, X[i], Y[i]);
for (int j = 0; j < Zlen[i]; j++)
::fprintf (fp, "\t%15.6f", Z[i][j]);
::fprintf (fp, "\n");
}
}
static void
Print1 ()
{
FILE* const fp = ::fopen ("mdct.csv", "wb");
if (fp)
{
::Print1 (fp);
::fclose (fp);
}
}
static void
Print2 (FILE* const fp)
{
for (int j = 0; j < 1024; j++)
{
for (int i = 0; i < MAX; i++)
if (Zlen[i])
if (Zlen[i] > j)
::fprintf (fp, "\t%15.6f", Z[i][j]);
else
::fprintf (fp, "\t");
::fprintf (fp, "\n");
}
}
static void
Print2 ()
{
FILE* const fp = ::fopen ("mdct_freq.csv", "wb");
if (fp)
{
::Print2 (fp);
::fclose (fp);
}
}
static void
Window ()
{
for (int k = 0; k < WINSIZE*2; k++)
::printf ("%4u\t%12.6f\t%12.6f\t%12.6f\n", k, w0(WINSIZE,k), w1(WINSIZE,k), w2(WINSIZE,k));
::printf ("\n");
}
int main ()
{
::Window();
::fprintf (stderr, "Generate %u\n", MAX);
::Generate();
::fprintf (stderr, "Process\n");
::Process();
::fprintf (stderr, "Print1\n");
::Print1();
::fprintf (stderr, "Print2\n");
::Print2();
::fprintf (stderr, "Ready\n");
return 0;
}
|
Datum | |
Quelle | Eigenes Werk |
Urheber | Frank Klemm |
Lizenz
Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
Diese Datei ist lizenziert unter der Creative-Commons-Lizenz „Namensnennung – Weitergabe unter gleichen Bedingungen 4.0 international“.
- Dieses Werk darf von dir
- verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
- neu zusammengestellt werden – abgewandelt und bearbeitet werden
- Zu den folgenden Bedingungen:
- Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
- Weitergabe unter gleichen Bedingungen – Wenn du das Material wiedermischst, transformierst oder darauf aufbaust, musst du deine Beiträge unter der gleichen oder einer kompatiblen Lizenz wie das Original verbreiten.
In dieser Datei abgebildete Objekte
Motiv
Einige Werte ohne einen Wikidata-Eintrag
29. August 2021
image/png
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 01:08, 4. Sep. 2021 | 13.282 × 4.899 (7,76 MB) | Frank Klemm | Uploaded own work with UploadWizard |
Dateiverwendung
Die folgende Seite verwendet diese Datei:
Abgerufen von „https://de.wikipedia.org/wiki/Datei:TDAC-MDCTs_of_a_sweep.png“