Ik probeer het Hanning-venster handmatig uit te voeren, maar deed het niet “t werk, wat ik” doe verkeerd?
t=[0:.1:10]; x=.5-.5*cos(2*pi*t/102); plot(x);
Ik weet niet zeker waarom ik het volledige hanning-venster niet kan krijgen.
Opmerkingen
Answer
Je moet “wijzigen” 102 “to” 10 “.
x=.5-.5*cos(2*pi*t/10);
Reacties
- Bedankt :), ik dacht dat het zo was het aantal monsters
- @ Pulse9 Je wilt dat het venster begint bij 0 en eindigt bij 0, dus dat betekent dat de cos moet beginnen en eindigen op 1, dwz dat het precies één cyclus moet doorlopen.
Antwoord
Er was een meteoroloog (en Hann window- maker ) genaamd
Julius von Hann , Hanning is een misbruik (gelijkenis met Hamming). U heeft een betere controle over uw code door de hann.m
of de window.m
functies aan te roepen:
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)
Ik hoop dat bij handmatige implementatie geen cosinus met reeksen moet worden berekend.
Opmerkingen
- Waarom zou het aanroepen van de build in functies beter zijn? Ze werken intern precies hetzelfde als de handmatige methode en hebben meer controlelagen en parsering waardoor ze een beetje langzamer worden. De ingebouwde functies gebruiken specifiek " w = 0,5 – 0,5 * cos (2 * pi * x); "
- @Hilmar Ik schreef " betere codecontrole ", omdat de functie die wordt geïmplementeerd (een venster) expliciet is uit de aanroep, zelfs zonder commentaar. Iemand anders, of de programmeur drie maanden later, zal gemakkelijk begrijpen wat het doet, en kan het veranderen, het meteen verbeteren, zonder te hoeven raden. Bovendien wordt de leesbaarheid verbeterd door de lengte (
nSample
) of vensternaam als variabelen te plaatsen.
w=hann(100);
en werken prima, maar ik moet het handmatig doen