Hoppa till innehållet

Vikning

Från Wikipedia
(Omdirigerad från Vikningsdistorsion)
Den höga (röda) frekvensen samplas vid jämna mellanrum. När signalen återskapas från samplingarna bildas den låga (blåa) frekvensen.

Vikning är ett fenomen inom signalteori som uppstår vid sampling av en signal som innehåller frekvenskomponenter över Nyquistfrekvensen. De höga frekvenserna "viks" ner i samplingsområdet, där de inte kan skiljas från lägre frekvenser och därför orsakar vikningsdistorsion.

Propellern hos en Bombardier Q400 snurrar mycket fortare än vad en kamera filmar, och ser därför ut att gå långsamt.

Vikning är ett problem i de flesta sammanhang där det finns signaler med högre frekvens än vad som kan samplas.

  • I samplat ljud kan vikningsdistortion uppfattas som gnissel eller surr i toner som borde vara rena. Det åtgärdas vanligen genom att signalen lågpassfiltreras innan den samplas. Den klassiska typen av filter för detta ändamål har sedan 1980-talet varit ett så kallat cic-filter (engelska Cascaded integrator–comb filter), då det kräver väldigt lite resurser och helt saknar multiplikationer.
  • I en digital eller tryckt bild kan vikningsdistortion uppfattas som större mönster i små mönster. Det kallas ibland för moirémönster.
  • I videofilm kan vikningsdistorsion uppfattas i hjul som snurrar så snabbt att de ser ut att snurra baklänges eller mycket långsammare. Samplingsfrekvensen för film är vanligen 25–30 bildrutor per sekund. Ett hjul med fyra ekrar som snurrar snabbare än en åttondels varv per bildruta ser då ut att gå bakåt. Samma effekt kan uppnås med ett stroboskop, som gör att ögat eller kameran bara uppfattar de rörelser som sker när ljuset är på.

Programexempel

[redigera | redigera wikitext]

Verilog kod för decimering och cic lågpassfiltrering av ljud:

always @ (posedge clk15Mhz) begin  //ändra clk!
reg signed [27:0] i1,i2,c1,c2,t1,t2,d1,d2;
reg [1:0] ds; //dvs 2^2=4 måste stämma med rad 5 (0-3 är 4st olika värden). 
i1<=i1 '''indata'''; i2<=i2 i1;     //integratorer
ds<=ds 1; if (ds==3) begin  //decimering
c1<=i2-d1; '''utdata'''<=(c1-d2)/64;   //kamfilter, (64=4*decimering*decimering= 4*4*4)
d1<=t1;t1<=i2; d2<=t1;t2<=c1;    //fördröjningar, (om man lägger till ett fördröjningssteg så blir "64" på rad 6, 8*4*4 osv)
end
end