Skript för att räkna spridningsmönster

Hemmapulare debatterar lämpligen i detta forum.

Moderator: Redaktörer

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-10-26 21:19

Jag har satt ihop ett litet skript som räknar spridningsmönster från tredimensionella källor i valfria plan, och tänkte att det kanske kan vara intressant för fler. Ni har kanske sett bilderna på den simulerade spridningen från solhagas tänkta nya AMT som är gjorda med en tidig version av skriptet. Senaste versionen klarar i stort sett alla vanlig former på källan som kon, dome, platt rektangel, mm. Källan approximeras med ett rutnät av mono- eller dipoler.

Stort tack till solhaga för förbättringsförslag och hjälp med att testa :)

Ni hittar skriptet här:
https://github.com/HEnquist/RadiationPatternCalculator

För att köra det behöver man antingen Matlab eller Octave. Matlab är något snabbare, men Octave är gratis. Hämta det här: https://www.gnu.org/software/octave/
Lägg alla filerna i samma katalog, och kör "radpatt_main.m".

Vad skriptet gör:
- Räknar spridningsmönster i fri rymd, från en ganska fritt definierbar källa
- Räknar fram tonkurva i en valfri "sweetspot"
- Om man vill, visar interferens och kanalbalans mellan höger och vänster högtalare
- Visar vad man har definierat i 3D

Vad skriptet INTE gör:
- Tar hand om reflektioner från väggar, golv och tak
- Tar hand om reflektioner från baffeln
- För dipoler, tar hänsyn till gångvägen runt baffeln
- Räknar på hur membran bryter upp vid höga frekvenser


Så här kan det se ut för en dipol, 300x20mm stor, vid 5 kHz:
radpatt.png
radpatt.png (144.72 KiB) Visad 9313 gånger


Jag har försökt lägga in tillräcklig hjälp för att komma igång i form av kommentarer i koden. Är något oklart, fråga!

Mycket nöje :)

Användarvisningsbild
solhaga
 
Inlägg: 2378
Blev medlem: 2014-04-25

Re: Skript för att räkna spridningsmönster

Inläggav solhaga » 2016-10-26 23:44

Ja, detta är ett riktigt bra hjälpmedel för att förstå hur olika konfigurationer påverkar spridningen.
Kudos till dig, HenrikE!

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-11-01 21:55

Ny version ligger uppe på github nu.
Den stora nyheten är att man kan ha flera källor aktiva samtidigt, Tanken är att kunna titta på tex spridning från dubbla basar eller lobning runt delningsfrekvensen. Varje källa har justerbar nivå och fas.
Jag har också lagt till en väldigt enkel modell som är tänkt att ge lite mer verklighetstrogna resultat för konhögtalare vid höga frekvenser. Om man vill kan man nu sätta en hastighet med vilken ljudet färdas från centrum utåt i konen. Den funktionen är lite otestad så säg gärna till om ni hittar något skumt.

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-28 16:19

Jag gav det här ett försök igår men kom inte längre än dit man kommer efter att man startat upp scriptet. Jag är helt novis på octave och undrar vart jag skriver i de data som krävs? Orkar du eller någon annan vägleda mig lite så skulle jag bli glad.

En fråga till, uträknad tonkurva i sweetspot, utan reflektioner från rum och utan kamfiltereffekt mellan öronen, blir lite som ett par hörlurar eller?

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-28 21:24

mawes skrev:Jag gav det här ett försök igår men kom inte längre än dit man kommer efter att man startat upp scriptet. Jag är helt novis på octave och undrar vart jag skriver i de data som krävs? Orkar du eller någon annan vägleda mig lite så skulle jag bli glad.

En fråga till, uträknad tonkurva i sweetspot, utan reflektioner från rum och utan kamfiltereffekt mellan öronen, blir lite som ett par hörlurar eller?

Kul att du vill testa! Alla parametrar för systemet man vill simulera skrivs in direkt i skriptet. Titta en bit ner så ser du att det finns ett antal bortkommenterade exempel. Enklast bör vara att utgå från det exemplet som mest liknar vad du vill göra. När du har gjort dina ändringar kör du skriptet och då får du förhoppningsvis ett antal plottar. Enklaste sättet att köra det är från editorn, klicka på play-symbolen som har ett kugghjul som bakgrund.

Vad vill du göra?

Den uträknade tonkurvan blir inte riktigt som med hörlurar, utan snarare hur det skulle bli om du lyssnade med ett öra i ett ekofritt rum. Man kan diskutera hur användbar den kurvan är i praktiken..

JM
 
Inlägg: 4831
Blev medlem: 2011-08-13

Re: Skript för att räkna spridningsmönster

Inläggav JM » 2016-12-28 22:04

HenrikE skrev:
mawes skrev:Jag gav det här ett försök igår men kom inte längre än dit man kommer efter att man startat upp scriptet. Jag är helt novis på octave och undrar vart jag skriver i de data som krävs? Orkar du eller någon annan vägleda mig lite så skulle jag bli glad.

En fråga till, uträknad tonkurva i sweetspot, utan reflektioner från rum och utan kamfiltereffekt mellan öronen, blir lite som ett par hörlurar eller?

Kul att du vill testa! Alla parametrar för systemet man vill simulera skrivs in direkt i skriptet. Titta en bit ner så ser du att det finns ett antal bortkommenterade exempel. Enklast bör vara att utgå från det exemplet som mest liknar vad du vill göra. När du har gjort dina ändringar kör du skriptet och då får du förhoppningsvis ett antal plottar. Enklaste sättet att köra det är från editorn, klicka på play-symbolen som har ett kugghjul som bakgrund.

Vad vill du göra? skall ha negativt tecken

Den uträknade tonkurvan blir inte riktigt som med hörlurar, utan snarare hur det skulle bli om du lyssnade med ett öra i ett ekofritt rum. Man kan diskutera hur användbar den kurvan är i praktiken..

Går det att beräkna separat o addera med direktljudet 2 x 60 graders laterala reflexer i en punkt i sweetspot med 0-40 ms fördröjning map ljudstyrka vore kanon. Reflexljudets ljudstyrka skall ha negativt tecken. Totalsumman skall vara över +3 dB för vara ok.

JM
Neuroscientist. Emotional Beauty is in the Ear of the Listener. "Kill your darlings" => scientific evolution.

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-28 22:14

