Adaptive antenner: hvordan fungerer det? (Grunnleggende)

God dag.

Jeg har brukt de siste årene på å undersøke og lage ulike algoritmer for romlig signalbehandling i adaptive antenner, og fortsetter å gjøre det som en del av mitt nåværende arbeid. Her vil jeg gjerne dele kunnskapen og triksene som jeg oppdaget selv. Jeg håper at dette vil være nyttig for folk som begynner å studere dette området av signalbehandling eller de som bare er interessert.

Hva er en adaptiv antennegruppe?

Antenne array – dette er et sett med antenneelementer plassert i rommet på en eller annen måte. En forenklet struktur av den adaptive antennegruppen, som vi vil vurdere, kan representeres i følgende form:
Adaptive antenner: hvordan fungerer det? (Grunnleggende)

Adaptive antenner kalles ofte "smarte" antenner (Smart antenne). Det som gjør en antennegruppe "smart" er den romlige signalbehandlingsenheten og algoritmene implementert i den. Disse algoritmene analyserer det mottatte signalet og danner et sett med vektkoeffisienter $inline$w_1…w_N$inline$, som bestemmer amplituden og startfasen til signalet for hvert element. Den gitte amplitude-fasefordelingen bestemmer strålingsmønster hele gitteret som helhet. Evnen til å syntetisere et strålingsmønster med den nødvendige formen og endre det under signalbehandling er en av hovedtrekkene til adaptive antenner, som gjør det mulig å løse et bredt spekter av problemer. rekke oppgaver. Men først ting først.

Hvordan dannes strålingsmønsteret?

Retningsmønster karakteriserer signaleffekten som sendes ut i en bestemt retning. For enkelhets skyld antar vi at gitterelementene er isotrope, dvs. for hver av dem avhenger ikke kraften til det utsendte signalet av retningen. Forsterkningen eller dempningen av kraften gitt av gitteret i en bestemt retning oppnås pga. innblanding Elektromagnetiske bølger som sendes ut av ulike elementer i antennegruppen. Et stabilt interferensmønster for elektromagnetiske bølger er bare mulig hvis de sammenheng, dvs. faseforskjellen til signalene bør ikke endres over tid. Ideelt sett bør hvert element i antennegruppen utstråle harmonisk signal på samme operatørfrekvens $inline$f_{0}$inline$. Imidlertid må man i praksis arbeide med smalbåndssignaler som har et spekter med begrenset bredde $inline$Delta f << f_{0}$inline$.
La alle AR-elementer sende ut samme signal med kompleks amplitude $inline$x_n(t)=u(t)$inline$. Så videre fjernkontroll ved mottakeren kan signalet mottatt fra det n-te elementet representeres i analytisk form:

$$display$$a_n(t) = u(t-tau_n)e^{i2pi f_0(t-tau_n)}$$display$$

der $inline$tau_n$inline$ er forsinkelsen i signalutbredelsen fra antenneelementet til mottakspunktet.
Et slikt signal er "kvasi-harmonisk", og for å tilfredsstille koherensbetingelsen, er det nødvendig at den maksimale forsinkelsen i forplantningen av elektromagnetiske bølger mellom hvilke som helst to elementer er mye mindre enn den karakteristiske endringstiden i signalomhyllingen $inline$T$inline$, dvs. $inline$u(t-tau_n) ≈ u(t-tau_m)$inline$. Dermed kan betingelsen for koherensen til et smalbåndssignal skrives som følger:

$$display$$T≈frac{1}{Delta f}>>frac{D_{max}}{c}=max(tau_k-tau_m) $$display$$

der $inline$D_{max}$inline$ er maksimal avstand mellom AR-elementer, og $inline$с$inline$ er lysets hastighet.

Når et signal mottas, utføres koherent summering digitalt i den romlige prosesseringsenheten. I dette tilfellet bestemmes den komplekse verdien av det digitale signalet ved utgangen av denne blokken av uttrykket:

$$display$$y=sum_{n=1}^Nw_n^*x_n$$display$$

Det er mer praktisk å representere det siste uttrykket i skjemaet prikkprodukt N-dimensjonale komplekse vektorer i matriseform:

$$display$$y=(textbf{w},textbf{x})=textbf{w}^Htextbf{x}$$display$$

