AI + Machine Learning
001 - GLASS AI (StyleGAN2)

Det här är ett generativt adversariellt nätverk tränat helt från grunden på mina egna fotografier. Inga förtränade vikter från internet. Ingen lånad kunskap från andra modeller. Inga skrapade dataset. Bara min egna kamerarulle och mycket GPU-tid.This is a generative adversarial network trained completely from scratch on my own photographs. No pretrained weights from the internet. No borrowed knowledge from other models. No scraped datasets. Just my own camera roll and a lot of GPU time.

Filosofin:The Philosophy: Jag ville se vad ett neuralt nätverk skulle lära sig om det bara fick se mitt liv. Bara det jag valde att fotografera: glasobjekt jag blåste i ateliern, ögonblick jag ville minnas, texturer som fastnade i blicken, hur ljuset faller genom munblåst glas. Frågan var: kan en maskin lära sig att drömma mina drömmar?I wanted to see what a neural network would learn if it only ever saw my life. Only the things I chose to photograph - glass objects I made in my studio, moments I wanted to remember, textures that caught my eye, the particular way light falls through handblown glass. The question was: can a machine learn to dream my dreams?

Hur GAN fungerar:How GANs Work: Ett generativt adversariellt nätverk består av två neurala nätverk i ständig konkurrens. Generatorn försöker skapa falska bilder som ser äkta ut. Diskriminatorn försöker avgöra vilka bilder som är falska. De tränas ihop: ju bättre Diskriminatorn blir på att avslöja fusk, desto bättre måste Generatorn bli på att framställa övertygande bilder. Genom denna process lär sig Generatorn till slut de statistiska mönstren bakom träningsdatan.A Generative Adversarial Network consists of two neural networks locked in competition. The Generator tries to create fake images that look real. The Discriminator tries to identify which images are fake. They train together - as the Discriminator gets better at spotting fakes, the Generator must get better at creating convincing ones. Through this adversarial process, the Generator eventually learns the statistical patterns underlying the training data.

Datasetet:The Dataset: Jag utgick från 7 843 fotografier ur min kamerarulle, tagna över flera år. Dessa förbehandlades till 512x512 pixlar inför träningen. Genom dataaugmentering (slumpmässiga speglingar, färgjustering, svaga rotationer) utökades materialet till 39 215 träningsbilder. Innehållet är personligt: glas jag blåste, keramikexperiment, metallskulpturer, funna objekt, och otaliga svårdefinierade ögonblick.I started with 7,843 photographs from my camera roll, spanning several years. These were preprocessed to 512x512 pixels for training. Through data augmentation (random flips, color jitter, slight rotations), this expanded to 39,215 training images. The content is personal - glass pieces I blew, ceramic experiments, metal sculptures, found objects, and countless undefinable moments.

Utökad konditionering:Enhanced Conditioning: Enkla GAN genererar slumpmässiga bilder ur brus. För att ha mer kontroll implementerade jag omfattande särdragsextraktion på varje träningsbild. Det inkluderar: rumsliga rutnät som delar varje bild i 16x16 celler med färg-, textur- och gradientinformation; materialanalys som detekterar reflektivitet, råhet och metalliska egenskaper; ljusanalys; topologiska särdrag med Betti-tal och Euler-karakteristik; fraktaldimension som mäter visuell komplexitet; och spektral grafanalys. Allt detta, 6,2 gigabyte utvunna särdrag, matas in i 512-dimensionella konditioneringsvektorer.Simple GANs generate random images from noise. To have more control, I implemented extensive feature extraction on every training image. This includes: spatial grids dividing each image into 16x16 cells with color, texture, and gradient information; material property analysis detecting reflectivity, roughness, and metallic qualities; lighting analysis; topological features using Betti numbers and Euler characteristics; fractal dimension measuring visual complexity; and spectral graph analysis. All of this - 6.2 gigabytes of extracted features - feeds into 512-dimensional conditioning vectors.