JM skrev:
HenrikE skrev:
mawes skrev:Jag gav det här ett försök igår men kom inte längre än dit man kommer efter att man startat upp scriptet. Jag är helt novis på octave och undrar vart jag skriver i de data som krävs? Orkar du eller någon annan vägleda mig lite så skulle jag bli glad.

En fråga till, uträknad tonkurva i sweetspot, utan reflektioner från rum och utan kamfiltereffekt mellan öronen, blir lite som ett par hörlurar eller?

Kul att du vill testa! Alla parametrar för systemet man vill simulera skrivs in direkt i skriptet. Titta en bit ner så ser du att det finns ett antal bortkommenterade exempel. Enklast bör vara att utgå från det exemplet som mest liknar vad du vill göra. När du har gjort dina ändringar kör du skriptet och då får du förhoppningsvis ett antal plottar. Enklaste sättet att köra det är från editorn, klicka på play-symbolen som har ett kugghjul som bakgrund.

Vad vill du göra?

Den uträknade tonkurvan blir inte riktigt som med hörlurar, utan snarare hur det skulle bli om du lyssnade med ett öra i ett ekofritt rum. Man kan diskutera hur användbar den kurvan är i praktiken..

Går det att beräkna separat o addera med direktljudet 2 x 60 graders laterala reflexer i en punkt i sweetspot med 0-40 ms fördröjning map ljudstyrka vore kanon.

JM

Är det reflexerna från sidoväggarna du vill åt? Det går att skapa flera källor som är aktiva samtidigt. Jag har inte testat men det borde funka att definiera flera källor där en av dem är den "riktiga" och övriga är dess spegelbilder. Skulle det kunna ge något i stil med vad du är ute efter?

JM
 
Inlägg: 4831
Blev medlem: 2011-08-13

Re: Skript för att räkna spridningsmönster

Inläggav JM » 2016-12-28 22:46

HenrikE skrev:
JM skrev:
HenrikE skrev:Kul att du vill testa! Alla parametrar för systemet man vill simulera skrivs in direkt i skriptet. Titta en bit ner så ser du att det finns ett antal bortkommenterade exempel. Enklast bör vara att utgå från det exemplet som mest liknar vad du vill göra. När du har gjort dina ändringar kör du skriptet och då får du förhoppningsvis ett antal plottar. Enklaste sättet att köra det är från editorn, klicka på play-symbolen som har ett kugghjul som bakgrund.

Vad vill du göra?

Den uträknade tonkurvan blir inte riktigt som med hörlurar, utan snarare hur det skulle bli om du lyssnade med ett öra i ett ekofritt rum. Man kan diskutera hur användbar den kurvan är i praktiken..

Går det att beräkna separat o addera med direktljudet 2 x 60 graders laterala reflexer i en punkt i sweetspot med 0-40 ms fördröjning map ljudstyrka vore kanon.

JM

Är det reflexerna från sidoväggarna du vill åt? Det går att skapa flera källor som är aktiva samtidigt. Jag har inte testat men det borde funka att definiera flera källor där en av dem är den "riktiga" och övriga är dess spegelbilder. Skulle det kunna ge något i stil med vad du är ute efter?

Perfekt!
De laterala reflexerna är enligt F Toole/S Olive mfl de viktigaste reflexerna för en spatial ljudupplevelse oberoende om det gäller stereo- eller flerkanalslyssnande. Att ha koll på resten av reflexerna är viktigt så totalreflexljudet inte överstiger - 3dB relativt direktljudet. Andelen reflexer bakom frontalhgt skall vara så litet som möjligt. Golv/takreflexer får inte vara dominerande. Laterala reflexer får inte vara dominerande men bör ligga fördröjda kring 20-30 ms för optimal spatial upplevelse.
Vid reflexer mot hård yta fasvänder ljudet och skapar positiva och destruktive interferenser i lyssningspositionen.
Bordet var ok att låta de viktigaste reflexerna simuleras som punktkällor.
Skulle börja med ett normerat standardrum enligt Toole där direktljudet och reflexljudet redan är uppmätt för att kolla om din simulering stämmer.

JM
Neuroscientist. Emotional Beauty is in the Ear of the Listener. "Kill your darlings" => scientific evolution.

Användarvisningsbild
petersteindl
Der Eiermann
 
Inlägg: 39800
Blev medlem: 2007-04-17
Ort: Härnösand

Re: Skript för att räkna spridningsmönster

Inläggav petersteindl » 2016-12-28 23:07

JM skrev:
Vid reflexer mot hård yta fasvänder ljudet och skapar positiva och destruktive interferenser i lyssningspositionen.
Bordet var ok att låta de viktigaste reflexerna simuleras som punktkällor.
Skulle börja med ett normerat standardrum enligt Toole där direktljudet och reflexljudet redan är uppmätt för att kolla om din simulering stämmer.

JM

Är du säker på att ljud fasvänder då det reflekteras mot en hård yta? Jag är säker på att det inte gör det.

Mvh
Peter
VD Bremen Production AB + Ortho-Reality AB; Grundare av Ljudbutiken AB; Fd import av hifi; Konstruktör av LICENCE No1 D/A, Bremen No1 D/A, Forsell D/A, SMS FrameSound, Bremen 3D8 m.fl.

JM
 
Inlägg: 4831
Blev medlem: 2011-08-13

Re: Skript för att räkna spridningsmönster

Inläggav JM » 2016-12-28 23:18

petersteindl skrev:
JM skrev:
Vid reflexer mot hård yta fasvänder ljudet och skapar positiva och destruktive interferenser i lyssningspositionen.
Bordet var ok att låta de viktigaste reflexerna simuleras som punktkällor.
Skulle börja med ett normerat standardrum enligt Toole där direktljudet och reflexljudet redan är uppmätt för att kolla om din simulering stämmer.

JM

Är du säker på att ljud fasvänder då det reflekteras mot en hård yta? Jag är säker på att det inte gör det.

Mvh
Peter

Jo. Fasvänder inte ljudet vid en hård vägg får du ett tryckminimum invid väggen men du får alltid ett tryckmaximum invid väggen.

JM
Neuroscientist. Emotional Beauty is in the Ear of the Listener. "Kill your darlings" => scientific evolution.

Användarvisningsbild
IngOehman
 
Inlägg: 48435
Blev medlem: 2003-09-28
Ort: K-PAX via Tellus

Re: Skript för att räkna spridningsmönster