der w и x er kolonnevektorer, og $inline$(.)^H$inline$ er operasjonen Hermitisk konjugasjon.

Vektorrepresentasjon av signaler er en av de grunnleggende når du arbeider med antenner, fordi lar deg ofte unngå tungvinte matematiske beregninger. I tillegg tillater identifisering av et signal mottatt på et bestemt tidspunkt med en vektor ofte en å abstrahere fra det virkelige fysiske systemet og forstå nøyaktig hva som skjer fra et geometris synspunkt.

For å beregne strålingsmønsteret til en antennegruppe, må du mentalt og sekvensielt "starte" et sett med flybølger fra alle mulige retninger. I dette tilfellet, verdiene til vektorelementene x kan representeres i følgende form:

$$display$$x_n=s_n=exp{-i(textbf{k}(phi,theta),textbf{r}_n)}$$display$$

der k - bølgevektor, $inline$phi$inline$ og $inline$theta$inline$ – asimutvinkel и høydevinkel, som karakteriserer ankomstretningen til en plan bølge, $inline$textbf{r}_n$inline$ er koordinaten til antenneelementet, $inline$s_n$inline$ er elementet til fasevektoren s plan bølge med bølgevektor k (i engelsk litteratur kalles fasevektoren steerage vector). Avhengighet av kvantumets kvadrerte amplitude y fra $inline$phi$inline$ og $inline$theta$inline$ bestemmer strålingsmønsteret til antennegruppen for mottak for en gitt vektor av vektkoeffisienter w.

Funksjoner ved strålingsmønsteret til antennegruppen

Det er praktisk å studere de generelle egenskapene til strålingsmønsteret til antenneoppstillinger på en lineær ekvidistant antenneoppstilling i horisontalplanet (dvs. mønsteret avhenger bare av asimutvinkelen $inline$phi$inline$). Praktisk fra to synsvinkler: analytiske beregninger og visuell presentasjon.

La oss beregne DN for en vektenhetsvektor ($inline$w_n=1, n = 1 ... N$inline$), etter det beskrevne ovenfor nærme seg.
Matematikk herAdaptive antenner: hvordan fungerer det? (Grunnleggende)
Projeksjon av bølgevektoren på den vertikale aksen: $inline$k_v=-frac{2pi}{lambda}sinphi$inline$
Vertikal koordinat for antenneelementet med indeks n: $inline$r_{nv}=(n-1)d$inline$
Her d - antennegruppeperiode (avstand mellom tilstøtende elementer), λ - bølgelengde. Alle andre vektorelementer r er lik null.
Signalet mottatt av antennegruppen registreres i følgende form:

$$display$$y=sum_{n=1}^{N}1 ⋅exp{i2pi nfrac{d}{lambda}sinphi}$$display$$

La oss bruke formelen for summer av geometrisk progresjon и representasjon av trigonometriske funksjoner i form av komplekse eksponentialer :

$$display$$y=frac{1-exp{i2pi Nfrac{d}{lambda}sinphi}}{1-exp{i2pi frac{d}{lambda}sinphi}}=frac{sin(pi frac{Nd} {lambda}sinphi)}{sin(pi frac{d}{lambda}sinphi)}exp{ipi frac{d(N-1)}{lambda}sinphi}$$display$$


Som et resultat får vi:

$$display$$F(phi)=|y|^2=frac{sin^2(pi frac{Nd}{lambda}sinphi)}{sin^2(pi frac{d}{lambda}sinphi)} $ $display$$

Frekvens av strålingsmønster

Det resulterende antennearray-strålingsmønsteret er en periodisk funksjon av sinusen til vinkelen. Dette betyr at ved visse verdier av forholdet d/λ den har diffraksjon (ekstra) maksima.
Adaptive antenner: hvordan fungerer det? (Grunnleggende)Ikke-standardisert strålingsmønster for antennegruppen for N = 5
Adaptive antenner: hvordan fungerer det? (Grunnleggende)Normalisert strålingsmønster for antennegruppen for N = 5 i det polare koordinatsystemet

Posisjonen til "diffraksjonsdetektorene" kan sees direkte fra formler for DN. Vi vil imidlertid prøve å forstå hvor de kommer fra fysisk og geometrisk (i N-dimensjonalt rom).

