Generator för rosa brus - miniprojekt

Berätta om dina pågående projekt.
andr3as
Inlägg: 29
Blev medlem: 30 januari 2006, 13:55:44
Ort: Linköping

Generator för rosa brus - miniprojekt

Inlägg av andr3as »

Hej allihopa, det här mitt första inlägg här. Jag registrerade mej för (väldigt) länge sen men det har liksom inte blivit av att skriva någonting - förrän nu! Nu har jag ett litet projekt på gång och hoppas det är ok att jag dokumenterar det här?

Som det står i rubriken så ska det alltså bli en en brusgenerator för rosa/skärt brus. Jag ska använda den till att maskera tinnitus-ljud på natten. En dator drar för mycket el och en mp3-spelare kostar för mycket och äter batterier. Elfa och Electrokit har visserligen en Velleman-byggsats, men den är också ganska dyr och det är ju ändå roligare att konstruera nåt eget.

Jag har inte kommit så långt ännu, men kretsen ska i alla fall bli så liten som möjligt med hjälp av en 8-pinnars mikrocontroller (AVR eller PIC) som eventuellt också använder en PWM-utgång som DAC.

Här är min kvällsläsning - all teori som behövs, hoppas jag:

http://en.wikipedia.org/wiki/Linear_fee ... t_register
http://www.firstpr.com.au/dsp/pink-noise/
http://home.earthlink.net/~ltrammell/tech/pinkalg.htm
http://home.earthlink.net/~ltrammell/tech/newpink.htm

/Andreas
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Välkommen till tinnitusklubben. :)

Lägger till några brus-trådar:
http://elektronikforumet.com/forum/view ... p?p=205255
http://elektronikforumet.com/forum/view ... p?p=164221

Det ska bli intressant att följa den här tråden och se om det maskerar tinnitus-ljuden tillräckligt.
För egen del så har jag lärt mig att leva med det, men visst är det trist att det aldrig är tyst.
andr3as
Inlägg: 29
Blev medlem: 30 januari 2006, 13:55:44
Ort: Linköping

Inlägg av andr3as »

Tack för länkarna, och för medlemskapet eller eh, öh... jag hade ju hellre varit stödmedlem än fullvärdig om man säger så. :) Min tinnitus är ganska måttlig som tur är, det vanligaste ljudet låter som en CRT-TV piper ungefär och det är ganska lätt att maskera eller t.o.m glömma bort ibland. Fast tyst blir det ju aldrig, nä... och det var inte roligt i början.

Hur låter det för dej? Är det så att du hör det jämt, t.ex ute i trafiken eller så?

Ok, vidare med projektet:

Det hann inte bli så mycket läsande ikväll, jag började med att testa den här generatorn för vitt brus istället. Den finns i en Wikipedia-artikel av alla ställen.

Om man antar att den har en cykel på 2^32 bitar tar det ca en och en halv timme vid 48 kHz samplingsfrekvens och 16-bitars samples innan den börjar upprepa sig och det borde räcka!

Kod: Markera allt


unsigned int lfsr = 1;
while(1) {
    lfsr = (lfsr >> 1) ^ (-(signed int)(lfsr & 1) & 0xd0000001u);
}

Jag genererade 100 sekunder (16-bit, 44.1kHz) i ett litet program, sparade till en fil och stoppade in ljudfilen i en spektrumanalysator och kan konstatera att det fungerar hyfsat.

Markerar man 10 sekunder av ljudet så ritar analysatorn en brusig men vågrät linje runt -50dB över hela spektrumet, med de flesta variationerna inom +/-0.5 dB. Det finns några större utliggare, säg max +/-1 dB avvikelse. Markerar man 100 sekunder så blir variationen kanske hälften så stor. Sen får jag lite olika resultat beroende hur analysatorn är inställd.

Det blir t.ex. skumma kurvor om frekvensaxeln är logaritmisk - då blir inte linjen lika rät längre och variationerna blir större vid låga frekvenser. Fast har man inga särskilda krav så får det duga med hur det ser ut med en linjär axel. Och säger teoretikerna att en sån här generator skapar helt vitt brus så får man väl tro dem! ;-)
Användarvisningsbild
Limen
EF Sponsor
Inlägg: 1195
Blev medlem: 23 november 2006, 18:34:28
Ort: En bit utanför Karlstad

Inlägg av Limen »

Jag passar väl också på att hälsa dig välkommen till tinnitus-klubben :)
Användarvisningsbild
Pehr
Inlägg: 341
Blev medlem: 11 januari 2006, 18:53:16
Ort: Norrköping

