Signaler och system II SMS021 Laboration 3

advertisement
Signaler och system II
SMS021
Laboration 3
Anders Grennberg
May 13, 2002
1
Inledning
Denna laboration bestar av tva delar:
Signalanpassade lter.
Uppskattning av spektrum och spektraltathetet
Avsikten med denna laboration ar genom att simulera processer i MATLAB
och forsoka ge en mer konkret bild av sadana begrepp och hur de anvands. Som
hjalp nns kortare teoriavsnitt som kompletterar laroboken pa de punkter som
berors i laborationen.
Begreppen som tas upp i laborationen ar centrala i kursen och kommer ofta
pa tentamen. Det rekommenderas starkt att tanka igenom och losa uppgifterna
i laborationen.
Laborationen redovisas muntligt gruppvis efter anmalan hos Anders Grennberg.
En anteckningslista med tillgangliga tider for presentation under perioden v 21,
veckan fore tentamensperioden, kommer att nnas tillganglig.
1.1 Uppgift: Signalanpassat lter
Vi denierar pulsen p som en 8 tal lang foljd av 1: Bilda sedan en signal s som
bestar av p foljd av 12 nollor. Bilda en brusfoljd n [k] som ar 20 sampel lang
med vantevarde 0 och varians 1. Bilda x = s + n: Sand den genom det optimala
signalanpassade ltret h som ar anpassat for att bast leta efter pulsen p och som
alltsa har langd 8, och plotta resultatet. Anvand MATLAB-funktionen lter.
y=lter(h,1,x);
Enligt teorin bor utsignalen y ha storst amplitud i punkten k = 8:atminstone
da insignalen saknar brusdel. Plotta darfor utsignalen da bara signalen s sands
in i ltret. Vid k = 16 nns ingen puls sa darfor bor y[16] vara noll.
Signalen s forestaller nu en signal som bestar av pulsen p foljd av ingen
puls. Upprepa nu observationer av utsignalens varden i 8 respektive 16 i 100
upprepade forsok med nya realiseringar av bruset for nagra olika varianser, t
ex 0:12 ; 1; 22: Gor histogram over vardena och jamfor med teorin.. Bestam
beslutsgrans B sa att sannolikheten att missa, dvs att inte upptacka att signalen
1
nns med blir hogst 5%. Hur stor blir da risken att felaktigt tro att pulsen nns
med? Stammer det med simuleringen?
Ett forsok att gora simuleringen i MATLAB kan se ut ungefar som nedan:
for k=1:100, y=lter(h,1,s+sigma*randn(1,size(s)));z(k,:)=y([8 16]); end, hist(z)
Valj ett lamligt kompromissvarde for troskeln B Bilda nu en lang vektor
som bestar av pulsen p upprepad 50 ganger efter varann och addera brus med
variansen 2 i en lika lang vektor, (400 tal) och ltrera med det signalanpassade ltret. Observera utsignalens varde i punkterna 8; 16; 24; :::400: Avgor hur
manga av dessa varden som ligger over troskelvardet. Upprepa detta for nagra
olika varden pa 2 och sammanfatta i en tabell och ett diagram. Tabellen ska
uppta SNR, teoretisk felsannolikhet och observerad felprocent. Hur "starkt"
kan man gora bruset utan att besluten blir "alldeles fel"?
Bilda nu en fojd av "information", dvs en foljd av 25 ettor och nollor, i (n) ;
och sedan signalen av langd 200
z [k] =
24
X
n=0
i [n] p [k 8n]
Denna signal kan enkelt byggas upp med funktionen kron:
z=kron(i,p);
Till z adderas som tidigare en lika lang slumptalsfoljd med varians 2 varefter
summan ltreras som tidigare och utsignalens amplitud noteras i punkterna
k = 8; 16; :::; 200: Anvand troskling for att avgora vilket varde talen i [n] troligen
hade och jamfor med de riktiga vardena. Hur stor blev felprocenten? Upprepa
for nagra olika brusstyrkor (dvs SNR) och sammanfatta i en tabell och gur.
Av "misstag" tappar ni synkronisering och observerar i stallet i punkterna
10, 18, 24,... Hur gar det da? Skullle man kunna hitta pa nagon metod att hitta
ratt synkronisering genom denna ltrering? Fundera over begrepp som akf kan
vara anvandbar.
Pa kursens hemsida nns en l med data som bestar av en signal av typen z
ovan som alltsa konstruerats med pulsen p. Ett meddelande i siror (oktala) har
kodats med tre bitar som gett en foljd av typen i ovan varefter brus adderats.
Vilket ar meddelandet?
1.1.1 Frivillig extra uppgift
Valj tva ortogonala pulser p1 och p2 av langd 8, t ex den tidigare plus-minus-
foljden och en foljd av fyra ettor med fyra nollor efter sig. Valj en foljd talpar
(i1 ; i2 ) av typen (1; 1) och bilda summa av typen
x [k ] =
K
X
n=0
i1 [n] p1 [k 8n] + i2 [n] p2 [k 8n] :
Liksom tidigare kan konstruktionen latt utforas mha funktionen kron. Till
denna adderas som tidigare en brusvektor. Skapa tva lter anpassade till p1
respektive p2 och sand signalen genom dem. Utsignalerna fran de tva signalanpassade ltren observeras i punkterna 8; 16; osv. De talpar man far plottas i ett
koordinatsystem och det bor visa sig att de tenderar att klumpa sig kring fyra
olika punkter. Ur detta kan man besluta sig for vilka vardena pa de "utsanda"
talparen (i1 ; i2) har varit. Jamfor med facit och se hur stor felprocent man fatt
vid olika styrka pa brussignalen.
2
1.2 Uppgifter p
a spektralskattning
1. Generera "vitt gaussiskt brus" i en vektor med 800 tal. Generera slumptalsfoljder genom att skicka detta brus genom AR(1) och AR(2) lter som
i laboration 2. Studera spektraltatheten med nagra metoder for dessa tre
fall: Bilda det "raa" periodogrammet och plotta det for nagra olika realiseringar for vart och.ett av det tre fallen ovan.(Vitt brus respektive tva fall
av ltrerat brus) Vardera genom att jamfora resultaten. Vad kan sagas
om kvaliteten pa skattningarna?
2. Anvand Welchs metod med hjalp av funktionen psd for att gora samma
skattning men med kortare delfojder, t x 128, 256 och 512. Vad blir
resultatet nu?
3. Ett vanligt problem ar att forsoka upptacka och uppskatta amplituden av
periodiska signaler i additivt brus. Studera funktionen s(t) = cos(!0 t) som
samplas i N punkter med tidssteg T . For att samplingssatsen skall galla
maste sampelfrekvensen 1=T > 2(!0 =2); dvs T < =!0 : Den tid man
observerar och samplar blir alltsa NT: Minsta frekvens man kan fa blir
2=NT och frekvensen !0 rad/s motsvaras i FFT-metoden av ett tal med
index k0 sa att k0 2=NT = !0 : Hogsta frekvens blir N=2 2=NT = =T:
Addera vitt brus till s(t) = cos(!0 t) dar t = kT for att fa talfoljden
x [k] = s (k!0 T ) + Bn [k] :
Har ar B en parameter som bestammer signal/brus-forhallandet i x [k] :
Valj parametrarna !0; T och NT sa att det k som motsvarar !0 blir ca
20-30% av N: Plotta aven en del av signalen x[k]: t ex for 1 k N=10:
(a) Lat X (k) vara den stokastiska processen X (k) = A cos(!0 T k + )
+N (k) dar N (k) ar vitt gaussiskt brus med spektraltathet 0:5 och
dar ar likformigt fordelad pa [0; 2] och oberoende av N (k): A ar
en konstant. Bestam teoretiskt processens spektraltathet S (!):
(b) Forsok uppskatta om det nns en sinuskomponent i den simulerade
signalen x[k] och i sa fall dess amplitud. Gor detta for nagra olika
B -varden. t ex 10; 1; 0:1
(c) Byt funktionen s(t) till funktionen cos(!0 t 1) och gor om skattningen med samma sampelpunkter. Vad blev det for skillnad i spektraltatheten och varfor?
(d) Plotta log(absolutbeloppet av DFT) av talfoljden for nagra olika
varden pa B och jamfor med plottar av motsvarande x [k] : Vad kan
sagas om uppskattningen av frekvensinneha llet i den brusiga signalen?
(e) Byt signalen s till en summa av tva cosinusfunktioner av olika frekvens,
t ex cos(0:5t) + 2 cos(2t). Kan man nna frekvens och amplitud nu?
(f) Anvand psd for samma foljder och jamfor resultaten med det foregaende.
Slutsatser?
Bakgrundsmaterial for ovanstaende uppgifter nns i de foljande avsnitten.
3
2 Signalanpassade lter, teori
Vi ska har beskriva en metod att nna en kand signal inbaddad i brus. Laroboken
beskriver detta for det fall att signalerna ar tidskontinuerliga. For att kunna
simulera i MATLAB ges darfor motsvarande teori for tidsdiskreta signaler.
Dessa kan tankas ha uppstatt genom sampling av tidskontinuerliga signaler.
I denna laboration antar vi att sampelsteget ar 1 tidsenhet vilket gor att den
diskreta frekvensen kommer att ligga mellan -0.5 och 0.5 (t ex Hz), eller i vinkelfrekvens, mellan - och :
Vi gor alltsa foljande antagande: Vi mater en signal x[k] som ar summan
av ett vitt tidsdiskret brus n[k]och en signal p[k]: Bruset kan antas vara en
realisering av en stokastisk process N [k] medan signalen p[k] ar en kand signalform som vi antar har andlig langd M + 1: Vi har observerat signalen x[k]
for 0 k B . Vi vet inte om den kanda signalen nns i vara observationer
och vill darfor avgora pa nagot satt om den fanns med. Metoden gar ut pa att
sanda den observerade signalen x[k] genom ett linjart lter och sedan genom att
jamfora utsignalens amplitud i en viss tidpunkt med ett lampligt troskelvarde
avgora om pulsen fanns med eller inte.
2.0.1 Matematisk modell
Lat N [k]; k 2 Z; vara svagt stationart vitt brus med vantevardesfunktion 0
och varians
2 : Lat vidare p[k]; 0 k M vara en kand puls med energi
PM
E = k=0 p[k]2 : Vi kan anta att p[k] ar noll utanfor intervallet [0; M ]: Vi
studerar nu tva olika alternativ:
1. Vi har observerat den stokastiska processen X1 [k] = p[k] + N [k]
2. Vi har studerat processen X0 [k] = N [k]:
Vi vill konstruera ett linjart lter med kausalt impulssvar h[k]; k 2 Z; sadant
att vi genom att studera utsignalens varde i punkten k = M kan avgora vilket
av alternativen vi studerat, dvs om p nns med eller inte i den observerade
signalen x: Vi valjer tidpunkten M eftersom vi vill ha ett kausalt lter och
eftersom hela signalpulsen p da har kommit med om den nns. Efter ltret har
vi alltsa signalen y [k] = (x h) [k] ; k 2 Z:
Vi undersoker forst alternativ 1 dar signalen p ingar. Efter ltret har vi vid
tiden M
X
X
X
y[M ] = x(k)h [M k] = p [k] h [M k] + n [k] h [M k] :
k
k
k
Den forsta summan beror endast av den kanda signalen p men inte av bruset
n: Det ar tydligen den termen som ska ge indikation om den sokta signalen
ingar. Den andra summan beror bara av bruset och ar det enda vi skulle fa om
alternativ 2 gallde. Brustermen ar en observation av den stokastiska variablen
X
N = N [k] h [M k]
k
medan den deterministiska delen, eftersom p har andligt stod, ar
S=
M
X
k=0
s [k] h [M
4
k]
Vi har alltsa konstruerat en testvariabel Y = y[M ] som antingen ar S + N
(alternativ 1) eller bara N (alternativ 2). Variablen N ar en viktad summa
av oberoende likafordelade stokastiska variabler N [k] med vikterna h [M k] :
Eftersom variablerna har vantevarde 0 och varians 2 kommer N att fa vantevarde
0 och for variansen galler, pga oberoendet, att
V (N) =
X
k
= 2
V (h [M
X
k
k] N [k]) =
h2 [M
X
h2 [M
k] V (N [k])
k]
Om vi antar att bruset ar gaussiskt, dvs normalfordelat, ser vi dessutom att N
ar normalfordelad med en varians som ar lterkoeÆcienternas kvadratsumma
ganger brusets varians. Nar vi val valt koeÆcienterna h [k] kanner vi alltsa hela
fordelningen for N: For att fa en lyckosam detektering bor vi se till att talet S ar
sa stort som mojligt jamfort med vanliga utfall av N: I summan S forekommer
endast h [k] med index mellan 0 och M: Om man valjer varden skilda fran 0
for ltret h [k] for index utanfor detta intervall kommer detta endast att oka
variansen hos N medan S inte andras. Det bor betyda samre chans att avgora
mellan alternativen 1 och 2. Vi antar alltsa att ltrets impulssvar h endast ar
skilt fran 0 for 0 k M:
Vi vill att S ska goras sa stor som mojligt utan att variansen for N blir stor.
Vi anvander Cauchy-Schwartz olikhet: Den sager att
P
X
k=1
!
ak bk
2
P
X
k=1
a2k P
X
k=1
b2k
for alla uppsattningar tal ak och bk och med likhet om och endast om det
nns ett tal sadant att bk = ak for k = 1; :::; P: Av detta foljer alltsa att
S maximeras om h [M k] = p [k] for k = 0; :::; M: Detta kan ocksa skrivas
h [k] = p [M k] : Det innebar alltsa att det optimala ltrets impulssvar ar
den kanda pulsen "vand baklanges". Da blir alltsa
S=
M
X
k=0
p [k] h [M
k] =
M
X
k=0
p2 [k] = E:
Satter vi in detta val av impulssvar h [k] far vi ocksa att V (N) = 2 2 E:
I fall 1 ar alltsa Y en stokastisk variabel
p som ar normalfordelad med vantevarde
S = E och standardavvikelse E medan i fall 2, ingen signal, Y har
vantevarde 0 men samma standardavvikelse.
5
1
0.9
0.8
0.7
Bara brus
Signal närvarande
0.6
0.5
0.4
0.3
0.2
0.1
0
−5
0
5
10
S
Gräns G
Frekvensfuntionerna for kvantiteten Y betingat av de tva alternativen.
Valj nu ett tal G och infor foljande beslutsregel:
Om y [M ] > G anser vi att alternativ 1 galler ,dvs pulsen p ingar i signalen x:
Om y [M ] < G anser vi att p inte nns i x: Vi kan da gora fel av tva slag:
1. Alternativ 1 ar sant, dvs signalen p nns i x; men vi drar slutsatsen att
den inte nns med. Detta intraar om y [M ] < G trots
p att y [M ] ar
observation av den stokastiska variabeln Y 2 N (E; E ): Detta sker
med sannolikheten
p
Y E G E
G E
p
P (Y < G Y 2 N (E; E )) = P ( p < p ) = E
E
E
dar ar den standardiserade normalfordelningens fordelningsfunktion.
2. Alternativ 2 ar sant, dvs ingen signal p nns i x trots att vi dragit slutsatsen att den nns med. Detta sker alltsa om y [M ] > G
p trots att y [M ] ar
observation av den stokastiska variabeln Y 2 N (0; E ): Sannolikheten
for detta ar
p
Y 0
G
G
p :
P (Y > G Y 2 N (0; E )) = P ( p > p ) = 1 E
E
E
Man far bestamma sig for vilket fel man tycker ar viktigast att undvika. Om
man har svart att bestamma sig kan ett satt vara att valja G sa att de tva olika
felen far samma sannolikhet. I sa fall skall alltsa galla att
G pE = 1 G
p = pG
E
E
E
(eftersom funktionen uppfyller villkoret att ( t) = 1 (t)). Detta intraar
om
G E
p = pG
E
E
Detta ger att G = E=2; som ju ligger mitt emellan vantevardena for fall 1 och
fall 2, och medfor att felsannolikheterna blir
E=2
p =1 P (fel 1) = P (fel 2) = 1 E
6
p
!
E
2 = Q
p
!
E
2 :
Vi ser att
ar bara beror av
pEden avgorande egenskapen som styr hur stort fel vi f
kvoten 2 : Felsannolikheten beror alltsa inte pa skalfaktorn ; dvs det bar sig
inte att oka forstarkningen i ltret. Kvantiteten
PM 1
h2 [k] E
SNR = k=0
=
2
2
brukar kallas "Signal to Noise Ratio" och ofta anges i dB. Vi sera att SNR helt
styr prestanda for ett sadant lter.
En fraga man kan stalla sig ar om eller hur pulsens langd, dvs M; spelar roll.
Vad tror du?
2.1 Utvidgad teori (for frivillig uppgift)
Antag nu att vi har tva olika mojliga pulser av samma langd p1 (k) och p2 (k);
0 k M: Vi antar dessutom att de ar ortogonala och att de har energi 1, dvs
M
X1
k=0
p1 (k)p2 (k) = 0:
M
X1
k=0
p21 (k) =
M
X1
k=0
p22 (k) = 1:
Antag nu att vi tar emot en signal
x (k) = 1 p1 (k) + 2 p2 (k) + e(k); 0 k M 1
Har ar e(k) en realisering av vitt gaussiskt brus med vantevarde 0 och varians
2 och 1 och 2 ar koeÆcienter.
Vi skapar tva olika (signalanpassade) linjara tidsinvarianta lter med impulssvar h1 respektive h2 dar
h1 (k) = p1 (M k); 0 k M
h2 (k) = p2 (M k); 0 k M:
Vi observerar utsignalerna fran dessa lter vid tiden k = M och far slumptalet
y1 =
M
X1
p1 (k) (1 p1 (k) + 2 p2 (k) + e(k)) =
k=0
M
X1
= 1
k=0
p21 (k) + 2
M
X1
k=0
p1 (k)p2 (k) +
M
X1
k=0
p1 (k)e(k) =
= 1 1 + 2 0 + n1 = 1 + n1
Pa samma satt ger det andra ltret slumptalet
y2 = 2 + n2
Talen n1 och n2 blir bada normalfordelade med vantevarde 0 och standardavvikelse 2 : De ar utfall av de stokastiska variablerna N1 respektive N2 dar
N1 =
M
X1
k=0
p1 (k) (k); N2 =
7
M
X1
m=0
p2 (m) (m)
Korrelationen mellan dem ar alltsa
E (N1 N2 ) = E
M
X1
k=0
0
M
X1
[email protected]
k;m=0
=
=
=
M
X1
k;m=0
M
X1
k;m=0
M
X1
k=0
!
p1 (k) (k)
M
X1
m=0
!!
p2 (m) (m)
=
1
p1 (k) (k)p2 (m) (m)A =
p1 (k)p2 (m)E ( (k) (m)) =
p1 (k)p2 (m)2 Æ [k m] =
p1 (k)p2 (k)2 = 0:
Har anvands att (k) ar oberoende av (m) samt att p1 ar ortogonal mot p2 :
Eftersom N1 och N2 ar okorrelerade och normalfordelade ar de ocksa oberoende
stokastiska variabler. Vektorn (N1 ; N2 ) ar en tvadimensionellt fordelad vektor med kovariansmatris som ar enhetsmatrisen multiplicerad med 2 och med
vantevarde (1 ; 2 ): Den mottagna signalen innehaller alltsa information om
vardet av de tva koeÆcienterna 1 och 2 : Detta kan vi anvanda for att overfora
information over en brusig kanal. Om vi sander en signal dar talen j far anta
tva olika varden, t ex 1 eller +1, sa far vi i den mottagna signalen x den
information som ryms i tva bitar. Genom att anpassa amplituderna, dvs j i
forhallande till brusets varians 2 kan vi styra felsannolikheten da den mottagna
signalen skall avkodas. Hur manga bitar skulle man kunna sanda samtidigt pa
detta satt utan att de "stor varann"?
3 Spektralskattningar, teori
Syftet med denna del av laborationen ar att undersoka spektralegenskaper hos
nagra olika stationara stokastiska processer. Nagra olika metoder att uppskatta
spektrum skall ocksa undersokas.
For en stationar tidsdiskret process fX [m]g denierar man autokorrelationsfunktionen rX [k] (kallas akf) som
rX [k] = E fX [m] X [m + k]g ;
1<k<1
som pga stationariteten endast beror av k och inte av m: Detta ar en "dubbelt
oandlig" jamn talfoljd som har en Fouriertransform SX (!) som benamns spektraltatheten och som denieras av :
SX (!) =
1
X
k=
1
rX [k] e
jk! :
Denna funktion far perioden 2 i variablen !:och ar dessutom en jamn reellvard
funktion Den ska ocksa vara icke-negativ. Vi behover en skattning av autoko8
rrelationsfunktionen och kan exempelvis valja
1
rX [k] M
X1
M m=0
x [m] x [m + k]
Den kan for varden M som ar mycket storre an k vantas ge acceptabla skattningar. Det forutsatter att processen ar ergodisk. Vi far en uppsakttning
av rX [k] som kan anvandas till skattning av spektraltatheten om M har valts
"stort"
rX [k]e
jk!
M1
M
X1
m=0
x [m] x [m + k] e
jk!
Vi valjer ocksa att endast ta med ett andligt antal rX [k] i summan som ska ge
spektraltatheten SX (!) och far darmed att
SX ( ! ) 1
X
M
X1
M m=0
k
!
x [m] x [m + k] e
jk! :
Den yttre summationen over k gors over N termer symmetriskt kring 0: Detta
uttryck kan forhoppningsvis vara en god uppskattning av spektraltatheten SX (!):
Vi nojer oss med att berakna den for N diskreta varden pa !; !n = n2=N;
n = 0; 1; : : : ; N 1: Detta ger en approximerande summa
SX (!n ) 1
X
M
X1
M m=0
k
!
x [m] x [m + k] e
j knN2
Denna dubbelsumma kan vi se som utfallet av den stokastiska variabeln
X
1
M
X1
M m=0
k
X [m] X [m + k] e
j knN2
Denna har vantevarde (ensemblemedelvarde)
X
1
M
X1
E fX [m] X [m + k]g e
M m=0
= rx [k] e
k
X
j knN2
j knN2
k
som vi ser nagot liknar den sokta spektralt
atheten men dar summan trunkerats.
Vi bildar nu DFT av foljden fx [k]gNk=01 och far for dess kvadrerade absolutbe-
9
lopp, eftersom x [k] -vardena ar reella,
N
X1
=
=
x [k ] e
k=0
N
X1
k;m=0
N
X1
k;m=0
j knN2
x [k] e
!0
@
N
X1
m=0
N
q
X
x [k] x [m] e
k
rx [k] e
x [m] e
j knN2 x [m]e+j mnN2
)n2
j (k m
N
(k = m + q)
XX
=
x [m + q] x [m] e
m
1
j mnN2 A
j knN2
j qnN2
NSX (!n )
dar resultatet fran tidigare anvants. Har har ocksa for enkelhets skull antagits att de varden x [n] som saknas, dvs de som har index utanfor intervallet
[0; N 1] har satts till 0. Slutsatsen blir att en tankbar skattning av spektraltatheten ar att ta
1
1 )2
SX (!n ) DF T (fx [k]gN
k=0
N
for en typisk realisering av processen. Denna skattning kallas periodogram. Ofta
ar detta vad man far genom att "ta FFT av signalen".
Tyvarr ar metoden inte sa bra eftersom dess varians ar av samma storleksordning som det den ska skatta. Darfor har ett antal forbattrade skattningar
utvecklats, t ex Welchs metod som i MATLAB implementerats i funktionen
psd. I denna metod, forenklat beskriven, borjar man med att dela upp en lang
foljd sampel i ett antal delfoljder. Varje sadan delfoljd multipliceras med en
fonsterfunktion, t ex hammingfonstret. Detta gor att sidoloberna i spektrum
som annars uppkommer minskas. Sedan beraknar man en skattning med DFT
enligt ovan for var och en av dessa delfojder varefter man tar medelvardet av
dessa olika skattningar. Man kan tillata att delfoljderna har visst overlapp utan
att skattningen blir vasentligt samre. Viktiga parametrar i skattningen blir
1. Langden pa varje delfoljd, N. Detta ger frekvensupplosningen 2=N i
frekvensvariablen !:
2. Antaletpdelfoljder M. Standardavvikelsen i skattningen blir proportionell
mot 1= M:
3. Vilket fonster man skall valja. Detta paverkar bredd pa sidolober i spektrum.
4. Hur stort overlapp man ska tillata. Att anvanda overlapp gor att alla data
anvands lite battre trots fonstringen.
Funktionen psd anvander som standard hammingfonstret, N valjs som en
tvapotens enligt vissa regler som beror pa hur lang datavektor man ger som
indata. O verlappet ar vanligen 0. Antalet delfoljder M beror av datalangden
och valet av N. Gor help psd for narmare information.
10
Download
Random flashcards
Svenska

105 Cards Anton Piter

Multiplacation table

156 Cards Антон piter

Create flashcards