elementer utfasing vektor s er komplekse eksponenter $inline$e^{iPsi n}$inline$, hvis verdier bestemmes av verdien av den generaliserte vinkelen $inline$Psi = 2pi frac{d}{lambda}sinphi$inline$. Hvis det er to generaliserte vinkler som tilsvarer forskjellige ankomstretninger for en plan bølge, for hvilke $inline$Psi_1 = Psi_2 + 2pi m$inline$, betyr dette to ting:

  • Fysisk: plane bølgefronter som kommer fra disse retningene induserer identiske amplitude-fasefordelinger av elektromagnetiske oscillasjoner på elementene i antennegruppen.
  • Geometrisk: fasevektorer for disse to retningene faller sammen.

Retningene for bølgeankomst relatert på denne måten er ekvivalente fra antennegruppens synspunkt og kan ikke skilles fra hverandre.

Hvordan bestemme området av vinkler der bare ett hovedmaksimum av DP alltid ligger? La oss gjøre dette i nærheten av null asimut fra følgende betraktninger: størrelsen på faseforskyvningen mellom to tilstøtende elementer må ligge i området fra $inline$-pi$inline$ til $inline$pi$inline$.

$$display$$-pi<2pifrac{d}{lambda}sinphi

Ved å løse denne ulikheten får vi betingelsen for regionen med unikhet i nærheten av null:

$$display$$|sinphi|

Det kan sees at størrelsen på regionen med unikhet i vinkel avhenger av forholdet d/λ. om d = 0.5λ, da er hver retning for signalankomst "individuell", og regionen med unikhet dekker hele spekteret av vinkler. Hvis d = 2.0λ, da er retningene 0, ±30, ±90 ekvivalente. Diffraksjonslober vises på strålingsmønsteret.

Vanligvis søkes diffraksjonslober undertrykt ved bruk av retningsbestemte antenneelementer. I dette tilfellet er det komplette strålingsmønsteret til antennegruppen produktet av mønsteret til ett element og en rekke isotrope elementer. Parametrene til mønsteret til ett element velges vanligvis basert på betingelsen for området med entydighet til antennegruppen.

Hovedlobens bredde

Viden kjent ingeniørformel for å estimere bredden på hovedloben til et antennesystem: $inline$Delta phi ≈ frac{lambda}{D}$inline$, hvor D er den karakteristiske størrelsen til antennen. Formelen brukes for ulike typer antenner, inkludert speil. La oss vise at det også er gyldig for antenner.

La oss bestemme bredden på hovedloben ved de første nullene i mønsteret i nærheten av hovedmaksimumet. Teller uttrykkene for $inline$F(phi)$inline$ forsvinner når $inline$sinphi=mfrac{lambda}{dN}$inline$. De første nullene tilsvarer m = ±1. Troende $inline$frac{lambda}{dN}<<1$inline$ får vi $inline$Delta phi = 2frac{lambda}{dN}$inline$.

Vanligvis bestemmes bredden på antennedirektivitetsmønsteret av halveffektnivået (-3 dB). I dette tilfellet bruker du uttrykket:

$$display$$Delta phi≈0.88frac{lambda}{dN}$$display$$

EksempelAdaptive antenner: hvordan fungerer det? (Grunnleggende)

Bredden på hovedloben kan kontrolleres ved å sette forskjellige amplitudeverdier for antenneoppstillingens vektingskoeffisienter. La oss vurdere tre distribusjoner:

  • Ensartet amplitudefordeling (vekter 1): $inline$w_n=1$inline$.
  • Amplitudeverdier som avtar mot kantene av gitteret (vekter 2): $inline$w_n=0.5+0.3cos(2pifrac{n-1}{N}-pifrac{N-1}{N})$inline$
  • Amplitudeverdier som øker mot kantene på gitteret (vekter 3): $inline$w_n=0.5-0.3cos(2pifrac{n-1}{N}-pifrac{N-1}{N})$inline$