Arkitektur:Architecture: Implementationen använder StyleGAN2-ADA (Adaptive Discriminator Augmentation) som bas, med betydande modifieringar. Jag byggde en kompositionell arkitektur med separata generatorer för förgrundsobjekt och bakgrunder, kombinerade genom inlärda alfamasker. Diskriminatorn utvärderar bilder i tre olika skalor samtidigt. Fem specialiserade encodernätverk bearbetar konditioneringssärdragen innan de injiceras i generatorn.The implementation uses StyleGAN2-ADA (Adaptive Discriminator Augmentation) as a base, with significant modifications. I built a compositional architecture with separate generators for foreground objects and backgrounds, combined through learned alpha masks. The discriminator evaluates images at three different scales simultaneously. Five specialized encoder networks process the conditioning features before injection into the generator.

Träning:Training: Modellen tränade i ungefär två veckor på en RTX 3060 med 12 GB VRAM. Mixed precision-träning (FP16) höll minnesanvändningen hanterbar utan att offra kvalitet. Träningsloggarna visar över 40 miljoner parameteruppdateringar.The model trained for approximately two weeks on an RTX 3060 with 12GB VRAM. Mixed precision (FP16) training kept memory usage manageable while maintaining quality. The training logs show 40+ million parameter updates.

7,843
original photos
39,215
augmented
512x512
resolution
6.2 GB
features
512-dim
conditioning
~2 weeks
training
Python PyTorch StyleGAN2-ADA CUDA Mixed Precision
002 - Nadja LLM

En liten språkmodell tränad på mitt eget skrivande: mejl, meddelanden, anteckningar, reflektioner över flera år. Målet var inte att skapa något praktiskt användbart. Jag ville se om mönstren i mitt språk kunde fångas och speglas tillbaka, om än via ett relativt enkelt neuralt nätverk.A small language model trained on my own writing - emails, messages, notes, reflections spanning several years. The goal wasn't to create something useful in a practical sense. I wanted to see if patterns in my language could be captured and reflected back, even through a relatively simple neural network.

Arkitektur:Architecture: Det är en GPT-liknande decoder-only-transformer, skriven helt från grunden utan färdiga transformerbibliotek. Varje komponent, multi-head self-attention, positionsvisa feedforward-nätverk, layer normalization, positionell encoding, implementerades manuellt. Modellen har 6 transformerlager, 8 attentionhuvuden och en embeddingdimension på 512.This is a GPT-style decoder-only transformer, written entirely from scratch without using any pre-built transformer libraries. Every component - the multi-head self-attention mechanism, the position-wise feedforward networks, the layer normalization, the positional encoding - was implemented manually. The model has 6 transformer layers, 8 attention heads, and an embedding dimension of 512.

Multi-Head Self-Attention:Multi-Head Self-Attention: Transformerns kärna. För varje token beräknar modellen attention-poäng mot alla tidigare tokens och lär sig vilka delar av kontexten som är relevanta för att förutsäga nästa ord. Flera huvuden låter modellen uppmärksamma olika typer av relationer samtidigt.The heart of the transformer. For each token, the model computes attention scores with every previous token, learning which parts of the context are relevant for predicting the next word. Multiple heads allow the model to attend to different types of relationships simultaneously.

Tokenizer:Tokenizer: Jag byggde en egen BPE-tokenizer (Byte Pair Encoding) tränad specifikt på mitt skrivande. BPE börjar med enskilda tecken och slår iterativt ihop de vanligaste paren, tills det finns ett ordförråd av delordsenheterna som effektivt fångar textens mönster.I built a custom BPE (Byte Pair Encoding) tokenizer trained specifically on my writing. BPE starts with individual characters and iteratively merges the most frequent pairs, eventually building a vocabulary of subword units that efficiently represent the patterns in the text.

Träningsdata:Training Data: 221 411 rader text från mitt personliga skrivande. Det innefattar år av korrespondens, anteckningar och annat jag skrivit. Modellen lärde sig från detta korpus utan något externt material.221,411 lines of text from my personal writing. This includes years of correspondence, notes, and other text I've written. The model learned from this corpus without any external data.

