Datei:Tastgrad-Spektrum.ogv
Größe der JPG-Vorschau dieser OGG-Datei: 800 × 450 Pixel. Weitere Auflösungen: 320 × 180 Pixel | 640 × 360 Pixel | 1.024 × 576 Pixel | 1.600 × 900 Pixel
Originaldatei (Ogg-Theora-Videodatei, Länge: 13 s, 1.600×900 Pixel, 1,57 Mbps insgesamt, Dateigröße: 2,39 MB)
Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.
Inhaltsverzeichnis
Beschreibung
BeschreibungTastgrad-Spektrum.ogv |
Deutsch: Spektrum in Abhängigkeit vom Tastgrad. |
Datum | |
Quelle | Eigenes Werk |
Urheber | Mik81 |
Andere Versionen |
Lizenz
Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
Diese Datei wird unter der Creative-Commons-Lizenz „CC0 1.0 Verzicht auf das Copyright“ zur Verfügung gestellt. | |
Die Person, die das Werk mit diesem Dokument verbunden hat, übergibt dieses weltweit der Gemeinfreiheit, indem sie alle Urheberrechte und damit verbundenen weiteren Rechte – im Rahmen der jeweils geltenden gesetzlichen Bestimmungen – aufgibt. Das Werk kann – selbst für kommerzielle Zwecke – kopiert, modifiziert und weiterverteilt werden, ohne hierfür um Erlaubnis bitten zu müssen.
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse |
Source code
#! /bin/octave
% GNU Octave / MATLAB
% Benutzer:mik81 @ de.wikipedia.org
%
%
% Große Frage:
% Welche "amplitude" haben die Spektren?
%
%
%
% Ermittle Signalform
%
function [square, realDutycycle] = waveform(dutycycle)
global periods;
global stepsPerPeriod;
realDutycycle = 0;
steps = periods*stepsPerPeriod;
for period=0:1:periods-1
for step=0:1:stepsPerPeriod-1
if ( step >= dutycycle *stepsPerPeriod)
square = [square, 0.];
if ( realDutycycle == 0)
realDutycycle = step/stepsPerPeriod
dutycycle
endif
else
if (period == 0 && step == 0)
square = [+1.];
else
square = [square, +1.];
endif
endif
endfor
endfor
dutycycleString = sprintf("%0.3f", dutycycle);
plot((0:1:steps/(0.25*periods)-1)/stepsPerPeriod
, square(1,1:steps/(0.25*periods)), [";Tastgrad: " , dutycycleString, ";"], "linewidth", 2);
axis ([0, 0.25*periods, -0.2, +1.2]);
axis ("nolabel");
axis("labely", "ticxy");
% xlabel ("");
set(gca(), "linewidth", 1.5);
endfunction
%
% Berechne Spektrum
%
function [dft, envelop] = spektrum(square, realDutycycle)
global periods;
global stepsPerPeriod;
global timebase;
steps = periods*stepsPerPeriod;
freqSteps = steps/2;
%
% Frequenz = freq*Samplerate*steps
% n * Fenster
for freq=0:1:freqSteps
pad = square .* sin(freq*2*pi*timebase/length(timebase));
dft(1, freq+1) = sum( pad(1,:) );
pad = square .* cos(freq*2*pi*timebase/length(timebase));
% cos^2 + sin^2
dft( 1, freq+1) = dft(1, freq+1)^2 + sum( pad(1,:) )^2;
endfor
dft = sqrt(dft);
dft = dft/(periods*stepsPerPeriod);
temp = 1/30; % gib nen sinnvollen Namen
envelop = dft(1,1) * abs(sinc((0:temp:freqSteps)*realDutycycle));
if(realDutycycle > 0.5)
envelop2 = (1-dft(1,1)) * abs(sinc((0:temp:freqSteps)*(1-realDutycycle)));
endif
dftSelected = [dft(1,1)];
for selected=periods+1:periods:freqSteps+1
dftSelected = [dftSelected, dft(1,selected)];
endfor
dft = dftSelected;
plot([0, (periods+1:periods:freqSteps+1)/periods-1/periods], dft(1, :), "or;Spektallinien;", "linewidth", 1.5);
hold("on");
h = stem([0, (periods+1:periods:freqSteps+1)/periods-1/periods], dft(1, :), "r");
set(h, "linewidth", 1.5);
if(exist("envelop2", "var") != 1)
plot((0:temp:freqSteps), envelop, ";Einhuellende;", "linewidth", 1.5);
else
plot((0:temp:freqSteps), envelop, ";Einhuellende;", "linewidth", 0.5);
plot((0:temp:freqSteps), envelop2, "g;Invertierte Einhuellende;", "linewidth", 1.5);
endif
hold("off");
axis ([0, 20, 0, 1.1]);
axis("labelxy", "ticxy", "on");
xlabel ("Harmonische der Grundfrequenz");
set(gca(), "linewidth", 1.5);
%axis ("ticx");
endfunction
%
%
% M A I N
%
%
printf("mik81 @ de.wikipedia.org\n\n");
printf("Spectrum of rectengular waveform\n\n");
begin_cputime = cputime();
frames = 10; % Teilung
frames = 256; % 2^n
frames = frames-1; % Zaunpfahl
Dimensions = "-S1600,900";
global stepsPerPeriod = 512; % 2^n wegen FFT
global periods = 8; % 2^4
steps = periods*stepsPerPeriod;
global timebase = 0:1:steps-1;
size(timebase)
% dutycycle = 0.05;
mkdir("./png");
axis("labelxy", "ticxy", "on");
for count=1:1:frames % Hack: vermeide Tastgrad 1.00
close();
countString = sprintf("%03i", count);
dutycycle = count/(frames+1);
printf("\nCalculating waveform: %i\n", count);
subplot(2,3,1, "align");
[square, realDutycycle] = waveform(dutycycle);
% print(["./png/waveform", countString, ".png"], "-dpng");
%
% DFT
%
printf("Calculating DFT: %i\n", count);
subplot(1,3,2:3, "align");
[dft, envelop] = spektrum(square, realDutycycle);
print(["./png/spectrum", countString, ".png"], "-dpng", Dimensions);
endfor
printf("Total cpu time: %f seconds\n", cputime()-begin_cputime);
printf("Finished\n");
% EOF
Script
#! /bin/bash
echo "Script of mik81 @ de.wikipedia.org"
framerate=5
name="spectrum"
octave pwm.m
mkdir yuv
rm yuv/*
png2yuv -j ./png/$name%03d.png -f $framerate -I p -b 1 > ./yuv/out.yuv
rm ./$name.ogv
./ffmpeg2theora-0.29.linux32.bin ./yuv/out.yuv -F $framerate -v 9 -o ./$name.ogv;
In dieser Datei abgebildete Objekte
Motiv
Einige Werte ohne einen Wikidata-Eintrag
27. Juli 2014
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 15:38, 27. Jul. 2014 | 13 s, 1.600 × 900 (2,39 MB) | Mik81 | User created page with UploadWizard |
Dateiverwendung
Die folgende Seite verwendet diese Datei:
Metadaten
Diese Datei enthält weitere Informationen (beispielsweise Exif-Metadaten), die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.
Software |
|
---|
Abgerufen von „https://de.wikipedia.org/wiki/Datei:Tastgrad-Spektrum.ogv“