Inlägg av Pehr »

hej och hå jag är också med, fast jag är ganska bra på att "glömma bort" mitt... för det mesta är det högfrekventa pip, men ibland kan jag få ett väldigt lågfrekvent dån... :evil:
Användarvisningsbild
dar303
Inlägg: 5979
Blev medlem: 17 december 2003, 19:54:56
Ort: Sthlm

Inlägg av dar303 »

Jag är också medlem efter ett inte så lyckat besök på en technoklubb på gran canaria för snart 10 år sedan...
Märker det inte oftast men vid stress/förkylning eller fylleri så dyker det upp igen.
Lycka till med projektet!
Spinxen
Inlägg: 536
Blev medlem: 25 augusti 2005, 14:21:49
Ort: Sveriges framsida
Kontakt:

Inlägg av Spinxen »

Ja, tyvärr är det väl så, att är man musiker, producent eller är mycket musikintresserad, så har man det mer eller mindre (även jag).

En sak som jag märkt, efter min tinnitus började, är att har jag blivit mycket känsligare för dåliga ljudsystem. Klarar väldigt hög volym, så länge det är rent ljud.
Nilsson
Inlägg: 60
Blev medlem: 12 januari 2007, 21:20:26
Ort: Göteborg

Inlägg av Nilsson »

Medlemm i tinnitus-klubben jag med...
har spelat trummor i snart 10 år, och jag hade inte hörselskydd från början, tyvärr

håller med JimmyAndersson..
Man lär sig leva med det, men att det aldrig kan vara helt och hållet tyst är lite småtrist..
xxargs
Inlägg: 10185
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Inlägg av xxargs »

välkommen i klubben du också... för min del... efter 13 dygn där man blev väckt i panikångest med adrenalinet rinnande ur örona av stora brandlarmsklockor av klassisk typ så fort man somnade - gång på gång natten igenom, natt efter natt, så började jag förstå varför varför folk funderar på att ta livet av sig - den 14:e natten så begrep hjärnan äntligen att ringandet i örona (efter en olycksalig discobesök) inte betydde att huset höll på att brinna ned och man skulle fly för livet, och var nog en av mitt livs skönaste nattsömn - nu efter hand har hjärnan lyckats filtrera bort det mesta från medvetande, men som andra redan nämt, fylla, mediciner, feber och förkylning så slutar hjärnfiltret att fungera delvis och det hela blir ganska påtagligt...

tinnitus går inte att droga eller supa bort utan blir bara värre - möjligen kan man påverka med droger om man bryr sig eller inte...


Efter en sådan pärs så är man väldigt noga med att ha med sig hörselproppar när man skall ut på partaj, och stoppa in dessa i örona vid minsta lilla hörseltrötthet eller att man blir medveten att man har utsats för lite höga ljudnivåer en längre tid. Man har liksom redan förbrukat sin sista chans och en stor hörselskada till så kommer den att hålla sällskap med sinnet för resten av livet...

När skadan var ny så tålde jag heller inte CRT-monitorer - dom hördes i nästan plågsam nivå på 30 meters håll och det pep högt var man än gick i tex. tågstationer och perrongområden - man kan fråga sig varför man får sådan superhörsel just vid hörseskada när man normalt (innan) knappt hörde dessa alls ens när man var intill dessa...
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

andr3as:
"Hur låter det för dej? Är det så att du hör det jämt, t.ex ute i trafiken eller så?"

När jag är ute på stan och liknande så tänker jag inte på det alls. Men annars hör jag det alltid. Jag har lärt mig att acceptera att det finns där och det har gjort att tinnitus-volymen har minskat. Men när jag koncentrerar mig på det så ökar det väldigt mycket och blir riktigt jobbigt.


Samma dag som jag fick tinnitus så hade jag mixat några låtar på väldigt hög volym i lurarna. Efter flera timmars jobbande så tyckte jag att lurarna var diskantfattiga, så jag kopplade in en apparat som lägger till mer diskant (exciter). Efter flera timmar tog jag en paus och gick ut på balkongen. Jag bodde då precis vid en skog och det brukade vara tyst, men då hörde jag ett högfrekvent pipande. Jag fick en konstig känsla i magen och förstod direkt att jag hade fått tinnitus och att det inte skulle försvinna, som det annars gjort om jag någon gång slarvat med öronproppar efter ett discobesök. När jag vaknade dagen efter så var ljudet fortfarande kvar, så det var bara att acceptera det som en del av mig.

