Enhet 3 / 12

Signalbehandling: Filter, sampling och frekvensanalys

Vinster:

  • Förmåga att korrekt konstruera och tillämpa sampling, Nyquist och aliasingkoncept med AI-stöd
  • Möjlighet att översätta FFT, filterdesign och fönstersteg till utkastkod och beräkningar med AI
  • Möjlighet att verifiera signalbehandlingsresultat producerade av AI med referenssignal, enhetskontroll och mätning

Signalbehandling är hjärtat av elektronik- och kommunikationsteknik: konsten att ta en spänningsvåg, en ljudinspelning, en sensoravläsning eller en radiosignal och extrahera informationen i den, rensa upp dess brus och omvandla den. I den här enheten kommer du att se hur du använder AI för att lära dig signalbehandlingskoncept, konstruera filter- och transformationsberäkningar och utföra analys med Python-kod. Men en varning från första början: ett litet konceptuellt fel i signalbehandlingen (fel samplingsfrekvens, överhoppad fönsterning, störande enhet) kommer att förvränga resultatet helt och tyst; Grafen ser fortfarande bra ut, men den är fel. Det är därför det är absolut nödvändigt att testa varje resultat som AI producerar mot en känd referenssignal och enhetskontroll.

Sampling och Nyquist: där börjar allt

För att bearbeta en analog signal (kontinuerlig våg) i en dator mäter vi den med vissa intervall och omvandlar den till ett tal; Detta kallas provtagning. Det är samplingsfrekvensen (fs, enhet Hz) hur många sampel vi tar per sekund. Nyquist-kriteriet säger att för att korrekt återställa en signal måste samplingsfrekvensen vara minst två gånger den högsta frekvensen i signalen. Om detta villkor inte är uppfyllt börjar höga frekvenser se ut som låga frekvenser; Detta kallas aliasing och data är permanent skadad eftersom du inte kan skilja mellan dessa två situationer.

AI förklarar detta koncept mycket väl och kan visa det med exempel. Men du bestämmer när du väljer din samplingsfrekvens: vad är den faktiska bandbredden på din signal, har du ett analogt anti-aliasingfilter, vilken hastighet fungerar din ADC (Analog-Digital Converter: chippet som omvandlar den analoga signalen till nummer) faktiskt. AI kan "föreslå" en samplingsfrekvens, men det här förslaget är en gissning utan att mäta det faktiska spektrumet för din signal.

Tips: När du ställer AI-en en samplingsfråga, ange den högsta frekvensen och bandbredden för din signal själv. "Om den högsta komponenten i min signal är ~4 kHz, hur ska jag välja fs och var ska jag placera kantutjämningsfiltret?" som. Få inte AI:n att gissa spektrumet; mäta.

FFT och frekvensanalys

FFT (Fast Fourier Transform) är en snabb algoritm som omvandlar en signal från tidsaxeln till frekvensaxeln. Så "vilka frekvenser finns i denna signal och med hur mycket effekt?" svarar på frågan. AI gör mycket bra hur man implementerar FFT, tolkar resultat och skriver Python-kod (numpy/scipy). Men det finns vanliga fel i FFT, och AI-kod kan tyst inkludera dem:

  • Frekvensaxelskalning: Frekvensaxeln för FFT-utgången beror på samplingsfrekvensen. Om fs skrivs in felaktigt matas alla frekvenser ut felaktigt, men grafen ser normal ut.
  • Fönster: När en ändlig signalbit tas emot uppstår diskontinuitet vid kanterna och pseudospridning (spektralt läckage) observeras i spektrumet. Fönster som Hann och Hamming minskar detta. Om AI-koden hoppar över fönster kommer resultatet att bli missvisande.
  • Amplitudnormalisering: Skalning och fönsterkorrigering krävs för att konvertera amplituden för FFT-utgången till det faktiska fysiska värdet. Om det utelämnas kommer amplituderna att vara felaktiga.

filterdesign

