Den här artikeln behöver källhänvisningar för att kunna verifieras. Motivering: Rimlig text men utan källor. (2020-12) Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan. |
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.
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
redigeraVerilog 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