Figuren viser de resulterende normaliserte strålingsmønstrene på en logaritmisk skala:Adaptive antenner: hvordan fungerer det? (Grunnleggende)
Følgende trender kan spores fra figuren: fordelingen av vektkoeffisientamplituder som avtar mot kantene av arrayet fører til en utvidelse av hovedloben til mønsteret, men en reduksjon i nivået til sidelobene. Amplitudeverdier som øker mot kantene av antennegruppen, fører tvert imot til en innsnevring av hovedloben og en økning i nivået på sidelobene. Det er praktisk å vurdere begrensende tilfeller her:

  1. Amplitudene til vektkoeffisientene til alle elementer unntatt de ekstreme er lik null. Vektene for de ytterste elementene er lik én. I dette tilfellet blir gitteret ekvivalent med en to-element AR med en periode D = (N-1)d. Det er ikke vanskelig å estimere bredden på hovedbladet ved å bruke formelen presentert ovenfor. I dette tilfellet vil sideveggene bli til diffraksjonsmaksima og justere med hovedmaksimum.
  2. Vekten til det sentrale elementet er lik en, og alle andre er lik null. I dette tilfellet mottok vi i hovedsak en antenne med et isotropt strålingsmønster.

Retning av hovedmaksimum

Så vi så på hvordan du kan justere bredden på hovedloben til AP AP. La oss nå se hvordan du styrer retningen. La oss huske vektoruttrykk for det mottatte signalet. La oss ønske at maksimum av strålingsmønsteret skal se i en bestemt retning $inline$phi_0$inline$. Dette betyr at maksimal effekt bør mottas fra denne retningen. Denne retningen tilsvarer fasevektoren $inline$textbf{s}(phi_0)$inline$ i N-dimensjonalt vektorrom, og den mottatte kraften er definert som kvadratet av skalarproduktet til denne fasevektoren og vektoren av vektkoeffisienter w. Skalarproduktet av to vektorer er maksimalt når de kollineær, dvs. $inline$textbf{w}=beta textbf{s}(phi_0)$inline$, hvor β – en eller annen normaliserende faktor. Således, hvis vi velger vektvektoren lik fasevektoren for den nødvendige retningen, vil vi rotere maksimum av strålingsmønsteret.
Adaptive antenner: hvordan fungerer det? (Grunnleggende)
Tenk på følgende vektingsfaktorer som et eksempel: $inline$textbf{w}=textbf{s}(10°)$inline$

$$display$$w_n=exp{i2pifrac{d}{lambda}(n-1)sin(10pi/180)}$$display$$

Som et resultat får vi et strålingsmønster med hovedmaksimum i retning 10°.

Nå bruker vi de samme vektingskoeffisientene, men ikke for signalmottak, men for overføring. Det er verdt å vurdere her at når du sender et signal, endres retningen til bølgevektoren til det motsatte. Dette betyr at elementene fasevektor for mottak og overføring er de forskjellige i eksponentens tegn, dvs. er sammenkoblet av kompleks konjugering. Som et resultat oppnår vi maksimum av strålingsmønsteret for overføring i retning -10°, som ikke sammenfaller med maksimum av strålingsmønsteret for mottak med samme vektkoeffisienter For å korrigere situasjonen er det nødvendig å bruke kompleks konjugasjon på vektkoeffisientene også.
Adaptive antenner: hvordan fungerer det? (Grunnleggende)
Det beskrevne trekk ved dannelsen av mønstre for mottak og overføring bør alltid huskes når du arbeider med antenner.

La oss leke med strålingsmønsteret

Flere høydepunkter

La oss sette oppgaven med å danne to hovedmaksima for strålingsmønsteret i retningen: -5° og 10°. For å gjøre dette velger vi som vektvektor den vektede summen av fasevektorer for de tilsvarende retningene.

$$display$$textbf{w} = betatextbf{s}(10°)+(1-beta)textbf{s}(-5°)$$display$$

Adaptive antenner: hvordan fungerer det? (Grunnleggende)Justering av forholdet β Du kan justere forholdet mellom hovedbladene. Her er det igjen praktisk å se på hva som skjer i vektorrommet. Hvis β er større enn 0.5, så ligger vektoren av vektkoeffisienter nærmere s(10°), ellers til s(-5°). Jo nærmere vektvektoren er en av fasene, desto større er det tilsvarende skalarproduktet, og derfor verdien av den tilsvarende maksimale DP.
Adaptive antenner: hvordan fungerer det? (Grunnleggende)
Det er imidlertid verdt å tenke på at begge hovedbladene har en begrenset bredde, og hvis vi ønsker å stille inn to nære retninger, vil disse kronbladene smelte sammen til ett, orientert mot en eller annen midtretning.

Ett maksimum og null