Ett filter är en krets eller algoritm som extraherar oönskade frekvenser från en signal. Det finns fyra grundläggande typer: lågpass (passerar låga frekvenser), högpass, bandpass och bandpass (notch). Det finns två stora familjer av digitala filter: FIR (finit impulsrespons, stabil och linjär fas) och IIR (oändlig impulsrespons, brant övergång med mindre beräkning men stabilitet och fasrisk).

AI förklarar designstegen för ett filter (gränsfrekvens, passband, stoppbandsdämpning, ordningsval) och skriver koefficientgenererande kod med scipy. Men gränsfrekvensen för filtret du designar ges normaliserad (i förhållande till Nyquist-frekvensen), och att ange fs felaktigt här är ett mycket vanligt misstag. Dessutom kan stabilitet och fasförvrängning vara ett problem i IIR-filter, och latens kan vara ett problem i realtidssystem. Se till att verifiera det AI-genererade filtret med en frekvenssvarsgraf och en känd testsignal.

tre minifodral

Fall 1 — Överlappande vibration. En ingenjör samplar vibrationen från en motor vid 1 kHz och ser en stark topp i FFT vid 300 Hz. Denna topp, som inte matchar motorns design, är förvirrande. Det finns faktiskt en riktig komponent i motorn runt 1300 Hz; 1 kHz sampling är otillräckligt för detta (Nyquist 500 Hz) och 1300 Hz överlappade 300 Hz. Efter att ha diskuterat med AI:en "om denna topp är verklig eller aliasing" och ökat samplingsfrekvensen till 5 kHz, visas toppen på rätt plats vid 1300 Hz. Lektion: på en tveksam kulle, första frågans provtagningsförmåga.

Fall 2 — Överhoppat fönster. En praktikant begär en FFT-kod från AI och kör den. Han förväntar sig en enda frekvenstestton men ser en stor spridning över hela spektrumet. Problemet är att koden inte gör windowing (spektralläckage). Säg till AI:en "lägg till Hann-fönster och tillämpa amplitudkorrigering" och utsignalen återgår till den förväntade skarpa toppen. Lektion: Testa FFT-koden med en känd enkelfrekvenssignal; Kontrollera fönstret om det finns en läcka.

Fall 3 — Fel fs. En ingenjör analyserar data från brännaren. Enheten spelade in vid 48 kHz, men standardvärdet 44,1 kHz angavs i AI-koden. Alla frekvenser förskjuts med 8 %; En 1000 Hz-ton visas vid 1088 Hz. Ett fel upptäcks vid kontroll av mätutrustningens faktiska fs. Lektion: provtagningsfrekvensen är det enskilt mest kritiska talet i analyskedjan; måste verifieras från källan.

Kopierbara promptmallar

FFT-INSTÄLLNINGSMALL"Skriv en FFT-analyskod i Python (numpy/scipy). Indata: samplingsfrekvens fs=[värde] Hz, signalsträng 'x'. Låt koden göra FÖLJANDE: (1) Applicera Hann-fönster, (2) Få FFT, (3) skala exakt frekvens frekvens-axel-sida, flit axel-sida i förhållande till flits spectrum-axel (4) korrigering Vid varje steg i koden "Ange i kommentarsraden vilket antagande du gör så att jag kan verifiera det."

SAMPLINGSKONTROLLMALL "Den högsta signifikanta frekvensen för min signal är ungefär [X] Hz. Förklara Nyquist-marginalen, behovet av ett anti-aliasing-filter och den praktiska säkerhetsmarginalen vid val av samplingsfrekvens. Föreslå ett intervall men betona att jag bör verifiera detta genom att mäta det sanna spektrumet för signalen."

FILTERDESIGNMALL "Designa ett [lågt/högt/band] pass digitalt filter med scipy. Gränsfrekvens [X] Hz, samplingsfrekvens fs=[Y] Hz. Jämför FIR- och IIR-alternativ (stabilitet, fas, fördröjning, beräkningsbelastning). Visa tydligt i koden hur gränsfrekvensen är normaliserad till en f-frekvens. Inkludera även responsen till en f-frekvens. graf."