RAG-implementation:RAG Implementation: För att ge modellen tillgång till specifik information utan att behöva memorera allt implementerade jag Retrieval-Augmented Generation. Vid textgenerering kan modellen hämta relevanta stycken ur en databas och inkludera dem i sitt sammanhang.To give the model access to specific information without having to memorize everything, I implemented Retrieval-Augmented Generation. When generating text, the model can retrieve relevant passages from a database and incorporate them into its context.

Resultat:Results: Modellen producerar text som ibland fångar min röst: vissa vändningar, ämnesböjelser, stilistiska egenheter. Den fungerar som en spegel och visar mönster jag kanske inte hade lagt märke till i mitt eget skrivande.The model produces text that occasionally captures my voice - certain turns of phrase, topic tendencies, stylistic quirks. It works as a mirror, showing patterns I might not have noticed in my own writing.

221,411
lines of text
6
layers
8
attention heads
512
embed dim
Python PyTorch Transformers BPE RAG
008 - Augmenterat Sápmi

En AI-modell finjusterad på tiotusen fotografier av samiska föremål från öppna museiarkiv (K-samsök, Finna.fi, DigitaltMuseum), sedan ombedd att generera nya. Det den returnerar är gissningar: föremål som aldrig tillverkades.An AI model fine-tuned on ten thousand photographs of Sámi objects from open museum archives (K-samsök, Finna.fi, DigitaltMuseum), then asked to generate new ones. What it returns are guesses: objects that were never made.

Den koloniala blicken lever i datan:The colonial gaze lives in the data: modellen sorterar världen som arkiven gjorde. Europeisk konst fick tusen lådor; urfolksmaterial fick en. Så när den genererar samiska föremål blandar den in mattor från Anatolien och broderi från Guatemala, för att den aldrig lärde sig att de var olika saker. Felen är inte brus att rensa bort. De är arkivets struktur som blir synlig.the model sorts the world the way the archives did. European art was given a thousand boxes; Indigenous material got one. So when it generates Sámi objects it blends in carpets from Anatolia and embroidery from Guatemala, because it never learned they were different things. The errors are not noise to be cleaned. They are the structure of the archive becoming visible.

Ett tredje Sápmi:A third Sápmi: i feltolkningarna bygger modellen ett Sápmi som aldrig existerade, med mönster som reste genom databaser i stället för handelsvägar. Ett tredje, som lever i glappen mellan tiotusen museifoton och en maskins antaganden. Jag arbetar enbart med öppna data, som icke-samisk konstnär, och behandlar detta som kritisk konst. Projektet syftar till att göra frånvaron synlig, inte fylla den.in the misreadings the model builds a Sápmi that never existed, with patterns that travelled through databases instead of trade routes. A third one, living in the gap between ten thousand museum photos and a machine's assumptions. I work only with open data, as a non-Sámi artist, treating this as critical art. The project aims to make the absence visible, not to fill it.

10,002
training images
1,530+
generated
SD 1.5
base model
LoRA
sami_duodji
8
3D models
Python Stable Diffusion 1.5 LoRA PyTorch 3D
Data + VisualiseringData + Visualization
003 - Birthwave

Ett system som översätter utomhustemperatur till brännkurvor. Vädret en given dag avgör hur het ugnen blir, hur länge den håller topptemperaturen och hur hela brännförloppet ser ut. Kalla dagar ger mildare bränningar. Varma dagar pressar mot gränsen för vad glaset tål.A system that translates outdoor temperature into kiln firing schedules. The weather on any given day determines how hot the kiln will go, how long it will hold at peak temperature, and how the entire firing curve unfolds. Cold days mean gentler fires. Warm days push toward the edge of what the glass can take.

Konceptet:The Concept: Glasslumping kräver exakt temperaturkontroll. För hett och glaset kollapsar till en pöl. För svalt och det knappt rör sig. Det traditionella sättet är fasta program. Birthwave härleder i stället brännparametrarna från vädret och gör varje verk till ett avtryck av atmosfäriska förhållanden.Glass slumping requires precise temperature control. Too hot and the glass collapses into a puddle. Too cool and it barely moves. The traditional approach uses fixed programs. Birthwave instead derives the firing parameters from the weather, making each piece a record of atmospheric conditions.