La oss nå prøve å justere maksimum av strålingsmønsteret til retningen $inline$phi_1=10°$inline$ og samtidig undertrykke signalet som kommer fra retningen $inline$phi_2=-5°$inline$. For å gjøre dette må du sette DN-null for den tilsvarende vinkelen. Du kan gjøre dette på følgende måte:

$$display$$textbf{w}=textbf{s}_1-frac{textbf{s}_2^Htextbf{s}_1}{N}textbf{s}_2$$display$$

der $inline$textbf{s}_1 = textbf{s}(10°)$inline$, og $inline$textbf{s}_2 = textbf{s}(-5°)$inline$.
Adaptive antenner: hvordan fungerer det? (Grunnleggende)
Den geometriske betydningen av å velge en vektvektor er som følger. Vi vil ha denne vektoren w hadde en maksimal projeksjon på $inline$textbf{s}_1$inline$ og var samtidig ortogonal på vektoren $inline$textbf{s}_2$inline$. Vektoren $inline$textbf{s}_1$inline$ kan representeres som to ledd: en kollineær vektor $inline$textbf{s}_2$inline$ og en ortogonal vektor $inline$textbf{s}_2$inline$. For å tilfredsstille problemformuleringen er det nødvendig å velge den andre komponenten som vektor av vektkoeffisienter w. Den kollineære komponenten kan beregnes ved å projisere vektoren $inline$textbf{s}_1$inline$ på den normaliserte vektoren $inline$frac{textbf{s}_2}{sqrt{N}}$inline$ ved å bruke skalarproduktet.

$$display$$textbf{s}_{1||}=frac{textbf{s}_2}{sqrt{N}}frac{textbf{s}_2^Htextbf{s}_1}{sqrt{N}} $$display$$

Følgelig, ved å trekke dens kollineære komponent fra den opprinnelige fasevektoren $inline$textbf{s}_1$inline$, får vi den nødvendige vektvektoren.
Adaptive antenner: hvordan fungerer det? (Grunnleggende)

