Jeg prøver at udføre Hanning Window manuelt men gjorde ikke “t fungerer, hvad laver jeg forkert?
t=[0:.1:10]; x=.5-.5*cos(2*pi*t/102); plot(x);
Ikke sikker på, hvorfor jeg ikke kan få det fulde hanningsvindue ..
Kommentarer
Svar
Du skal ændre ” 102 “til” 10 “.
x=.5-.5*cos(2*pi*t/10);
Kommentarer
- Tak :), jeg selvom det var antallet af prøver
- @ Pulse9 Du vil have, at vinduet starter ved 0 og slutter ved 0, så det betyder, at cos skal starte og slutte ved 1-, dvs. det skal gennemgå nøjagtigt en cyklus.
Svar
Der var en meteorolog (og Hann vindue- maker ) med navnet
Julius von Hann , Hanning er et misbrug (lighed med Hamming). Du ville have en bedre kontrol over din kode, der kalder hann.m
eller window.m
-funktionerne:
nSample = 101; t = linspace(0,10,nSample); % w = hann(nSample); w = window(@hann,nSample); % w = .5-.5*cos(2*pi*t/10); plot(t,w)
Jeg håber, at implementering af det manuelt ikke involverer beregning af cosinus med serier.
Kommentarer
- Hvorfor kalder build i funktioner være bedre? De arbejder internt nøjagtigt det samme som den manuelle metode og har flere lag af kontrol og parsing, hvilket gør dem lidt langsommere. Indbyggingsfunktionerne bruger specifikt " w = 0.5 – 0.5 * cos (2 * pi * x); "
- @Hilmar Jeg skrev " bedre kodekontrol ", fordi den funktion, der implementeres (et vindue), er eksplicit fra opkaldet, endda uden kommentarer. En anden, eller programmøren tre måneder senere, forstår let, hvad den gør, og kan ændre det, forbedre det med det samme uden at skulle gætte. Derudover forbedrer læsbarheden ved at placere længden (
nSample
) eller vinduesnavnet som variabler.
w=hann(100);
og fungerer fint, men jeg har brug for det gør det manuelt