Inläggav IngOehman » 2016-12-28 23:28

Oj, det nedanstående är en räcka tumregler som hette duga minsann! :)

Möjligen är verkligheten lite för komplex för att det skall vara lämpligt att beskriva "rätt åtgärd" i form av några tumregler. Men jag skall försöka beskriva vad jag menar med det, lite mera konkret, i kommentarer interfolierat i det nedanstående:

JM skrev:De laterala reflexerna är enligt F Toole/S Olive mfl de viktigaste reflexerna för en spatial ljudupplevelse oberoende om det gäller stereo- eller flerkanalslyssnande.

Njae... om man skall vara noga, och det tycker jag man skall, så är praktiskt taget samtliga studier som gjort på saken inriktade på att kartlägga subjektiva preferenser med avseende på lokaler för live-musik. Att direkt överföra resultaten på ett lyssningsrum blir lätt väldigt fel.

Där är ju det som utgör "musik plus rum" redan fångat.

Däremot kan man i förekommande fall faktiskt använda kunskap från sådana studier som grund för att göra goda surroundmixar, t ex.

Och visst finns det mycket att lära sig som är användbart även för att utforma optimala lyssningsrum, men knappast preferensstudierna på musiklokalakustik.

JM skrev:Att ha koll på resten av reflexerna är viktigt så totalreflexljudet inte överstiger - 3dB relativt direktljudet.

Tja. Det kan man förstås hävda, eftersom man kan hävda vilken gräns som helst.

I verkligheten beror det på massor av olika saker hur hög andel reflekterade ljud kan tål, och faktiskt även i viss mån behöver. Och i samma verkligheten så är det rätt så sällsynt med sådana rum, det vill säga rum där rumsradien*Ri väsentligt överskrider lyssningsavståndet, i varje fall vid lite lägre frekvenser.

Dessutom är det svårt att diskutera en siffra då förhållandet mellan direkt och reflekterat ljud i hög grad ändrar sig över tiden. Så att bara ange en nivå beskriver förhållandet på ett väldigt dåligt sätt.

Varifrån har du fått siffran -3 dB?

JM skrev:Andelen reflexer bakom frontalhgt skall vara så litet som möjligt.

Ja, och nej.

Det beror på vilka tidsintervall man talar om, och om man talar om primära eller sekundära (och senare) reflexer.

JM skrev:Golv/takreflexer får inte vara dominerande. Laterala reflexer får inte vara dominerande men bör ligga fördröjda kring 20-30 ms för optimal spatial upplevelse.

Jag kan nästan hålla med om det sistnämnda (med reservationen för formuleringen "optimal spatial upplevelse" det handlar ju inte om det om man talar i termer av ursprungstrohet), men jag vill samtidigt klargöra att det beror på frekvens, och även påminna (dem som vetet det tidigare men glömt det nu) att 30 ms motsvarar en fördröjning om över 10 meter gångtid i luft. Så även om det ligger något lite i det, så är det en rätt så hypotetisk synpunkt om man talar om vad man skall försöka åstadkomma i ett normalstort lyssningsrum.

JM skrev:Vid reflexer mot hård yta fasvänder ljudet och skapar positiva och destruktive interferenser i lyssningspositionen.

Nej, ljudet (det vi hör - ljudtrycket) fasvänds inte då en ljudvåg studsar i en hård yta.

Det har du missuppfattat. Däremot fasvänds det om det studsar mot t ex slutet av en öppen tunnel, om våglängden är stor i förhållande till tunnelns diameter. Detsamma sker när t ex en vägg som ljudvågen slickat, tar slut.

Oavsett om ett ljud fasvänds eller inte då det studsar, så kommer dock alltid en adderad gångväg att kunna leda till interferens med ljudet som gått en kortare sträcka, men det finns inget egenvärde att se just interferensens frekvensberoende fas (kamfiltereffekten) som "problemet". Alla aspekter av olika ljuds samverkan behöver beaktas, även från ett geometriskt perspektiv.


Vh, iö
Fd psykoakustikforskare & ordf LTS. Nu akustiker m specialiteten
studiokontrollrum, hemmabiosar & musiklyssnrum. Även Ch. R&D
åt Carlsson och Guru, konsult åt andra + hobbyhögtalartillv (Ino).

Användarvisningsbild
Svante
Audiot!
 
Inlägg: 37552
Blev medlem: 2004-03-03
Ort: oakustisk

Re: Skript för att räkna spridningsmönster

Inläggav Svante » 2016-12-29 01:20

JM skrev:
petersteindl skrev:
JM skrev:
Vid reflexer mot hård yta fasvänder ljudet och skapar positiva och destruktive interferenser i lyssningspositionen.
Bordet var ok att låta de viktigaste reflexerna simuleras som punktkällor.
Skulle börja med ett normerat standardrum enligt Toole där direktljudet och reflexljudet redan är uppmätt för att kolla om din simulering stämmer.

JM

Är du säker på att ljud fasvänder då det reflekteras mot en hård yta? Jag är säker på att det inte gör det.

Mvh
Peter

Jo. Fasvänder inte ljudet vid en hård vägg får du ett tryckminimum invid väggen men du får alltid ett tryckmaximum invid väggen.

JM


Ljudtrycket fasvänder inte vid reflexion mot en vägg. Skulle det göra det så skulle den reflekterade vågen ligga i motfas med den infallande, de skulle ta ut varandra och vi skulle ha ett tryckminimum intill väggen.
Partikelhastigheten fasvänds däremot, så partikelhastigheten är noll intill väggen. Och det är ju rimligt, luften har ju ingenstans att ta vägen där. Jag fascineras lite av hur man kan tänka kring det där, lite hönan och ägget liksom. Alltså, eftersom hastigheten intill väggen måste vara noll, så måste den reflekterade hastighetsvågen vara fasvänd. Och det är också det som gör att den blir riktad åt andra hållet, hastighetsvektorn är riktad åt andra hållet (=omvänt tecken, motsatt fas), men trycket är samma som hos den infallande vågen.
Så länge har jag längat efter att loudness war skulle vara över. Nu börjar jag tro att vi faktiskt är där. Kruxet är att vi förlorade.

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-29 02:01

HenrikE skrev:
Vad vill du göra?

.