RESULTATVALIDERINGSMALL "Undersök signalbehandlingskoden nedan och flagga källor för tysta fel: fel fs, överhoppad fönster, enhetsöverhörning (Hz/kHz,V/mV), brist på normalisering, enkel-/dubbelsidig spektrumöverhörning. Föreslå hur jag ska testa (med vilken referenssignal) för varje. Kod: [klistra in]."

Svag prompt / Stark prompt

SVAG PROMPT: "Hitta frekvensen för denna signal."

STARK PROMPT: "Jag har en signalmatris med en samplingsfrekvens på 10 kHz. Skriv en Python-kod som hittar de dominerande frekvenskomponenterna med FFT; använd Hann-fönster- och amplitudkorrigering, skala frekvensaxeln enligt fs. I slutet av koden lägger du till ett valideringsblock med en syntetisk testsignal för fscal och se om den är korrekt fscal."

Svag prompt ger ett sammanhangsfritt svar och antar fs; Den returnerar starka promptparametrar och uppmanar till ett självverifierande testblock.

Tabell över enheter och antaganden vid signalbehandling

koncept

frekventa fel

verifiering

Samplingsfrekvens (fs)

Standard istället för enhetens faktiska FS

Bekräftelse från inspelarens inställning

frekvensaxel

Om fs är fel skiftar hela axeln

Känd frekvenstestton

Fönster

Spektralt läckage vid överhoppning

Toppbredd i monoton signal

Amplitud

Normalisering/korrigering saknas

Jämförelse med känd amplitudsignal

filter skär

normalisera fel enligt fs

Frekvenssvarsgraf

Varning: Bara för att en FFT-graf ser smidig och trovärdig ut betyder det inte att den är korrekt. Om frekvensaxeln är felaktigt skalad är alla toppar på fel ställe men grafen ser perfekt ut. Kalibrera alltid med en känd referens.

Vanliga misstag

  • Verifierar inte samplingsfrekvensen från källan. Fel fs skiftar alla frekvenser.
  • Att bryta mot Nyquist och inte märka aliasing. På misstänkta kullar, ifrågasätt först om provtagningen är tillräcklig.
  • Hoppa över fönster i FFT. Spektralläckage ser ut som en riktig topp.
  • Glömde amplitudnormalisering. Amplituder förblir oskalade till fysiskt värde.
  • Felaktig normalisering av filtrets gränsfrekvens till fs. Filtret skär på en annan plats än förväntat.

Sammanfattningsvis

I den här enheten har du placerat AI som ett kraftfullt hjälpmedel för att lära dig signalbehandlingskoncept, skriva FFT och filterkod och konstruera analys. Men vid signalbehandling kan resultaten förvrängas tyst: fel samplingsfrekvens, överhoppad fönstervisning, störande volym eller avsaknad av normalisering gör grafen vacker men inexakt. Så testa varje kod som AI producerar mot en känd referenssignal, verifiera samplingsfrekvensen från källan och testa varje resultat för enhet och fysisk rimlighet. Kontrollera konceptet med Nyquist och aliasing i början av varje analys.

Applikationsuppgift

Skapa en syntetisk testsignal i Python: summan av två kända frekvenser (t.ex. 1 kHz och 3 kHz), fs=10 kHz. Begär analyskoden från AI med mallen "FFT setup" och verifiera att topparna visas vid rätt frekvenser. Ange sedan medvetet fs felaktigt (t.ex. 8 kHz) och observera hur topparna skiftar. Ta slutligen bort fönstret och se det spektrala läckaget. Skriv ner resultaten av varje experiment i en mening.

checklista

  • [ ] Jag verifierade samplingsfrekvensen (fs) från brännarens faktiska inställning.
  • [ ] Jag kontrollerade Nyquist-kriteriet och utvärderade risken för aliasing.
  • [ ] Jag har kontrollerat att fönster- och amplitudkorrigering är implementerade i FFT-koden.
  • [ ] Jag testade koden med en referenssignal med känd frekvens.
  • [ ] Jag verifierade genom visuell respons att filtrets cutoff-frekvens var korrekt normaliserad till fs.
  • [ ] Jag gjorde alla enheter (Hz/kHz, V/mV) konsekventa.