Matematiken:The Mathematics: Grundekvationen relaterar utomhustemperatur till ugnens måltemperatur:The core equation relates outdoor temperature to kiln target temperature:

T_kiln = 518 + 6.997 x T_outdoor

Det innebär att vid -14,5C ute går ugnen på lägsta läget (knappt slumpning). Vid 30,3C ute når den 730C (full smältfog). Konstanterna togs fram genom empirisk testning och personlig preferens för hur väder ska avbildas på eld.This means at -14.5C outside, the kiln goes (barely slumping). At 30.3C outside, it reaches 730C (full fuse). The constants were derived from empirical testing and personal preference for how weather should map to fire.

Årsnormalisering:Year Normalization: För att hantera säsongsvariationen beräknar systemet ett "årspositionsvärde":To account for seasonal variation, the system calculates a "year position" value:

H_year = (T_outdoor + 14.5) / 44.8

Det normaliserar temperaturintervallet (-14,5C till 30,3C) till en 0-1-skala som representerar positionen i det årliga temperaturförloppet.This normalizes the temperature range (-14.5C to 30.3C) to a 0-1 scale representing position in the yearly temperature cycle.

Hålltid:Hold Time: Hur länge ugnen stannar vid topptemperaturen varierar också med förhållandena:How long the kiln stays at peak temperature also varies with conditions:

hold = 60 + 30 x H_year + 15 x W

Där W är en vädermodifierare (-0,2 för regn till +0,3 för brinnande sol). Längre hålltid ger kraftigare slumping.Where W is a weather modifier (-0.2 for rain to +0.3 for blazing sun). Longer holds mean more dramatic slumping.

Personlig betydelse:Personal Significance: 4 april 2025, dagen min son föddes. Utomhustemperaturen låg mellan 2C och 16C. Ugnen nådde sin topp. Det verket finns som ett fysiskt avtryck av vädret den dagen, omvandlat genom eld till permanent form.April 4, 2025 - the day my son was born. Outside temperature ranged from 2C to 16C. The kiln peaked. That piece exists as a physical record of the weather on that day, transformed through fire into permanent form.

-14.5C
min temp
30.3C
max temp
730C
max kiln
44.8
range span
JavaScript WebGL Canvas API Kiln Control
004 - func2wav

Ett verktyg som omvandlar matematiska funktioner till ljud. Skriv en ekvation, hör hur den låter. Den mest direkta tänkbara översättningen mellan matematik och ljud.A tool that converts mathematical functions into sound. Type an equation, hear what it sounds like. The most direct translation between mathematics and audio possible.

Grundidén:Core Concept: Ljud är tryckvågor. Tryckvågor kan beskrivas matematiskt. Därför kan vilken matematisk funktion som helst som producerar värden över tid bli till ljud. sin(x*440*2*pi) ger en ren 440 Hz-ton, noten A ovanför mitten C.Sound is pressure waves. Pressure waves can be described mathematically. Therefore, any mathematical function that produces values over time can become sound. sin(x*440*2*pi) produces a pure 440Hz tone - the note A above middle C.

Funktionsbibliotek:Function Library: Utöver grundläggande trigonometri (sin, cos, tan) stöder verktyget: fyrkantsvågor via sign(sin(x)), sågvågor via mod-funktioner, brus via random(), och godtyckliga kombinationer av dessa. Du kan modulera frekvens (FM-syntes), amplitud (AM-syntes), eller kombinera vågor på vilket sätt matematiken tillåter.Beyond basic trigonometry (sin, cos, tan), the tool supports: square waves via sign(sin(x)), sawtooth waves via mod functions, noise via random(), and arbitrary combinations thereof. You can modulate frequency (FM synthesis), amplitude (AM synthesis), or combine waves in any way mathematics allows.