Noen tilleggsmerknader

  1. Overalt over utelot jeg spørsmålet om normalisering av vektvektoren, dvs. dens lengde. Så normalisering av vektvektoren påvirker ikke egenskapene til antennearrayets strålingsmønster: retningen til hovedmaksimum, bredden på hovedloben, etc. Det kan også vises at denne normaliseringen ikke påvirker SNR ved utgangen til rombehandlingsenheten. I denne forbindelse, når vi vurderer romlige signalbehandlingsalgoritmer, aksepterer vi vanligvis en enhetsnormalisering av vektvektoren, dvs. $inline$textbf{w}^Htextbf{w}=1$inline$
  2. Mulighetene for å danne et mønster av en antennegruppe bestemmes av antall elementer N. Jo flere elementer, jo bredere er mulighetene. Jo flere frihetsgrader når du implementerer romlig vektbehandling, jo flere alternativer for hvordan du kan "vri" vektvektoren i N-dimensjonalt rom.
  3. Når du mottar strålingsmønstre, eksisterer ikke antennegruppen fysisk, og alt dette eksisterer bare i "fantasien" til dataenheten som behandler signalet. Dette betyr at det samtidig er mulig å syntetisere flere mønstre og uavhengig behandle signaler som kommer fra forskjellige retninger. Ved overføring er alt noe mer komplisert, men det er også mulig å syntetisere flere DN-er for å overføre forskjellige datastrømmer. Denne teknologien i kommunikasjonssystemer kalles MIMO.
  4. Ved å bruke den presenterte Matlab-koden kan du leke med DN selv
    Kode

    % antenna array settings
    N = 10;             % number of elements
    d = 0.5;            % period of antenna array
    wLength = 1;        % wavelength
    mode = 'receiver';  % receiver or transmitter
    
    % weights of antenna array
    w = ones(N,1);    
    % w = 0.5 + 0.3*cos(2*pi*((0:N-1)-0.5*(N-1))/N).';
    % w = 0.5 - 0.3*cos(2*pi*((0:N-1)-0.5*(N-1))/N).';
    % w = exp(2i*pi*d/wLength*sin(10/180*pi)*(0:N-1)).';
    % b = 0.5; w = b*exp(2i*pi*d/wLength*sin(+10/180*pi)*(0:N-1)).' + (1-b)*exp(2i*pi*d/wLength*sin(-5/180*pi)*(0:N-1)).';
    % b = 0.5; w = b*exp(2i*pi*d/wLength*sin(+3/180*pi)*(0:N-1)).' + (1-b)*exp(2i*pi*d/wLength*sin(-3/180*pi)*(0:N-1)).';
    
    % s1 = exp(2i*pi*d/wLength*sin(10/180*pi)*(0:N-1)).';
    % s2 = exp(2i*pi*d/wLength*sin(-5/180*pi)*(0:N-1)).';
    % w = s1 - (1/N)*s2*s2'*s1;
    % w = s1;
    
    % normalize weights
    w = w./sqrt(sum(abs(w).^2));
    
    % set of angle values to calculate pattern
    angGrid_deg = (-90:0.5:90);
    
    % convert degree to radian
    angGrid = angGrid_deg * pi / 180;
    % calculate set of steerage vectors for angle grid
    switch (mode)
        case 'receiver'
            s = exp(2i*pi*d/wLength*bsxfun(@times,(0:N-1)',sin(angGrid)));
        case 'transmitter'
            s = exp(-2i*pi*d/wLength*bsxfun(@times,(0:N-1)',sin(angGrid)));
    end
    
    % calculate pattern
    y = (abs(w'*s)).^2;
    
    %linear scale
    plot(angGrid_deg,y/max(y));
    grid on;
    xlim([-90 90]);
    
    % log scale
    % plot(angGrid_deg,10*log10(y/max(y)));
    % grid on;
    % xlim([-90 90]);

Hvilke problemer kan løses ved hjelp av en adaptiv antennegruppe?

Optimalt mottak av et ukjent signalHvis ankomstretningen til signalet er ukjent (og hvis kommunikasjonskanalen er flerveis, er det vanligvis flere retninger), så ved å analysere signalet mottatt av antennegruppen, er det mulig å danne en optimal vektvektor w slik at SNR ved utgangen av rombehandlingsenheten vil være maksimal.

Optimalt signalmottak mot bakgrunnsstøyHer er problemet stilt som følger: de romlige parametrene til det forventede nyttige signalet er kjent, men det er kilder til interferens i det ytre miljøet. Det er nødvendig å maksimere SINR ved AP-utgangen, og minimere påvirkningen av interferens på signalmottak så mye som mulig.

Optimal signaloverføring til brukerenDette problemet er løst i mobile kommunikasjonssystemer (4G, 5G), så vel som i Wi-Fi. Betydningen er enkel: ved hjelp av spesielle pilotsignaler i brukertilbakemeldingskanalen vurderes de romlige egenskapene til kommunikasjonskanalen, og på grunnlag av den velges vektoren av vektkoeffisienter som er optimal for overføring.

Romlig multipleksing av datastrømmerAdaptive antenner tillater dataoverføring til flere brukere samtidig på samme frekvens, og danner et individuelt mønster for hver av dem. Denne teknologien kalles MU-MIMO og blir for tiden aktivt implementert (og allerede et sted) i kommunikasjonssystemer. Muligheten for romlig multipleksing er gitt for eksempel i 4G LTE-mobilkommunikasjonsstandarden, IEEE802.11ay Wi-Fi-standarden og 5G-mobilkommunikasjonsstandardene.

Virtuelle antenner for radarerDigitale antenner gjør det mulig, ved å bruke flere sendeantenneelementer, å danne en virtuell antennegruppe med betydelig større størrelser for signalbehandling. Et virtuelt rutenett har alle egenskapene til et ekte, men krever mindre maskinvare å implementere.

Estimering av parametere for strålingskilderAdaptive antenner gjør det mulig å løse problemet med å estimere antall, effekt, vinkelkoordinater kilder til radioemisjon, etablere en statistisk sammenheng mellom signaler fra ulike kilder. Den største fordelen med adaptive antenner i denne saken er muligheten til å superoppløse nærliggende strålingskilder. Kilder, vinkelavstanden mellom disse er mindre enn bredden av hovedloben til antennegruppens strålingsmønster (Rayleigh oppløsningsgrense). Dette er hovedsakelig mulig på grunn av vektorrepresentasjonen av signalet, den velkjente signalmodellen, samt apparatet for lineær matematikk.

Takk for oppmerksomheten

Kilde: www.habr.com

Legg til en kommentar