/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
Simulering af lydbølgers udbredelseshastig~
Fra : Jakob Nielsen


Dato : 07-05-05 16:26

En del snak i tråden "tracing på lydbølger" er ledt til et demoprogram, der
ved numerisk integration beregner udbredelsen af trykbølger i et medium.

Et netværk af vægte med en vis masse er forbundet, så hver vægt er forbundet
til sine 8 naboer (undtaget ved rummets kanter). Netværket er udbredt i 2D
og vægtene kan bevæge sig langs den 3. dimension, men er fikseret i 2D.

En impuls genereres ved at flytte en vægt en vis distance ud langs det
tredie akse og "slippe den".
I næste tidsskridt vil dens 8 naboer påvirkes af en kraft der trækker dem
opad, mens den trukne vægt påvirkes af en tilsvarende kraft som trækker den
ned. I det følgende tidsskridt påvirkes hver af de 8 naboers naboer etc.

Det giver fuld korrekt opførsel (så vidt jeg kan se) for alt andet end
udbredelseshastigheden.

Problemet er at hvis jeg kører en iteration for hver 0.1s, så vil bølgen
altid udbrede sig med 10 vægte pr. sekund. Det uanset hvilke vægte og
fjedrekonstanter man anvender. Små vægte og store fjederkonstanten medfører
at en større del af energien udbredes fra iteration til iteration, men
bølgefronten vil altid have en hastighed på 1 pr. iteration.

Har nogen her måske et forslag til hvordan man kan tilrette modellen, så man
kan justere bølgernes hastighed i forskellige medier? Man kunne muligvis
regne med forskellige tidsskridt for forskellige materialer, men det virker
som et meget forsimplet hack.



 
 
Martin C. Petersen (07-05-2005)
Kommentar
Fra : Martin C. Petersen


Dato : 07-05-05 19:39

Jakob Nielsen wrote:
> En del snak i tråden "tracing på lydbølger" er ledt til et demoprogram, der
> ved numerisk integration beregner udbredelsen af trykbølger i et medium.
>
> Et netværk af vægte med en vis masse er forbundet, så hver vægt er forbundet
> til sine 8 naboer (undtaget ved rummets kanter). Netværket er udbredt i 2D
> og vægtene kan bevæge sig langs den 3. dimension, men er fikseret i 2D.
Lydbølger er longitudinale (svingninger langs udbredelsesretningen), men
du modellerer transversale bølger (svingninger vinkeltret på
udbredelsesretningen).


> Har nogen her måske et forslag til hvordan man kan tilrette modellen, så man
> kan justere bølgernes hastighed i forskellige medier? Man kunne muligvis
> regne med forskellige tidsskridt for forskellige materialer, men det virker
> som et meget forsimplet hack.
Fjederstyrken og loddernes masse bestemmer udbredelseshastigheden.

Hvis du vil fastholde din simulering, kan du jo prøve at beskrive mere
detaljeret hvordan du udregner tingene..


Martin

Jakob Nielsen (07-05-2005)
Kommentar
Fra : Jakob Nielsen


Dato : 07-05-05 20:49

> Lydbølger er longitudinale (svingninger langs udbredelsesretningen), men
> du modellerer transversale bølger (svingninger vinkeltret på
> udbredelsesretningen).

Vægtens svingning langs det tredie akse er ikke som sådan en svinging. Dens
position er udtryk for lufttrykket. Det vil sige at en position over
nulpunktet er overtryk, mens en position under nulpunktet er undertryk.
Fjedrene kan dermed siges at forbinde forskellige lufttryk. Deres effekt er
altså at udligne trykket mellem nabofelterne.



Ulrik Smed (08-05-2005)
Kommentar
Fra : Ulrik Smed


Dato : 08-05-05 00:07

Jakob Nielsen wrote:

> Har nogen her måske et forslag til hvordan man kan tilrette
> modellen, så man kan justere bølgernes hastighed i forskellige
> medier?

I min version her, som godt nok kun medtager 4 naboer i stedet for 8, der
virker det at dividere med en konstant efter udtrykket i de to loops:

Private Sub simwave()
For y = 1 To ysize - 1
For x = 1 To xsize - 1
h(x, y) = h(x, y) + ((p(x - 1, y) + p(x + 1, y) + p(x, y - 1) + p(x, y +
1)) / 4 - p(x, y))
Next x
Next y
For y = 1 To ysize - 1
For x = 1 To xsize - 1
p(x, y) = p(x, y) + h(x, y)
Next x
Next y
End Sub