6-7 år senare så hade jag jobbat för mycket under flera år, så jag blev utbränd. Då ökade tinnitus'en. Läste att om man kan påverka tinnitus'en genom att spänna käk/nack-musklerna så beror den på muskelspänningar och nerver som hamnar för nära hörselnerverna. Detta går ofta att mildra eller bota med t.ex akupunktur mm. Men jag har inte provat det.

Så jag har alltså både musik-relaterad och muskel-relaterad tinnitus.
Det kan ställa till lite problem när jag mixar låtar eftersom tinnitus'en maskerar frekvenserna över ca 10kHz. Så jag får helt enkelt lita på spektrumanalysatorn. :) Lyckligtvis hade jag jobbat med detta så länge innan jag fick tinnitus att jag har lärt mig hur det ska låta även om jag inte hör ända upp till 22kHz. Lite som att någon som blivit blind i vuxen ålder ändå kan skriva sitt namn med vanligt papper och penna.


Ibland kan någon säga "usch, vad den där CRT-monitorn låter". Jag hör det inte alls... Eller rättare sagt, jag hör ett likadant pip dygnet runt.

Det enda som är jobbigt för öronen är om jag hör något (musik/tal/ljud) som är på tok för komprimerat. Särskillt om det är på väldigt låg volym. Så vissa radiokanaler är inte alls roliga att lyssna på i bakgrunden. Det gör nästan ont.
Nilsson
Inlägg: 60
Blev medlem: 12 januari 2007, 21:20:26
Ort: Göteborg

Inlägg av Nilsson »

OKej, det tråkiga är att jag är bara 17 år gammal... Har altså haft det sen jag var 8-9 år :cry: och jag hör det ganska starkt också... jag tycker att *surr* och sånt förstärker det, typ datorfläktar och sånt, men detdär med CRT-skärmar har jag aldrig märkt av. men det är väl som JimmyAndersson säger, "jag hör ett likadant pip dygnet runt"
andr3as
Inlägg: 29
Blev medlem: 30 januari 2006, 13:55:44
Ort: Linköping

Inlägg av andr3as »

Det verkar som om det finns fler "medlemmar" än vad man tror. Fast det kan ändå vara svårt att förstå hur jobbigt det kan vara i början för de som inte har tinnitus.

Den första läkaren (visserligen en läkarstudent) jag träffade efter skadan sa i princip "skyll dig själv". Och visst ... det var sant, men inte vad man behöver höra när man funderar på att hoppa från en bro för att bli av med ljudet. De första veckorna hade jag ett ordentligt brusljud som lät som ett vattenledningsrör inne i en vägg. Sen lade sig det mesta av det som tur var och nu piper det bara.

Spinxen: Japp, det är samma här. Det är nästan så man borde bli hifi-entusiast.

xxargs: Jag hade också superhörsel i början - tv-apparater, lysrörsarmaturer och framförallt gnisslande bromsar hördes otroligt tydligt i flera veckor. Lite ljudöverkänslighet finns fortfarande kvar. Vardagsljud fungerar ok, men starkare musik (gissar 90dB+) eller applåder behöver öronproppar.

JimmyAndersson: Det är förmodligen ingen bra idé för öronen, men om mäter upp sin hörselnedsättning (dvs tinnitusen) noga - nogrannare än öronläkaren - hela vägen upp till 20kHz, så kan man kanske skapa ett filter/eq-kurva som kompenserar. Alltså som en hörapparat, fast i studion. :-)

Hursomhelst, jag har faktiskt pysslat lite med brusgeneratorn också sen sist. Jag delar upp det och lägger det i nästa inlägg.
andr3as
Inlägg: 29
Blev medlem: 30 januari 2006, 13:55:44
Ort: Linköping

Inlägg av andr3as »

Jag misstänkte att det här skulle vara en bra algoritm: http://home.earthlink.net/~ltrammell/tech/newpink.htm och det är det. Nu kan testprogrammet generera rosa brus som ser rätt bra ut på spektrumanalysatorn.

Om man ska beskriva hur programmet arbetar utan att försöka förklara hur matematiken fungerar så är det väl nåt sånt här:

Man använder 5 st register (variabler). När ett nytt rosa brus-sample ska skapas väljs slumpmässigt ett av de 5 registren ut och uppdateras med ett nytt slumptal som multiplicerats med en konstant. Sen summeras alla register och bildar då ett nytt sample. Slumptalen är "vita" förstås.

Nu behöver man inte lägga ihop alla register varje varv. Man kan spara några additioner genom att dra av det gamla värdet i registret man ska updatera, från summan, och sen lägga till det nya.