AM-syntes:AM Synthesis: Amplitudmodulation multiplicerar två signaler med varandra. En bärfrekvens modulerad av en lägre frekvens skapar tremoloeffekter. Högre modulationsfrekvenser skapar nytt harmoniskt innehåll, grunden för AM-radio och vissa synthpatcher.Amplitude modulation multiplies two signals together. A carrier frequency modulated by a lower frequency creates tremolo effects. Higher modulation frequencies create new harmonic content - the basis of AM radio and certain synthesizer patches.

FM-syntes:FM Synthesis: Frekvensmodulation använder en oscillator för att styra frekvensen hos en annan. Det ger komplexa, levande klangfärger från enkla sinusvågor, grunden för Yamaha DX7 och otaliga klassiska ljud.Frequency modulation uses one oscillator to control the frequency of another. This creates complex, evolving timbres from simple sine waves - the foundation of the Yamaha DX7 and countless classic sounds.

Implementation:Implementation: Verktyget genererar ljud med 44,1 kHz samplingsfrekvens (CD-kvalitet). Varje sample beräknas genom att evaluera funktionen vid den tidpunkten. Resultatet skrivs till en WAV-fil eller spelas direkt via Web Audio API.The tool generates audio at 44.1kHz sample rate (CD quality). Each sample is calculated by evaluating the user's function at that point in time. The result is written to a WAV file or played directly through the Web Audio API.

Exempel:Examples: sin(x*440*2*pi) = ren ton. sin(x*440*2*pi)*sin(x*5*2*pi) = tremolo. sin(x*440*2*pi + sin(x*110*2*pi)*5) = FM-klockton. Möjligheterna är oändliga.sin(x*440*2*pi) = pure tone. sin(x*440*2*pi)*sin(x*5*2*pi) = tremolo. sin(x*440*2*pi + sin(x*110*2*pi)*5) = FM bell tone. The possibilities are infinite.

44.1kHz
sample rate
16-bit
depth
Python NumPy WAV Web Audio API
VerktygTools
005 - Kompa (Glass Compatibility Calculator)

När olika glas smälts samman måste de ha matchande expansionskoefficienter (COE). Om de inte gör det uppstår inre spänningar när verket svalnar, vilket leder till sprickbildning, ibland omedelbart, ibland månader senare. Kompa beräknar kompatibiliteten.When different glasses are fused together, they must have matching coefficients of expansion (COE). If they don't, internal stresses develop as the piece cools, leading to cracking - sometimes immediately, sometimes months later. Kompa calculates compatibility.

Problemet:The Problem: Glas utvidgas när det värms och drar ihop sig när det svalnar. Olika glassammansättningar utvidgas i olika takt. Om du smälter ihop två glas med olika expansionskoefficienter hamnar det som drar ihop sig mer under dragspänning, det andra under tryckkompression. Överstiger spänningen en tröskel brister glaset.Glass expands when heated and contracts when cooled. Different glass compositions expand at different rates. If you fuse two glasses with different expansion coefficients, the one that contracts more will be under tension, the other under compression. Above a threshold, the glass fails.

COE-beräkning:COE Calculation: Expansionskoefficienten mäts i delar per miljon per grad Celsius (ppm/C). Vanligt konstglas ligger runt COE 90 (Bullseye) eller COE 96 (Spectrum). En skillnad på mer än 3-5 COE-enheter är i regel problematisk.The Coefficient of Expansion is measured in parts per million per degree Celsius (ppm/C). Common art glass runs around COE 90 (Bullseye) or COE 96 (Spectrum). A difference of more than 3-5 COE points is generally problematic.

Appen-Winkelmann-formeln:Appen-Winkelmann Formula: För att beräkna COE från glassammansättning använder verktyget Appen-Winkelmann-formeln. Denna empiriska formel tilldelar expansionsfaktorer till varje oxidkomponent (SiO2, Na2O, CaO osv.) och summerar dem viktade med molfraktion.For calculating COE from glass composition, the tool uses the Appen-Winkelmann formula. This empirical formula assigns expansion factors to each oxide component (SiO2, Na2O, CaO, etc.) and sums them weighted by mole fraction.