Massa saker :) Men vi kan börja med bilderna nedan, tänk ett horn som delas vid 1000Hz eller så, med antingen dubbla 8'-element ovan och under, sluten låd, eller samma horn med 3st 6,5" ovan och under. I fallet med 6,6tummarna är jag mycket nyfiken på hur spridningen ser ut i sidled och om man kan styra spridningen i sidled genom att justera volymen på de yttre basarna.
Spridning i vertikalled är också intressant såklart.

Min tanke är att en array(vad säger man på svenska?) under vissa betingelser skulle kunna ses som ett virtuellt element med annan storlek och form och därmed spridning. Om man sen kunde justera tonkurvorna på elementen individuellt borde man kunna bygga ett virtuellt element som växer ju lägre frekvens det ska spela, till den gräns arrayen tillåter då. Säkert skitsvårt att göra bra, men man kanske kan få till något gör något som liknar det, iallafall i någon mån.

Användarvisningsbild
petersteindl
Der Eiermann
 
Inlägg: 39800
Blev medlem: 2007-04-17
Ort: Härnösand

Re: Skript för att räkna spridningsmönster

Inläggav petersteindl » 2016-12-29 02:19

Svante skrev:
JM skrev:
petersteindl skrev:Är du säker på att ljud fasvänder då det reflekteras mot en hård yta? Jag är säker på att det inte gör det.

Mvh
Peter

Jo. Fasvänder inte ljudet vid en hård vägg får du ett tryckminimum invid väggen men du får alltid ett tryckmaximum invid väggen.

JM


Ljudtrycket fasvänder inte vid reflexion mot en vägg. Skulle det göra det så skulle den reflekterade vågen ligga i motfas med den infallande, de skulle ta ut varandra och vi skulle ha ett tryckminimum intill väggen.
Partikelhastigheten fasvänds däremot, så partikelhastigheten är noll intill väggen. Och det är ju rimligt, luften har ju ingenstans att ta vägen där. Jag fascineras lite av hur man kan tänka kring det där, lite hönan och ägget liksom. Alltså, eftersom hastigheten intill väggen måste vara noll, så måste den reflekterade hastighetsvågen vara fasvänd. Och det är också det som gör att den blir riktad åt andra hållet, hastighetsvektorn är riktad åt andra hållet (=omvänt tecken, motsatt fas), men trycket är samma som hos den infallande vågen.


Precis. Det är så jag förstått teorin om ljudvågor.
VD Bremen Production AB + Ortho-Reality AB; Grundare av Ljudbutiken AB; Fd import av hifi; Konstruktör av LICENCE No1 D/A, Bremen No1 D/A, Forsell D/A, SMS FrameSound, Bremen 3D8 m.fl.

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-29 03:03

kanske skulle bifoga bilderna också
dubbel8.jpg
dubbel8.jpg (23.13 KiB) Visad 8925 gånger

6st6.5tum.png
6st6.5tum.png (6.5 KiB) Visad 8925 gånger

JM
 
Inlägg: 4831
Blev medlem: 2011-08-13

Re: Skript för att räkna spridningsmönster

Inläggav JM » 2016-12-29 06:00

petersteindl skrev:
Svante skrev:
JM skrev:Jo. Fasvänder inte ljudet vid en hård vägg får du ett tryckminimum invid väggen men du får alltid ett tryckmaximum invid väggen.

JM


Ljudtrycket fasvänder inte vid reflexion mot en vägg. Skulle det göra det så skulle den reflekterade vågen ligga i motfas med den infallande, de skulle ta ut varandra och vi skulle ha ett tryckminimum intill väggen.
Partikelhastigheten fasvänds däremot, så partikelhastigheten är noll intill väggen. Och det är ju rimligt, luften har ju ingenstans att ta vägen där. Jag fascineras lite av hur man kan tänka kring det där, lite hönan och ägget liksom. Alltså, eftersom hastigheten intill väggen måste vara noll, så måste den reflekterade hastighetsvågen vara fasvänd. Och det är också det som gör att den blir riktad åt andra hållet, hastighetsvektorn är riktad åt andra hållet (=omvänt tecken, motsatt fas), men trycket är samma som hos den infallande vågen.


Precis. Det är så jag förstått teorin om ljudvågor.

Tack Peter, Ingvar och Svante! Jag backar.
Ett gammalt icke aktivt 35 årigt minne lurar mig fast jag borde veta bättre. Har med åren lärt mig att dubbelkolla med inklistrad referens men inte den här gången.
Svante du gav mig den intuitiva förklaring jag saknat med partikelhastigheten noll och dess fasvändning vid hård vägg.
Återigen bevis på att det svåraste med aktivt lärande består i att glömma och att de flesta gamla minnen är falska.
Pudel.
I horn uppstår hörbara kamfilter effekter i de högre frekvenserna om kvoten munarean/halsarean är mindre än 300 vid frekvensomfång över 3 oktaver. Är detta sekundärt till fasvända reflexer? Hittar inga bra referenser.
Angående hönan o ägget tänket finns egentligen "ljudvågor" utanför matematiken? Luftmolekyler rör sig med olika partikelhastighet runt ett jämnviktsläge och skapar lokala tryckvariationer som vi hör. Dessa lokala luftmolekylrörelser påverkar sina grannmolekyler att förändra sina partikelhastigheter o därmed ljudtrycket cc.
Ljudvågen är primärt som jag ser det en matematisk beskrivning av ett i rummet repetitivt avklingande dominoeffektliknande luftmolekylknuffande av över tiden stationära luftmolekyler.

JM
Neuroscientist. Emotional Beauty is in the Ear of the Listener. "Kill your darlings" => scientific evolution.

JM
 
Inlägg: 4831
Blev medlem: 2011-08-13

Re: Skript för att räkna spridningsmönster

Inläggav JM » 2016-12-29 08:44

IngOehman skrev:Oj, det nedanstående är en räcka tumregler som hette duga minsann! :)

Möjligen är verkligheten lite för komplex för att det skall vara lämpligt att beskriva "rätt åtgärd" i form av några tumregler. Men jag skall försöka beskriva vad jag menar med det, lite mera konkret, i kommentarer interfolierat i det nedanstående:

JM skrev:De laterala reflexerna är enligt F Toole/S Olive mfl de viktigaste reflexerna för en spatial ljudupplevelse oberoende om det gäller stereo- eller flerkanalslyssnande.

