Nödvändig bandbredd för FSK?

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
xxargs
Inlägg: 10183
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Re: Nödvändig bandbredd för FSK?

Inlägg av xxargs »

Tänk på att man alltid räknar med effekt när man använder dB.

tittar man på signaler i oscilloskop och ser spänningskvoter så är det alltid med 20*LOG10(U1/U2) och dess invers när man räknar och skall man ha i dBm så måste man också veta systemets impedanser just där man mäter.



Mixar (här menas summera) du ihop ren signal och ren vitt brus med samma RMS-effekt inom använda frekvensområde för signalen så får du 3 dB S/N


Eller om man vill och studerar i spektrumanalysator med resolution bandbredd något större större än bandbredden för överförda signal så ser man att bruspukeln höjer sig med 3 dB högre med signal än när du inte har signal när du har lika mycket brus som signal summerad

---

har du redan brus i signalen så måste du summera delarna separat och räkna om till effekt - summera tillagda bruset och sedan göra tillbaka till dB.

tex om du har 6 dB signal över brus så vet du att signaleffekten är 4 gånger mer än brusnivån och räknat i spänningssving så är det dubbla amplituden gentemot bruset räknat som RMS, och observera bara inom använda signalens bandbredd räknas - brus utanför signalens bandbredd är ointressant men kan belasta mottagaren negativt rent svingmässigt - därför skall man ha så lite 'spill' av brus utanför för signalens använda bandbredd som möjligt med hjälp av bandpassfiltrering innan mottagaren

kika också på Friis formel och hur man räknar på brusfaktorer
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

Jo, jag vet det, 10*log(p1/p2) eller 20*log(u1/u2)
Mixar (här menas summera) du ihop ren signal och ren vitt brus med samma RMS-effekt inom använda frekvensområde för signalen så får du 3 dB S/N
OK. Men om jag adderar två signaler (matriser) i Octave så är det väl spänningarna jag adderar? Är inte matrisen en representation av vågformen?
guckrum
Inlägg: 1669
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Nödvändig bandbredd för FSK?

Inlägg av guckrum »

Hade du bytt till randn() i koden? (rand() är rektangelfördelad och funkar inte alls här.)

När jag är osäker på energierna brukar jag "mäta" för att bli säker på att det blir rätt.
Till exempel, antag att vi skapar en signal som är 10000 sampel lång bestående av vitt gaussiskt brus:

Kod: Markera allt

>> n = randn(1,10000);
Detta är alltså en radvektor (matris med "höjden" 1 och "längden" 10000).

För att mäta energin i signalen så skall man ta varje amplitud för sig och kvadrera. (Energi = amplitud i kvadrat). Sedan adderar man alla kvadrater för att få totala energin. Funderar man på det en stund inser man att det är samma som skalärprodukten av signalen med sig själv, och i octave kan man skriva

Kod: Markera allt

>> n * n'
ans =  9962.0
Så energin är ca 10000, dvs ungefär 1.0 per sampel.

Vi provar att dubbla amplituden:

Kod: Markera allt

>> n = 2*randn(1,10000);
>> n*n'
ans =    4.0973e+04
(Observera att vi fick nya slumptal nu.)
Alltså fyra gånger så mycket energi, och per _sampel_ är det

Kod: Markera allt