Kompatibilitetsregler:Compatibility Rules: Glas inom 3 COE-enheter är i allmänhet kompatibla. 3-5 enheter är marginellt, kan fungera för små verk. Över 5 enheter kan man räkna med brott. Verktyget beräknar förväntad spänning och varnar därefter.Glasses within 3 COE points are generally compatible. 3-5 points is marginal - might work for small pieces. Beyond 5 points, expect failure. The tool calculates expected stress and warns accordingly.

Materialdatabas:Material Database: Över 200 material med kända expansionskoefficienter och sammansättningar. Importera recept från glazy.org, keramikdatabasen, och beräkna kompatibilitet med befintliga glas.Over 200 materials with known expansion coefficients and compositions. Import recipes from glazy.org, the ceramics database, and calculate compatibility with existing glasses.

Spänningsvisualisering:Stress Visualization: Kalkylatorn visar visuella representationer av förväntade spänningsmönster. Tryckkompression visas i blått, dragspänning i rött. Intensiteten indikerar storlek.The calculator shows visual representations of expected stress patterns. Compression appears blue, tension appears red. The intensity indicates magnitude.

200+
materials
COE
calculation
Appen
formula
JavaScript Appen Formula Glazy API
Generativa systemGenerative Systems
007 - LAJFI (Evolutionary Ecosystem)

Jag skriver matematik som blir kroppar. LAJFI är ett självevolverande ekosystem skrivet i Python där organismer lever, äter, fortplantar sig och dör. Varje organism bär 30 parametrar som DNA, härledda från matematiska formler som definierar dess fysiska form.I write mathematics that become bodies. LAJFI is a self-evolving ecosystem written in Python where organisms live, eat, reproduce, and die. Each organism carries 30 parameters as DNA, derived from mathematical formulas that define its physical form.

DNA:t:The DNA: Varje organism är byggd av tre överlappande matematiska former. De 30 parametrarna styr allt: antal symmetriaxlar, krökning, fraktalt djup, färg, storlek. När två organismer parar sig interpoleras deras DNA. Mutationer inför slumpmässiga förändringar. Naturligt urval sköter resten.Every organism is built from three overlapping mathematical shapes. The 30 parameters control everything: number of symmetry axes, curvature, fractal depth, color, size. When two organisms mate, their DNA is interpolated. Mutations introduce random changes. Natural selection does the rest.

Ekosystemet:The Ecosystem: En sluten värld med populationstak på 30 organismer och 50 växter. Växter är polygonreservoarer: när de äts upp raderas ytor och energi frigörs. Rovdjur blandar bytets DNA via interpolation. Den starkaste organismen exporteras automatiskt som .stl för 3D-utskrift.A closed world with a population cap of 30 organisms and 50 plants. Plants are polygon reservoirs: when eaten, surfaces are deleted and energy is released. Predators blend prey DNA through interpolation. The strongest organism is auto-exported as .stl for 3D printing.

Från formel till glas:From Formula to Glass: Pipelinen ser ut så här:The pipeline goes:

f(x) → .stl → PLA → gypsum-quartz mold → glass

STL-filen skrivs ut i PLA. Utskriften blir modell för en gjutform i gips-kvarts. Formen går in i ugnen. Glaset fyller det negativa utrymmet. PLA:n bränns bort. Formeln blir form. Formen blir materia.The .stl file is 3D-printed in PLA. The print becomes a model for a casting mold in gypsum-quartz. The mold goes into the kiln. Glass fills the negative space. The PLA burns out. The formula becomes form. The form becomes matter.

Live-version:Live Version: Ekosystemet körs i webbläsaren med Three.js på vetroal.se/lajf. Organismer kan exporteras som STL-filer för utskrift. Det finns också ett GUDSLÄGE.The ecosystem runs in the browser using Three.js at vetroal.se/lajf. Organisms can be exported as STL files for printing. There is also a GOD MODE.