Njae... om man skall vara noga, och det tycker jag man skall, så är praktiskt taget samtliga studier som gjort på saken inriktade på att kartlägga subjektiva preferenser med avseende på lokaler för live-musik. Att direkt överföra resultaten på ett lyssningsrum blir lätt väldigt fel.

Där är ju det som utgör "musik plus rum" redan fångat.

Däremot kan man i förekommande fall faktiskt använda kunskap från sådana studier som grund för att göra goda surroundmixar, t ex.

Och visst finns det mycket att lära sig som är användbart även för att utforma optimala lyssningsrum, men knappast preferensstudierna på musiklokalakustik.

JM skrev:Att ha koll på resten av reflexerna är viktigt så totalreflexljudet inte överstiger - 3dB relativt direktljudet.

Tja. Det kan man förstås hävda, eftersom man kan hävda vilken gräns som helst.

I verkligheten beror det på massor av olika saker hur hög andel reflekterade ljud kan tål, och faktiskt även i viss mån behöver. Och i samma verkligheten så är det rätt så sällsynt med sådana rum, det vill säga rum där rumsradien*Ri väsentligt överskrider lyssningsavståndet, i varje fall vid lite lägre frekvenser.

Dessutom är det svårt att diskutera en siffra då förhållandet mellan direkt och reflekterat ljud i hög grad ändrar sig över tiden. Så att bara ange en nivå beskriver förhållandet på ett väldigt dåligt sätt.

Varifrån har du fått siffran -3 dB?

JM skrev:Andelen reflexer bakom frontalhgt skall vara så litet som möjligt.

Ja, och nej.

Det beror på vilka tidsintervall man talar om, och om man talar om primära eller sekundära (och senare) reflexer.

JM skrev:Golv/takreflexer får inte vara dominerande. Laterala reflexer får inte vara dominerande men bör ligga fördröjda kring 20-30 ms för optimal spatial upplevelse.

Jag kan nästan hålla med om det sistnämnda (med reservationen för formuleringen "optimal spatial upplevelse" det handlar ju inte om det om man talar i termer av ursprungstrohet), men jag vill samtidigt klargöra att det beror på frekvens, och även påminna (dem som vetet det tidigare men glömt det nu) att 30 ms motsvarar en fördröjning om över 10 meter gångtid i luft. Så även om det ligger något lite i det, så är det en rätt så hypotetisk synpunkt om man talar om vad man skall försöka åstadkomma i ett normalstort lyssningsrum.

JM skrev:Vid reflexer mot hård yta fasvänder ljudet och skapar positiva och destruktive interferenser i lyssningspositionen.

Nej, ljudet (det vi hör - ljudtrycket) fasvänds inte då en ljudvåg studsar i en hård yta.

Det har du missuppfattat. Däremot fasvänds det om det studsar mot t ex slutet av en öppen tunnel, om våglängden är stor i förhållande till tunnelns diameter. Detsamma sker när t ex en vägg som ljudvågen slickat, tar slut.

Oavsett om ett ljud fasvänds eller inte då det studsar, så kommer dock alltid en adderad gångväg att kunna leda till interferens med ljudet som gått en kortare sträcka, men det finns inget egenvärde att se just interferensens frekvensberoende fas (kamfiltereffekten) som "problemet". Alla aspekter av olika ljuds samverkan behöver beaktas, även från ett geometriskt perspektiv.


Vh, iö


Fram med några referenser som bevisar dina påståenden. Mina slutsatser är bevisade hur många gånger som helst i tidigare inlägg utom fasvändningen invid vägg.

JM
Neuroscientist. Emotional Beauty is in the Ear of the Listener. "Kill your darlings" => scientific evolution.

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-29 11:28

mawes skrev:
HenrikE skrev:
Vad vill du göra?

.


Massa saker :) Men vi kan börja med bilderna nedan, tänk ett horn som delas vid 1000Hz eller så, med antingen dubbla 8'-element ovan och under, sluten låd, eller samma horn med 3st 6,5" ovan och under. I fallet med 6,6tummarna är jag mycket nyfiken på hur spridningen ser ut i sidled och om man kan styra spridningen i sidled genom att justera volymen på de yttre basarna.
Spridning i vertikalled är också intressant såklart.

Min tanke är att en array(vad säger man på svenska?) under vissa betingelser skulle kunna ses som ett virtuellt element med annan storlek och form och därmed spridning. Om man sen kunde justera tonkurvorna på elementen individuellt borde man kunna bygga ett virtuellt element som växer ju lägre frekvens det ska spela, till den gräns arrayen tillåter då. Säkert skitsvårt att göra bra, men man kanske kan få till något gör något som liknar det, iallafall i någon mån.

Ok, nåt i den här stilen? Lite grovt tillyxat, men borde vara en bra start.
geom.png
geom.png (19.8 KiB) Visad 8868 gånger


Lägg in den här källdefinitionen i skriptet:
Kod: Markera allt
sources{1}.f=2000;
sources{1}.dx=10e-3;
sources{1}.Lz=0.19;
sources{1}.Ly=0.42;
sources{1}.xpos = 0;
sources{1}.zpos = 0;
sources{1}.ypos = 0;
sources{1}.roty = 0;
sources{1}.rotz = 0;
sources{1}.level = 15;
sources{1}.phase = 0;
w0 = 2*pi*2000;
Q = 0.5;
sources{1}.xo = @(s) -s.^2./(s.^2 + w0/Q*s + w0^2);

sources{2}.dx=10e-3;
sources{2}.radius=70e-3;
sources{2}.conedepth=40e-3;
sources{2}.xpos = 0;
sources{2}.zpos = 0;
sources{2}.ypos = 0;
sources{2}.roty = 0;
sources{2}.rotz = 0;
sources{2}.level = 0;
sources{2}.phase = 0;
sources{2}.xo = @(s) w0^2./(s.^2 + w0/Q*s + w0^2);

sources{3} = sources{2};
sources{4} = sources{2};
sources{5} = sources{2};
sources{6} = sources{2};
sources{7} = sources{2};
sources{2}.zpos = 0.2;
sources{3}.zpos = 0.2;
sources{4}.zpos = 0.2;
sources{5}.zpos = -0.2;
sources{6}.zpos = -0.2;
sources{7}.zpos = -0.2;
sources{2}.ypos = 0.2;
sources{5}.ypos = 0.2;
sources{4}.ypos = -0.2;
sources{7}.ypos = -0.2;