Man behøver kun gøre det det ene sted, hvis man f.eks. ændrer linien
p(x, y) = p(x, y) + h(x, y)
til
p(x, y) = p(x, y) + h(x, y) / 10
så falder udbredelseshastigheden med sqr(10).

--
Ulrik Smed
Aarhus, Denmark



Jakob Nielsen (08-05-2005)
Kommentar
Fra : Jakob Nielsen


Dato : 08-05-05 06:29

> I min version her, som godt nok kun medtager 4 naboer i stedet for 8, der
> virker det at dividere med en konstant efter udtrykket i de to loops:

Ja, men du får stadig svært ved at styre udbredelseshastigheden, så vidt jeg
kan se.
Hvis du eksempelvis deler med to så får naboerne halv energi efter første
iteration, og efter endnu en iteration får deres naboer halvdelen.
Det betyder (så vidt jeg forstår dit loop) at efter n iterationer kan du se
energi være blevet overført til et punkt som ligger n væk fra startimpulsen.

Hvis vi siger at afstanden mellem to vægte repræsenterer 1m og du kører en
iteration for hvert 1s, så vil bølgen brede sig med 1m/s. Hvis dine
iterationer svarer til 0.1s, så vil hastigheden nu være 10m/s.

Konstanten ændrer ikke ved frontens hastighed. Den ændrer kun hvor hurtigt
energien følger med.

Hvordan kan man nu i samme simulation definere to materialer med forskellig
udbredelseshastighed for bølger? Skal man da køre et forskelligt antal
iterationer mellem de forskellige materialer?
Eksempelvis køre tre iterationer for det ene materiale før man kører en for
det andet?
Det vil give de rigtige hastigheder (ved valg af passende dt), men det
virker som en underlig snydeløsning.

Hvis jeg misforstod dine loops, så må du endelig sige til. Jeg kan nu ikke
lige se hvordan en energidivision med en konstant kan ændre på at efter n
iterationer er det muligt at måle en påvirkning af en vægt som er n fjedre
væk.



Jakob Nielsen (08-05-2005)
Kommentar
Fra : Jakob Nielsen


Dato : 08-05-05 07:06

> Skal man da køre et forskelligt antal iterationer mellem de forskellige
> materialer?

Man kunne måske også øge afstanden mellem vægtene (forlænge fjedrene) i
materialer med meget hurtig udbredelseshastighed?
Er afstanden den dobbelte, så vil hastigheden også være den dobbelte.



Ulrik Smed (08-05-2005)
Kommentar
Fra : Ulrik Smed


Dato : 08-05-05 10:04

Jakob Nielsen wrote:

> Ja, men du får stadig svært ved at styre
> udbredelseshastigheden, så vidt jeg kan se.
> Hvis du eksempelvis deler med to så får naboerne halv energi
> efter første iteration, og efter endnu en iteration får deres
> naboer halvdelen.
> Det betyder (så vidt jeg forstår dit loop) at efter n
> iterationer kan du se energi være blevet overført til et punkt
> som ligger n væk fra startimpulsen.

Det er egentlig rigtig nok. Bølgefronten bliver blødere. Men bølgen holder
sig stadig pænt samlet, så energien ikke tværes ret meget ud over tid. Den
energi der kan ses n vægte væk er forsvindende, men det er da godt nok en
lille fejl. I praksis synes jeg det virker rigtig godt som styring af
hastigheden.

> Hvordan kan man nu i samme simulation definere to materialer
> med forskellig udbredelseshastighed for bølger? Skal man da
> køre et forskelligt antal iterationer mellem de forskellige
> materialer?

Man kunne prøve med et array af konstanter som man dividerer med, det tror
jeg faktisk ville virke. Man får sikkert også reflektioner og afbøjning fra
overgange mellem forskellige divisorer, fordi der opstår et impedansknæk.
Ligesom når lys passere overgange mellem f.eks. vand og glas.

> Hvis jeg misforstod dine loops, så må du endelig sige til. Jeg
> kan nu ikke lige se hvordan en energidivision med en konstant
> kan ændre på at efter n iterationer er det muligt at måle en
> påvirkning af en vægt som er n fjedre væk.

Energien i bølgefronten bliver hurtigt reduceret ned til nul efter nogle
iterationer. Den 'rigtige' bølge forbliver kraftig og dominerende, men
langsommere. Prøv at køre det, det virker ret overbevisende.

--
Ulrik Smed
Aarhus, Denmark



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste