File:TDAC-MDCTs of a sweep.png
Aus Wikimedia Commons, dem freien Medienarchiv
Zur Navigation springen
Zur Suche springen
![File:TDAC-MDCTs of a sweep.png](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/TDAC-MDCTs_of_a_sweep.png/800px-TDAC-MDCTs_of_a_sweep.png?20210903230847)
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)
Dateiinformationen
Strukturierte Daten
Bildtexte
Kurzbeschreibungen
Ergänze eine einzeilige Erklärung, was diese Datei darstellt.
Multiple overlapped TDAC-MDCTs of a frequency sweep y(t) = cos (ct³)
Beschreibung
[Bearbeiten]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
[Bearbeiten]Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
![w:de:Creative Commons](https://upload.wikimedia.org/wikipedia/commons/thumb/7/79/CC_some_rights_reserved.svg/90px-CC_some_rights_reserved.svg.png)
![Namensnennung](https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Cc-by_new_white.svg/24px-Cc-by_new_white.svg.png)
![Weitergabe unter gleichen Bedingungen](https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Cc-sa_white.svg/24px-Cc-sa_white.svg.png)
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.
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 23:08, 3. Sep. 2021 | ![]() | 13.282 × 4.899 (7,76 MB) | Frank Klemm (Diskussion | Beiträge) | Uploaded own work with UploadWizard |
Du kannst diese Datei nicht überschreiben.
Dateiverwendung
Die folgende Seite verwendet diese Datei:
Globale Dateiverwendung
Die nachfolgenden anderen Wikis verwenden diese Datei:
- Verwendung auf de.wikipedia.org