Hornet satte jag som en rektangulär plan källa med samma storlek som mynningen. Jag antar att det inte är en särskilt bra beskrivning så här får någon gärna föreslå något bättre.
För att göra de sex 6.5-tummarna börjar jag med en som jag kopierar och flyttar till rätt platser.
Jag har lagt på ett lågpassfilter vid 2kHz, samma för alla basarna. Hornet har ett högpassfilter. Du kan lätt ändra delningsfrekvensen, och ändra så att varje element har ett individuellt filter. Du kan också justera nivån för varje element i dB med, exempelvis höja element nr3 med 6dB:
Kod: Markera allt
sources{3}.level = 6;


Mycket nöje! :)

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-29 11:57

Tack:) Jag formulerade mig lite dumt, hornets spridning, 90*40 grader, är redan dikterat och inget jag kan ändra på så det kan man plocka bort. Jag ville bara visa varför elementen satt där dom satt om du förstår.
Vidare önskar jag minsta möjliga CC mellan elementen så dom ska ligga dikt an mot varandra i bredd och raderna skall ligga 190mm från varandra(höjden på hornet).
Jag ska försöka få till det själv men jag kanske ropar på hjälp igen ikväll:)

Användarvisningsbild
Svante
Audiot!
 
Inlägg: 37552
Blev medlem: 2004-03-03
Ort: oakustisk

Re: Skript för att räkna spridningsmönster

Inläggav Svante » 2016-12-29 13:11

JM skrev:Angående hönan o ägget tänket finns egentligen "ljudvågor" utanför matematiken? Luftmolekyler rör sig med olika partikelhastighet runt ett jämnviktsläge och skapar lokala tryckvariationer som vi hör. Dessa lokala luftmolekylrörelser påverkar sina grannmolekyler att förändra sina partikelhastigheter o därmed ljudtrycket cc.
Ljudvågen är primärt som jag ser det en matematisk beskrivning av ett i rummet repetitivt avklingande dominoeffektliknande luftmolekylknuffande av över tiden stationära luftmolekyler.


Eh, ja, ljudvågor finns nog inte ens i matematiken, men däremot det finns matematiska modeller av den fysiska verkligheten. Och de utgår ifrån att man ställer upp diffekvationer för många infinitisemalt små element och det visat sig att lösningen till dem är många. I det endimensionella fallet finns det två lösningar: f(ct-x) och f(ct+x) där f är vilken funktion som helst, t är tiden och x är lägeskoordinaten och c är ljudhastigheten. Det trillar alltså ut på ett matematiskt vackert sätt att vågorna kan överföra vilken information som helst (funktionen f) och argumentet ct+-x talar om att vågen kan gå åt ena eller andra hållet.
Så länge har jag längat efter att loudness war skulle vara över. Nu börjar jag tro att vi faktiskt är där. Kruxet är att vi förlorade.

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-29 17:32

Henrik,
när jag klistrar in det där du skrev får jag den här konfigurationen. Vad är fel?

octave test1.png
octave test1.png (28.05 KiB) Visad 8815 gånger

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-29 19:21

mawes skrev:Henrik,
när jag klistrar in det där du skrev får jag den här konfigurationen. Vad är fel?

Du har nog inte kommenterat bort linjearray-exemplet som är det förinställda. Plocka bort det så ska det säkert bli bra!

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-29 22:12

HenrikE skrev:Du har nog inte kommenterat bort linjearray-exemplet som är det förinställda. Plocka bort det så ska det säkert bli bra!


Jo line arrayen är bortplockad. Försökte klippa bort "hornet" men då funkade det inte. Satte måtten på hornet till 0*0, då fick jag två element bredvid varandra, ser ut som du lagt elementen på varandra, stämmer det?

edit: eller, jag försöker flytta på elementen men jag får bara upp två st ändå.

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-29 23:52

mawes skrev:
HenrikE skrev:Du har nog inte kommenterat bort linjearray-exemplet som är det förinställda. Plocka bort det så ska det säkert bli bra!


Jo line arrayen är bortplockad. Försökte klippa bort "hornet" men då funkade det inte. Satte måtten på hornet till 0*0, då fick jag två element bredvid varandra, ser ut som du lagt elementen på varandra, stämmer det?

edit: eller, jag försöker flytta på elementen men jag får bara upp två st ändå.

Hmm det verkar konstigt. Elementen ska inte ligga på varandra. Kan du bifoga hela ditt skript?

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-30 00:12

att dom ligger på varandra var bara en gissning när jag försökte förstå kordinaterna du skrivit, anywho, såhär ser det ut:

%Radiation Pattern Calculator
%Copyright Henrik Enquist 2016
%This file is part of Radiation Pattern Calculator.
%
%Radiation Pattern Calculator is free software: you can redistribute it and/or modify
%it under the terms of the GNU General Public License as published by
%the Free Software Foundation, either version 3 of the License, or
%(at your option) any later version.
%
%Radiation Pattern Calculator is distributed in the hope that it will be useful,
%but WITHOUT ANY WARRANTY; without even the implied warranty of
%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%GNU General Public License for more details.
%
%You should have received a copy of the GNU General Public License
%along with Radiation Pattern Calculator. If not, see <http://www.gnu.org/licenses/>.

clear all
close all

isoctave = (exist ('OCTAVE_VERSION', 'builtin') > 0); %running in matlab or octave?
if isoctave
scrsz = get(0,'screensize');
else
scrsz = get(groot,'ScreenSize');
end

%% define the room
room = struct;
sweetspot = struct;

room.dx = 10e-3; %pixelsize in meters
room.lx = 5.1; %room length, m
room.lz = 2.4; %room height, m
room.ly = 3.2; %room width, m

sweetspot.l = 200e-3; %sweetspot size
sweetspot.n = 10; %sweetspot number of points per side
sweetspot.xp = 3.6; %sweetspot distance from front wall
sweetspot.yp = 0; %sweetspot sideways position
sweetspot.zp = 0.0; %sweetspot vertical position



%% define the source

% --Definition of the source parameters--
% sources{} - array of sources

% Mandatory
% sources{}.f : frequency, Hz
% sources{}.dx : source point spacing, m
% sources{}.Lz : source height, m, must be defined for rectangular sources
% sources{}.Ly : source width, m, must be defined for rectangular sources
% sources{}.radius : source radius, m, must be defined for round sources

% Optional, if left out these are disabled or put to zero
% sources{}.radcurv : source radius of curvature, m
% sources{}.conedepth : source cone depth
% sources{}.dir : [x;y;z] vector for lobe direction before rotation by rotz, only used when dipole=true
% sources{}.dipole : false for monopoles, true for dipoles
% sources{}.xpos : source distance from front wall
% sources{}.zpos : vertical position
% sources{}.ypos : sideways position
% sources{}.roty : rotation around the y axis (tilt up/down), deg
% sources{}.rotz : rotation around the vertical axis (toe-in), deg
% sources{}.level : source level adjust, dB
% sources{}.phase : source phase, only relevant when using more than one source
% sources{}.wavespeed : propagation speed in the cone, outwards from voice coil, m/s
% sources{}.xo : transfer function of a crossover filter,
% example 1st order lowpass at 100 Hz: @(s) (2*pi*100)./(s + 2*pi*100)
% sources{}.stereo : true to mirror source sideways for stereo, needs ypos>0 to make sense
% only used for horizontal and back wall patterns



sources{1}.f=2000;
sources{1}.dx=10e-3;
sources{1}.Lz=0.19;
sources{1}.Ly=0.42;
sources{1}.xpos = 0;
sources{1}.zpos = 0;
sources{1}.ypos = 0;
sources{1}.roty = 0;
sources{1}.rotz = 0;
sources{1}.level = 15;
sources{1}.phase = 0;
w0 = 2*pi*2000;
Q = 0.5;
sources{1}.xo = @(s) -s.^2./(s.^2 + w0/Q*s + w0^2);

sources{2}.dx=10e-3;
sources{2}.radius=70e-3;
sources{2}.conedepth=40e-3;
sources{2}.xpos = 0;
sources{2}.zpos = 0;
sources{2}.ypos = 0;
sources{2}.roty = 0;
sources{2}.rotz = 0;
sources{2}.level = 0;
sources{2}.phase = 0;
sources{2}.xo = @(s) w0^2./(s.^2 + w0/Q*s + w0^2);

sources{3} = sources{2};
sources{4} = sources{2};
sources{5} = sources{2};
sources{6} = sources{2};
sources{7} = sources{2};
sources{2}.zpos = 0.2;
sources{3}.zpos = 0.2;
sources{4}.zpos = 0.2;
sources{5}.zpos = -0.2;
sources{6}.zpos = -0.2;
sources{7}.zpos = -0.2;
sources{2}.ypos = 0.2;
sources{5}.ypos = 0.2;
sources{4}.ypos = -0.2;
sources{7}.ypos = -0.2;









for mm = 2:5
sources{mm} = sources{mm-1};
sources{mm}.zpos = sources{mm-1}.zpos + 100e-3;
end

%% calculate source points
sourcestruct=preparesource(sources,10);
fprintf('The source consists of %d points. The area is %4.2f cm^2.\n',sourcestruct.n, sourcestruct.n*sourcestruct.dx^2*1e4)


%% create matrises och vectors
sp_per_wl=sourcestruct.lambda/sourcestruct.dx;
fprintf('Wavelenght is %4.2f mm. The source has %4.2f points per wavelength.\n',1000*sourcestruct.lambda, sp_per_wl)
if sp_per_wl<5 %5 seems like a reasonable limit
fprintf('Warning: the source has too few points!\n')
end



room.nz=round(room.lz/room.dx); %vertical number of pixels (front wall height)
room.nx=round(room.lx/room.dx); %horizontal number of pixels (room length)
room.ny=round(room.ly/room.dx); %number of pixels for depth (room width)
room.z=linspace(-room.nz/2*room.dx,room.nz/2*room.dx,room.nz);
room.x=linspace(0,room.nx*room.dx,room.nx);
room.y=linspace(-room.ny/2*room.dx,room.ny/2*room.dx,room.ny);
fprintf('Room is %d pixels high, %d pixels wide and %d pixels long.\n',room.nz,room.ny,room.nx)

plotroom(sourcestruct,room,sweetspot,11);

% XZ plane (vertical)
plane_xz = struct;
plane_xz.y0 = 0;
[plane_xz.xg, plane_xz.zg]=meshgrid(room.x,room.z);
plane_xz.yg=plane_xz.y0*ones(size(plane_xz.xg));

% XY plane (horizontal)
plane_xy = struct;
plane_xy.z0=0;
[plane_xy.xg, plane_xy.yg]=meshgrid(room.x,room.y);
plane_xy.zg=plane_xy.z0*ones(size(plane_xy.xg));

% YZ plane (back wall)
plane_yz = struct;
plane_yz.x0=room.nx*room.dx; %x-coordinate of the plane
[plane_yz.yg, plane_yz.zg]=meshgrid(room.y,room.z);
plane_yz.xg=plane_yz.x0*ones(size(plane_yz.zg));

% sweetspot plane
plane_ss = struct;
plane_ss.x0=sweetspot.xp; %x-coordinate of the plane
sweetspot.z = linspace(-sweetspot.l/2,sweetspot.l/2,sweetspot.n)+sweetspot.zp;
sweetspot.y = linspace(-sweetspot.l/2,sweetspot.l/2,sweetspot.n)+sweetspot.yp;
[plane_ss.zg, plane_ss.yg]=meshgrid(sweetspot.z,sweetspot.y);
plane_ss.xg=plane_ss.x0*ones(size(plane_ss.zg));


%% calculate vertical pattern
world_v = zeros(room.nz,room.nx);
h = waitbar(0,'wait..');
world_v=calculatepattern(plane_xz,sourcestruct,world_v,h);
close(h)

logimage_v=20*log10(abs((world_v)));
h=figure(20);
if isoctave
set(h,'position',[scrsz(3)/3 2*scrsz(4)/3 scrsz(3)/3-30 scrsz(4)/3.2-90]);
else
set(h,'OuterPosition',[scrsz(3)/3 2*scrsz(4)/3 scrsz(3)/3 scrsz(4)/3.2]);
end

imagesc(room.x,room.z,logimage_v,[0 140]);
set(gca,'YDir','normal')
colormap(jet(256))
colorbar
axis image
title(['Vertical radiation pattern at ',num2str(sourcestruct.f), ' Hz'])
xlabel('X, m')
ylabel('Z, m')



%% calculate horizontal pattern
world_h = zeros(room.ny,room.nx);
h = waitbar(0,'wait..');
world_h=calculatepattern(plane_xy,sourcestruct,world_h,h);
close(h)