>> 10*log10(n*n'/length(n))
ans =  6.1250
dB.

Ofta i digital kommunikation mäter man Eb/N, dvs energi per bit delat på motsvarande brusenergi. Då kan man jämföra med teoretiska resultat eller andra uppmätta kurvor.

EDIT: efterklokhetsförtydligande
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

Hade du bytt till randn() i koden? (rand() är rektangelfördelad och funkar inte alls här.)
ja:

Kod: Markera allt

white=randn(1,nsamples)*2-1;
audiowrite('audio_andax_1241_noise_03_60s.wav', (fsk_signal+white*0.3), sps, 'BitsPerSample', bps);

Kod: Markera allt

d>> fsk_signal * fsk_signal'
ans =   2.4000e+005
>> (white*0.5) * (white*0.5)'
ans =   6.0225e+005
>>
så i detta fall 2,4 / 6,0225 = 0,39, eller -4dB?

Edit:

Ser nu att jag har:

Kod: Markera allt

white=randn(1,nsamples)*2-1;
Så det brus jag adderar har redan dubbla amplituden. Hur har det blivit så?
Senast redigerad av AndersG 15 september 2017, 09:04:47, redigerad totalt 1 gång.
guckrum
Inlägg: 1669
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Nödvändig bandbredd för FSK?

Inlägg av guckrum »

Kod: Markera allt

white=randn(1,nsamples)*2-1;
randn() skall ha medelvärde 0, så du behöver inte multiplicera med två och subtrahera ett. Subtraktionen i detta fallet blir en DC-offset.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

Så då ändrar jag till: white=randn(1,nsamples); ??

Kod: Markera allt

>> fsk_signal * fsk_signal'
ans =   2.4000e+005
>> (white*0.5) * (white*0.5)'
ans =   1.1994e+005
10*log(2,4/1,2) = 3dB

Är eg bara ute efter att få något att jämföra med? Vad är rimligt? Hur mycket brus skall det få vara för att man skall kunna dekoda?

Edit:
Sedan är ju inte bruset vitt i verkliga livet, men det är bra att ha en repeterbar signal att testa med.

Edit2:
Fick nyss: Bild
guckrum
Inlägg: 1669
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Nödvändig bandbredd för FSK?

Inlägg av guckrum »

Så då ändrar jag till: white=randn(1,nsamples); ??
Jupp.
Är eg bara ute efter att få något att jämföra med? Vad är rimligt? Hur mycket brus skall det få vara för att man skall kunna dekoda?
På sida 2 i denna tråd har xxargs postat en BER (Bit Error Rate) / Eb/N0-kurva. Jag har inte kollat om den är korrekt (lite ringrostig här), men antagligen. Och så är den för koherent BFSK, men jag tror inte det spelar så stor roll för så låg SNR som 3dB.
Läser jag kurvan rätt har du cirka BER=0.08, dvs en felsannolikhet per bit på 8%.
Jag tror att man kan trycka ner det en del om man gör en bra avkodning av FEC-en.
Sedan är ju inte bruset vitt i verkliga livet, men det är bra att ha en repeterbar signal att testa med.
Ja, man kan liksom "kalibrera" med vitt brus.

En sak man borde testa är att korrelera din signal mot sig själv (autokorrelera) för att se huruvida man kan estimera kanalen, dvs om det är någon fädning/multipath att prata om, eller om kanalen är "platt".
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

OK. Denna kurva:
Bild

Jag kan ju ha den som referens. får nog läsa på litet om Eb/N0:

https://en.wikipedia.org/wiki/Eb/N0
http://www.sss-mag.com/ebn0.html

Shannon–Hartley theorem:

R < B log2(1+S/N) (Bas2 logaritmen)

R information rate in bits per second;
B channel bandwidth in Hertz;
S total signal power (equivalent to the carrier power C)
N total noise power in the bandwidth.

I detta fall:
R = 100, eller är det hälften?
B = Mottagarens bandbredd?
S, N det effektvärde jag får i Octave?

Bitrate och symbol rate är väl samma sak i FSK?

Eller: C/N = Eb/No * (R/B), where

R = bit rate B = channel bandwidth

=> Eb/No = (C/N)/ (R/B) ?
2.2.3 C/N required for NAVTEX broadcasts
The transmit range for NAVTEX broadcasts should be calculated assuming an RF C/N density figure of 35 dB(Hz) at the ship's antenna. This will ensure that the NAVTEX receiver is provided with an RF S/N of 8 dB in a 500 Hz bandwidth, as stipulated by the IMO.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

PRINT_07.png
Hög, låg och skillnad i kvadrerad signal nederst
PRINT_08.png
Kvadrerad hög, kvadrerad låg
PRINT_09.png
Hög kvadrerad hög
PRINT_10.png
Hög kvadrerad hög (detalj)

Alla är med en testfil, samma testfil med lika mycket signal som vitt, gaussiskt brus.

Det känns som detta är ungefär gränsen för acceptabel dekodning, men exempelvis SeaTTY verkar klara klara ännu sämre signaler.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
xxargs
Inlägg: 10183
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Re: Nödvändig bandbredd för FSK?

Inlägg av xxargs »

Gillar verkligen att du kämpar vidare även om jag själv inte 'på språng' ännu och kan kommentera de tidigare frågeställningarna då det kräver en viss tankemöda och dubbelkontroller för att det skall bli troligt 'korrekt' där, känner jag, i alla fall inte ikväll...

När du säger 'lika mycket brus som signal'

Över vilken bandbredd är det räknat, för det ser lite för bra ut för att endast vara 3 dB S/N IMHO

hur ser det ut när du gör FFT på signalen i ljudprogrammet, hur många dB sticker bärvågorna upp över brusgolvet?? - prova med en lång konstant ton i din modulering så att det är mycket större än använda FFT-fönstret när du gör den mätningen

Det enda som räknas är den brus-bandbredden som mottagaren 'ser' av bruset och i den liggande signalen (blir väl typ 220 + 220 Hz om man går på bandbreddsbehovet för FSK och ideala filter) - allt utanför denna existerar inte sas. (mer än att det kan belasta mottagaren på annat sätt)

I ditt fall gissar jag att det handlar bandbredden som dina två bandpassfilter tillsammans ger eftersom det är bara dom två frekvensfönstren som brusenergin kan ta sig vidare genom systemet och mätas - tillsammans med din överlagrade nyttiga signal

Med andra ord om efter mottagarens filtrering brussignalen ger enegivärdet '1' efter en symboltid så bör brus plus lika mycket signalenergi i bruset ge värdet '2' tillsammans (medans den andra grenen/frekvens som enbart ser brus ger värdet '1') om signalenergin är lika stor som brusenergin

om man gör spektrumanalys med viss mättid och bandbredd så får man en bruspuckel som är 3 dB högre (= dubbla effekten) än brus utan överlagrad signal om brusnivån i aktuella filterbandbredden och signalnivån är lika i energin

---

Det andra jag funderar över är dina korta tick och hack på D8 tex i de långa symbolen nästa längst till höger på bild "print_07.png" - den långa symbolen 'borde' inte ha snabba hack nära mitt på D8 med tanke på hur det ser ut på D12 och D13. - nu vet jag inte hur du i detalj mäter energin och över vilken tidsrymd på D12 och D13 samt hur kompareringen görs - men det 'borde' inte bli spikar och omslag på D8 under denna relativt långa 'konstanta' ton där tonen ligger inom filtret för D13 men utanför filtret för D12.

Förstår du hur jag tänker, för det känns som att något i kedjan gör väldigt snabba beslut på sampelnivå eller envelopp-nivå av inkommande signal och inte på de integrerade värdena av samlad energi inom symbolen...
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

När du säger 'lika mycket brus som signal'
Då menar jag helt enkelt att jag adderar nyttosgnal med brussignal i förhållandet 1:1 i Octave:

Kod: Markera allt

white=randn(1,nsamples); %*2-1;
audiowrite('audio_andax_1241_noise_1_600s_a.wav', (fsk_signal+white*1), sps, 'BitsPerSample', bps);
Jag har således inte beaktat mottagarens bandbredd alls
hur ser det ut när du gör FFT på signalen i ljudprogrammet, hur många dB sticker bärvågorna upp över brusgolvet??
Detta är dock inte med en konstant ton, utan med modulering:
Spektrum_2017-09-17_09-54-37.jpg
37dB-29dB = 8dB
Det andra jag funderar över är dina korta tick och hack på D8 tex i de långa symbolen nästa längst till höger på bild "print_07.png"
Logiken är följande: Signalerna som passerar genom filtren multipliceras med sig själv sedan adderas dessa till ett medelvärde enligt formeln: medeltal = gammalt medeltal * 0,8 + nytt värde * 0,2. Det blir ju min integrering.

Om du studerar det gulmarkerade området:
PRINT_08a.png
Så stiger/faller signalerna relativt långsamt. Filtren har ju sin tröghet. Under tiden det byter kommer vi ju att ha ett osäkerhetsområde då (hög>låg) fladdrar. Jag testade koda hysteres här, men det blev inte bra det heller.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

Förstår du hur jag tänker, för det känns som att något i kedjan gör väldigt snabba beslut på sampelnivå eller envelopp-nivå av inkommande signal och inte på de integrerade värdena av samlad energi inom symbolen...
Ja:
PRINT_11.png
Signalen och enveloppen
PRINT_12.png
Detalj. Strunta i "spikarna" det är störningar.

Jag samplar ju i 8kHz. Program som JNX, SeaTTY etc arbetar ju med ljudfiler samplade i 44kHz, en avsevärd skillnad. Om jag hade en högre samplingsfrekvens vore det ju lättare att filtrera bort "luddet" och således få mera distinkta omslag.

Så länge jag klarar av att hålla synk har luddet ingen betydelse, men däremot använder jag nollgenomgångarna för att synkronisera min "PLL". I koden jag hittade på internet använder de en "korrelator" som jag inte riktigt begriper hur den fungerar:

Kod: Markera allt

	// The signal is sampled at three points: early, prompt, and late.
	// The prompt event is where the signal is decoded, while early and
	// late are only used to adjust the time of the sampling to match
	// the incoming signal.
	//
	// The early event happens 1/6 bit period before the prompt event,
	// and the late event 1/6 bit period later. If the incoming signal
	// peaks early, it means the decoder is late. That is, if the early
	// signal is "too large", decoding should to happen earlier.
	//
	// Attempt to center the signal so the accumulator is at its
	// maximum deviation at the prompt event. If the bit is decoded
	// too early or too late, the code is more sensitive to noise,
	// and less likely to decode the signal correctly.
	void process_multicorrelator() {
		// Adjust the sampling period once every 8 bit periods.
		if (m_sample_count % (int)(m_bit_sample_count * 8))
			return;

		// Calculate the slope between early and late signals
		// to align the logic sampling with the received signal
		double slope = m_average_late_signal - m_average_early_signal;

		if (m_average_prompt_signal < m_average_early_signal &&
		    m_average_prompt_signal < m_average_late_signal)
			// At a signal minimum. Get out quickly.
			slope *= 2;
		else if (m_average_prompt_signal > m_average_late_signal &&
			 m_average_prompt_signal > m_average_late_signal)
			// Limit the adjustment, to ride out noise
			slope /= 8;
		else
			slope /= 4;

		if (slope) {
			m_next_early_event += slope;
			m_next_prompt_event += slope;
			m_next_late_event += slope;
		}
	}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
guckrum
Inlägg: 1669
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Nödvändig bandbredd för FSK?

Inlägg av guckrum »

Logiken är följande: Signalerna som passerar genom filtren multipliceras med sig själv sedan adderas dessa till ett medelvärde enligt formeln: medeltal = gammalt medeltal * 0,8 + nytt värde * 0,2. Det blir ju min integrering.
Egentligen gör de matchande filterna redan all integrering som behövs, så det är tveksamt att en ytterligare integrering gör något bättre, den kommer snarare att blanda ihop konsekutiva symboler med varandra en aning.

För avkodning vill du sampla utgångarna på de matchade filterna exakt en gång per symbol, och det precis när en hel symbol är "inne i filterna". Problemet här är tidssynkronisering: när infaller denna "optimala" tidpunkt? Det verkar klokt att ha en form av PLL som går i symboltakt, precis som du gjort. Det gäller då att hitta en insignal till den som man kan bygga en robust reglerloop runt. Olika sätt att skapa denna insignal ger olika bra resultat speciellt för mycket brusiga insignaler.

Jag tror mycket på differensen mellan de två kvadrerade filtersignalerna, |s0|^2 - |s1|^2. Denna signal ändrar tecken dramatiskt vid varje symbolskift, annars är den konstant.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

Jag tror mycket på differensen mellan de två kvadrerade filtersignalerna, |s0|^2 - |s1|^2. Denna signal ändrar tecken dramatiskt vid varje symbolskift, annars är den konstant.
Det är ju vad jag gör nu. Jag samplar denna mitt i en symbol, men för att hitta denna mitt så kollar jag nollgenomgångarna. Om denna uppträder för snabbt efter en symbolmitt, justerar jag samplingspunkten framåt om den sker för snabbt justerar jag bakåt.

Tror förresten att jag har en obesvarad fråga litet tidigare upp:
Bitrate och symbol rate är väl samma sak i FSK?

Eller: C/N = Eb/No * (R/B), where

R = bit rate B = channel bandwidth

=> Eb/No = (C/N)/ (R/B) ?
Dvs om jag adderar signal och brus 1:1 i Octave. Då är bitrate 100Hz, men vad är bandbredden? Inte helt vitalt för detta, men jag försöker förstå.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8412
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nödvändig bandbredd för FSK?

Inlägg av AndersG »

Skriv svar