30
DNA params
30
max pop
50
max plants
STL
export
Python Three.js Blender STL Export 3D Print Glass Casting
ForskningResearch
006 - WiFi CSI Sensing

Att använda WiFi-signaler för att detektera mänsklig närvaro och aktivitet utan kameror. När radiovågor passerar genom ett utrymme påverkas de av allt som finns där, inklusive människor. Genom att analysera dessa störningar kan man registrera rörelse, andning och till och med specifika aktiviteter.Using WiFi signals to detect human presence and activity without cameras. When radio waves pass through a space, they're affected by everything in that space - including people. By analyzing these disturbances, we can sense movement, breathing, and even specific activities.

Principen:The Principle: WiFi använder OFDM (Orthogonal Frequency Division Multiplexing), som delar upp signalen över många delbärare. Varje delbärare upplever olika multipath-effekter. Channel State Information (CSI) fångar dessa effekter och ger en rik signal som förändras när omgivningen förändras.WiFi uses OFDM (Orthogonal Frequency Division Multiplexing), which splits the signal across many subcarriers. Each subcarrier experiences different multipath effects. Channel State Information (CSI) captures these effects, providing a rich signal that changes when the environment changes.

Vad CSI innehåller:What CSI Contains: För varje paket ger CSI amplitud och fas för varje delbärare (upp till 114 i HT40-läge). Det är i princip en ögonblicksbild av hur radiomiljön ser ut vid det tillfället. Rörelse skapar karakteristiska mönster i denna data.For each packet, CSI provides amplitude and phase for every subcarrier (up to 114 with HT40 mode). This is essentially a snapshot of how the radio environment looks at that moment. Movement creates characteristic patterns in this data.

Hårdvara:Hardware: De flesta konsument-WiFi-chip exponerar inte CSI. Jag använder TP-Link-routrar med Atheros AR9344-kretsuppsättningar, körandes anpassad OpenWRT-firmware med modifierade ath9k-drivrutiner som extraherar CSI-data ur mottagna paket.Most consumer WiFi chips don't expose CSI. I'm using TP-Link routers with Atheros AR9344 chipsets, running custom OpenWRT firmware with modified ath9k drivers that extract CSI data from received packets.

Utmaningen:The Challenge: Rå CSI är brusig. Fasen är särskilt problematisk på grund av timsningsavvikelser och hårdvarubrister. Signalbehandlingspipelinen inkluderar: sanering (borttagning av fasshopp), filtrering (Butterworth lågpass), normalisering och särdragsextraktion innan data matas till maskininlärningsmodeller.Raw CSI is noisy. Phase is particularly problematic due to timing offsets and hardware imperfections. The signal processing pipeline includes: sanitization (removing phase jumps), filtering (Butterworth lowpass), normalization, and feature extraction before feeding to machine learning models.

Maskininlärning:Machine Learning: För aktivitetsklassificering har jag experimenterat med olika arkitekturer. CNN-GRU-hybrider fungerar bra: CNN:n extraherar rumsliga särdrag över delbärarna medan GRU:n fångar temporala mönster. Enkel närvarodetektering uppnår god noggrannhet; aktivitetsklassificering är svårare.For activity classification, I've experimented with various architectures. CNN-GRU hybrids work well - the CNN extracts spatial features across subcarriers, while the GRU captures temporal patterns. Simple presence detection achieves good accuracy; activity classification is harder.

Integritet:Privacy: Till skillnad från kameror kan WiFi-sensning inte identifiera individer eller fånga visuell information. Det detekterar bara närvaro och rörelsemönster. Det gör tekniken lämplig för tillämpningar där visuell övervakning vore olämplig.Unlike cameras, WiFi sensing can't identify individuals or capture visual information. It detects presence and movement patterns only. This makes it suitable for applications where visual surveillance would be inappropriate.

114
subcarriers
HT40
mode
ath9k
driver
OpenWRT
firmware
C OpenWRT ath9k Python PyTorch Signal Processing