Min egenhändiga C-kod ser ut så här, variabelnamnen kommer från artikeln i länken:

Kod: Markera allt


double contrib[5];
double genout;

double GetPinkValue()
{
    const double pA[5] = { 3.80240, 2.96940, 2.59700, 3.08700, 3.40060 };
    const double pSum[5] = { 0.00198, 0.01478, 0.06378, 0.23378, 0.91578 };
    const double pASum = 15.8564;

    int i;

    for (i = 0; i < 5; i++)
    {
        if (Rand() < pSum[i])
        {
            genout -= contrib[i];
            contrib[i] = 2 * (Rand() - 0.5) * pA[i];
            genout += contrib[i];
            break;
        }
    }
    return genout / pASum;
}

contrib[] är registren, genout är summan. Rand() är en funktion som genererar slumptal (flyttal) mellan 0.0 och 1.0.

Sådär... nästa steg är att göra en heltalsversion! Jag har en optimeringsidé att prova också.
andr3as
Inlägg: 29
Blev medlem: 30 januari 2006, 13:55:44
Ort: Linköping

Inlägg av andr3as »

Dags för en stor uppdatering. Det gick att optimera generatorn löjligt mycket...

Jag tänkte att om Rand() i den här raden,

contrib = 2 * (Rand() - 0.5) * pA;

som ju skapar ett flyttals-slumptal mellan 0.0 och 1.0, byttes ut mot en slumptalsfunktion som bara genererar en binär nolla eller etta, så skulle man kanske fortfarande få ungefär samma resultat. En brusgenerator som den Elfa säljer, har ju bara en enda logikutgång med ett RC-filter påhängt och kan ändå producera ett bra brus, så varför inte?

Ett test senare, bekräftar spektrumanalysatorn att det funkar finemang! Spektrumet blir lite annorlunda jämfört med tidigare, men det är fortfarande rosa. Jag kan definitivt inte *höra* någon skillnad och det är ju det som räknas.

Vad medför det här nu då?

Jo, slumptalsgenereringen går dubbelt så fort och multiplikationen och additionerna går bort. De utförs analogt med en 5-bits DAC med specialberäknade resistanser. PWM behövs inte.

Så nu sitter jag här och är sjukt nöjd med mig själv. Det är inte varje dag man hittar en så här snygg lösning! :D

Jag var orolig ett tag att det skulle behövas en mikrokontroller modell snabb (> 20MHz), men inte nu längre.

Så här kommer den färdiga algoritmen, med schema:

Kod: Markera allt


unsigned int lfsr = 1;
int U = 0;

int Rand1()
{
    int x = lfsr & 1;
    lfsr = (lfsr >> 1) ^ (-(signed int)(lfsr & 1) & 0xd0000001u);
    return x;
}

int Rand2()
{
    int i;
    int x = 0;

    for (i = 0; i < 13; i++)
    {
        x = (x << 1) | Rand1();
    }
    return x;
}

int GetPinkValue()
{
    const int pSum[] = { 16, 121, 522, 1915, 7501 };
    int i;

    for (i = 0; i < 5; i++)
    {
        if (Rand2() < pSum[i])
        {
            U &= ~(1 << i);
            U |= Rand1() << i;
            break;
        }
    }
    return U;
}

/* DAC-schema

         R0
  U0 o--XXXX--*--*---o Uout
         R1   |  |
  U1 o--XXXX--*  |
         R2   |  X
  U2 o--XXXX--*  X Rs
         R3   |  X
  U3 o--XXXX--*  |
         R4   |  |
  U4 o--XXXX--  ---
                GND

  Rs = 10k

  Rk = Rs / (pA[k] / pASum), k = 0..4.

        Exakt res.    E24            fel    E96     fel

  R0    41701.030928  39.0k + 2.7k   0.00%  42.2k   1.20%
  R1    53399.339934  51.0k + 2.4k   0.00%  53.6k   0.38%
  R2    61056.603774  51.0k + 10.0k  0.09%  60.4k  -1.07%
  R3    51365.079365  51.0k + 360    0.01%  51.1k  -0.52%
  R4    46628.242075  43.0k + 3.6k  -0.06%  46.4k  -0.49%

  Rout = 5k

Så nu återstår att välja mikrokontroller och skriva om koden till assembler, innan det är dags att bygga. Hoppas jag inte gjort nåt tankefel eller räknefel nu. :)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Varför konvertera till assembler när du redan har C-kod färdigt?
Skriv svar