if sourcestruct.stereo
image_lr=makestereoimage(world_h,'ud',1);
h=figure(31);
if isoctave
imshow(image_lr);
else
imshow(image_lr,'InitialMagnification','fit')
end
set(gca,'YDir','normal')
title(['Horizontal channel balance, ',num2str(sourcestruct.f), ' Hz'])
if isoctave
set(h,'position',[2*scrsz(3)/3 2*scrsz(4)/3 scrsz(3)/3-30 scrsz(4)/3.2-90]);
else
set(h,'OuterPosition',[2*scrsz(3)/3 2*scrsz(4)/3 scrsz(3)/3 scrsz(4)/3.2]);
end
world_h=world_h + flipud(world_h);
end


logimage_h=20*log10(abs((world_h)));
h=figure(30);

if isoctave
set(h,'position',[scrsz(3)/3 scrsz(4)/3+20 scrsz(3)/3-30 scrsz(4)/3.2-90]);
else
set(h,'OuterPosition',[scrsz(3)/3 scrsz(4)/3+20 scrsz(3)/3 scrsz(4)/3.2]);
end
imagesc(room.x,room.y,logimage_h,[0 140]);
set(gca,'YDir','normal')
colormap(jet(256))
colorbar
axis image
title(['Horizontal radiation pattern at ',num2str(sourcestruct.f), ' Hz'])
xlabel('X, m')
ylabel('Y, m')



%% calculate pattern on back wall
world_bak = zeros(room.nz,room.ny);
h = waitbar(0,'wait..');
world_bak=calculatepattern(plane_yz,sourcestruct,world_bak,h);
close(h)
if sourcestruct.stereo
image_blr = makestereoimage(world_bak,'lr',1);
h=figure(41);
if isoctave
imshow(image_blr);
else
imshow(image_blr,'InitialMagnification','fit');
end
set(gca,'YDir','normal')
title(['Back wall channel balance, ',num2str(sourcestruct.f), ' Hz'])

if isoctave
set(h,'position',[2*scrsz(3)/3 scrsz(4)/3+20 scrsz(3)/3-30 scrsz(4)/3.2-90]);
else
set(h,'OuterPosition',[2*scrsz(3)/3 scrsz(4)/3+20 scrsz(3)/3 scrsz(4)/3.2]);
end
world_bak=world_bak + fliplr(world_bak);
end
logimage_bak=20*log10(abs((world_bak)));
h=figure(40);

if isoctave
set(h,'position',[scrsz(3)/3 40 scrsz(3)/3-30 scrsz(4)/3.2-90]);
else
set(h,'OuterPosition',[scrsz(3)/3 40 scrsz(3)/3 scrsz(4)/3.2]);
end
imagesc(room.y,room.z,logimage_bak,[0 140]);
set(gca,'YDir','normal')
colormap(jet(256))
colorbar
axis image
title(['Radiation pattern on back wall, ',num2str(sourcestruct.f), ' Hz'])
xlabel('Y, m')
ylabel('Z, m')


%% calculate frequency response in sweetspot
h = waitbar(0,'wait..');

nbrf=100;


fscan=logspace(log10(20),log10(20000),nbrf);
ss_average = zeros(size(fscan));

for nf=1:nbrf

sources{1}.f=fscan(nf);
sourcestruct=preparesource(sources,0);
waitbar(nf/nbrf,h)
world_ss = zeros(sweetspot.n,sweetspot.n);
world_ss=calculatepattern(plane_ss,sourcestruct,world_ss,0);
ss_average(nf)=20*log10(mean(abs(world_ss(:))));
end
close(h)

h=figure(50);

if isoctave
set(h,'position',[1 40 scrsz(3)/3-30 scrsz(4)/3.2-90]);
else
set(h,'OuterPosition',[1 40 scrsz(3)/3 scrsz(4)/3.2]);
end
semilogx(fscan,ss_average)
grid on
title(['Averaged level in sweetspot. Diff is: ',num2str(ss_average(nbrf)-ss_average(1),'%2.1f'),' dB'])
xlabel('Frequency, Hz')
ylabel('SPL, dB')

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-30 09:16

Ok du har kvar en liten rest från linjearrayexemplet. Ta bort detta:
Kod: Markera allt
for mm = 2:5
sources{mm} = sources{mm-1};
sources{mm}.zpos = sources{mm-1}.zpos + 100e-3;
end

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-30 15:17

tack, nu fungerar det. Kan man fördröja källorna i tid?

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-30 22:03

mawes skrev:tack, nu fungerar det. Kan man fördröja källorna i tid?

Bra!
Det går att fördröja en källa via filterfunktionen.
Multiplicera filterfunktionen med exp(-Td*s),Td är fördröjningen i sekunder.
Exempelvis:
Kod: Markera allt
sources{1}.xo = @(s) -s.^2./(s.^2 + w0/Q*s + w0^2);
---»
sources{1}.xo = @(s) -s.^2./(s.^2 + w0/Q*s + w0^2) .* exp(-Td*s);

Det är viktigt att göra elementvis multiplikation med ".*" och inte bara "*".
Vill du bara ha fördröjningen utan delningsfiltret blir det:
Kod: Markera allt
sources{1}.xo = @(s) exp(-Td*s);

mawes
 
Inlägg: 305
Blev medlem: 2015-04-01

Re: Skript för att räkna spridningsmönster

Inläggav mawes » 2016-12-31 16:36

Tack för hjälpen Henrik. Det här är nog mer för någon som förstår programmering. En klåpare som jag blir bara frustrerad.
Jag förstår inte varför jag inte kan ta bort hornet.
Jag förstår inte varför det går bra att ta bort source 7 men inte source 4, jag klippte bara bort allt som det stod sources 7 resp 4 på, är det något mer som ska till? :?:

Användarvisningsbild
HenrikE
 
Inlägg: 671
Blev medlem: 2009-02-11
Ort: Lund

Re: Skript för att räkna spridningsmönster

Inläggav HenrikE » 2016-12-31 19:47

Kämpa på, du är nästan framme :)
Skriptet förväntar sig att källorna ska ligga i ordning utan gap. Du kan inte ta bort 1:an eller 4:an utan att döpa om de andra. Har du tex fyra källor måste de vara nummer 1, 2, 3, 4.

Nästa

Återgå till DIY-forum


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 6 gäster