Moderator: Redaktörer
nuffe skrev:Vad läser jag???? överger du dipoler??
Jag måste ha missupfattat.
Monolog hoppas jag det inte blir, men tyvärr kommer nog dina frågor att ligga över min kunskap så det kan bli svårt att svara.
Lycka till
Henrik
Kalejdokom skrev:Är det nu man ska leta rätt på en sån där emoticon med en gubbe som äter popcorn?![]()
Hittar ingen...
Tipset är väl bara att ta det lugnt och inte handla för snabbt när man står inför en så genomgripande omdaning. Jag har många gånger låtit mina idéer vila ett tag i huvud och i skissblocket vid sängkanten för att senare ta nya vägar som man inte alls hade i tankarna tidigare. Som med mina senaste (sista?) frontsystem (som dock inte i något avseende kan mäta sig med dina muskelvidunder). Det blev verkligen inte som jag trodde/tänkte från början, men jag är oerhört nöjd och hoppas att det lär dröja innan jag sågar isär dom!
Lycka till med dina funderingar!
solhaga skrev:Men den allra djupaste basen kommer från hörnbasarna, troligtvis slutna lådor.
Kalejdokom skrev:solhaga skrev:Men den allra djupaste basen kommer från hörnbasarna, troligtvis slutna lådor.
Jag har ju samma filosofi i mitt system med två hörnplacerade subbar (XLS med slavbas) som är tänkta att fylla upp där dipolerna faller av. Problemet (?) är att jag inte upplever att dipolerna faller av...![]()
Men återigen, jag spelar nog i en annan division.
%radiation pattern
nv=256; %vertikalt antal pixlar
nh=512; %horisontellt antal pixlar
dx=10e-3; %pixelstorlek i meter
f=20000; %frekvens, Hz
L=320e-3; %källhöjd i meter
x0=-50e-3; %lägg källorna lite utanför vänsterkanten
c=340;
lambda=c/f;
world = zeros(nv,nh);
y=linspace(-nv/2*dx,nv/2*dx,nv);
x=linspace(0,nh*dx,nh);
source = (y>(-L/2)).*(y<(L/2)); %rektangulär källa
%source = gausswin(ny,ny/(L/dx)); %gaussisk källa
h = waitbar(0,'wait..')
for nn=1:nv
waitbar(nn/nv,h)
if source(nn)>1e-2;
for nx = 1:nh
for ny=1:(nv/2)
r=sqrt((x(nx)-x0).^2+(y(ny)-y(nn)).^2);
world(ny,nx)=world(ny,nx)+source(nn).*exp(1i*2*pi*r/lambda)./r;
end
end
end
end
world = world + flipud(world);
close(h)
logimage=20*log(abs((world)));
imagesc(x,y,logimage,[0 60]);
colormap(jet(256))
colorbar
axis image
HenrikE skrev:Har du kikat på Najda?
http://www.waf-audio.com/products.php?pos=1&lang=en
Den har visserligen ingen inbyggd usb-mottagare men det löser man med en enkel usb-i2s-adapter. Sen kan den göra all filtrering och har en 8-kanalig analog volymkontroll efter dac:arna.
Om du vill leka med spridningsmönster själv kan du köra Octave. Det är tillräckligt likt Matlab för att mitt fulskript ska kunna köras omodifierat.
https://www.gnu.org/software/octave/download.html
%radiation pattern v2
nv=256; %vertikalt antal pixlar
nh=512; %horisontellt antal pixlar
dx=10e-3; %pixelstorlek i meter
dxs=5e-3; %källpixelstorlek
f=5000; %frekvens, Hz
L=1000e-3; %källhöjd i meter
x0=-50e-3; %lägg källorna lite utanför vänsterkanten
ns=round(L/dxs); %antal källpunkter
ys=linspace(-L/2,L/2,ns);
c=340;
lambda=c/f;
world = zeros(nv,nh);
y=linspace(-nv/2*dx,nv/2*dx,nv);
x=linspace(0,nh*dx,nh);
source = ones(size(ys))*100/ns; %rektangulär källa
h = waitbar(0,'wait..');
for nn=1:ns
waitbar(nn/ns,h)
if source(nn)>1e-2;
%for nx = 1:nh
for ny=1:(nv/2) %räkna bara övre halvan (undre är symmetrisk)
r=sqrt((x-x0).^2+(y(ny)-ys(nn)).^2);
world(ny,:)=world(ny,:)+source(nn).*exp(1i*2*pi*r/lambda)./r;
end
%end
end
end
world = world + flipud(world); %koperia övre halvan till undre
close(h)
logimage=20*log(abs((world)));
imagesc(x,y,logimage,[0 60]);
colormap(jet(256))
colorbar
axis image
solhaga skrev:nuffe skrev:Vad läser jag???? överger du dipoler??
Jag måste ha missupfattat.
Monolog hoppas jag det inte blir, men tyvärr kommer nog dina frågor att ligga över min kunskap så det kan bli svårt att svara.
Lycka till
Henrik
Var lugn. Frontarna är fortfarande dipoler. För mig är det visuellt viktigt att ha baselement i fronthögtalarna.
Men den allra djupaste basen kommer från hörnbasarna, troligtvis slutna lådor.
error: 'HenrikE2' undefined near line 1 column 1
nuffe skrev:solhaga skrev:nuffe skrev:Vad läser jag???? överger du dipoler??
Jag måste ha missupfattat.
Monolog hoppas jag det inte blir, men tyvärr kommer nog dina frågor att ligga över min kunskap så det kan bli svårt att svara.
Lycka till
Henrik
Var lugn. Frontarna är fortfarande dipoler. För mig är det visuellt viktigt att ha baselement i fronthögtalarna.
Men den allra djupaste basen kommer från hörnbasarna, troligtvis slutna lådor.
Nu är jag lugn......
Vi ska försöka hjälpa till med det lilla vi kan.
Henrik
solhaga skrev:Tackar.
Fick det inte att fungera i Octave dock:error: 'HenrikE2' undefined near line 1 column 1
Är det då den första punkten som skall renderas som går fel?
Det verkar som om Octave inte klarar anonymiseringen (automatiseringen?) av rendering i x-led.
Eller något... Utan en grundförståelse MathLab så blir det bara gissningar från min sida.
Har du möjlighet att avlusa det i Octave?
>> HenrikE
h = -14.239
solhaga skrev:Ja, det första blir att kolla in Kalejdokoms subbasar.
solhaga skrev:HenrikE2 är namnet på filen.
Körning av den första versionen ger>> HenrikE
h = -14.239
Då är det verkligen skumt, har kollat med en hexeditor och båda filerna börjar med 25 72 (%r).
Vid installeringen av Octave så varnades det för att den var otestad i Windows 10.
Får kolla vidare. Jag kan ju utgå från den första versionen och editera in ändringarnafrån den andra bit för bit.
Vem vet, jag kanske lär mig något. Jag är ju faktiskt C-programmerare till yrket.
solhaga skrev:Nja, tankarna har nog funnits där i något år men det var först i och med denna tråden som jag förstod vad jag skulle göra.
joakimfors skrev:Fungerar fint här på Octave 4.2.0rc2.
[ Bild ]
@solhaga:
Har du .m som ändelse på filnamnet. Dvs något i stil med: radpatv2.m
som sen körs i Octave/MATLAB med: > radpatv2
Se även till att du är i samma katalog med Ocatve som filen ligger i. Nuvarande aktiva katalog får du med kommandot 'pwd'.
sportbilsentusiasten skrev:solhaga skrev:Nja, tankarna har nog funnits där i något år men det var först i och med denna tråden som jag förstod vad jag skulle göra.
Så pass!
Nya utmaningar väntar. Spännande.
#radiation pattern v2.5
nv=236; #vertikalt antal pixlar
nh=512; #horisontellt antal pixlar
dx=10e-3; #pixelstorlek i meter
dxs=5e-3; #källpixelstorlek
f=300; #frekvens, Hz
L=1.400; #källhöjd i meter
V=1; # avstånd från främre vägg i meter
S=3; # Avstånd från källa till lyssningsplats.
SS=V + 3; # Position för lyssningsplats.
ns=round(L/dxs); #antal källpunkter
ys=linspace(-L/2,L/2,ns);
x0=V; # Källa
c=340;
lambda=c/f;
world = zeros(nv,nh);
y=linspace(-nv/2*dx,nv/2*dx,nv);
x=linspace(0,nh*dx,nh);
source = ones(size(ys))*100/ns; %rektangulär källa
h = waitbar(0,'wait..');
for nn=1:ns
waitbar(nn/ns,h)
if source(nn)>1e-2;
%for nx = 1:nh
for ny=1:(nv/2) %räkna bara övre halvan (undre är symmetrisk)
r=sqrt((x-x0).^2+(y(ny)-ys(nn)).^2);
world(ny,:)=world(ny,:)+source(nn).*exp(1i*2*pi*r/lambda)./r;
end
%end
end
end
world = world + flipud(world); %kopiera övre halvan till undre
close(h)
logimage=20*log(abs((world)));
imagesc(x,y,logimage,[0 100]);
colormap(jet(256))
colorbar
axis image
# Titel och positioner
amt = line (V,[-L/2 L/2],'LineWidth',2, 'LineStyle',":"); % Position på AMT
sweetspot = line (SS,[(118-108)/100 (118-112)/100],'LineWidth',3,'Color', "white"); % Position på sweetspot
text (0, -1.4, sprintf("Frekvens: %d Hz",f));
text (V-0.1, 1.5, sprintf("AMT"));
text (SS-0.05, 1.5, sprintf("SS"));
%radiation pattern v3
%% definiera rummet
nv=256; %vertikalt antal pixlar
nh=512; %horisontellt antal pixlar
nd=256; %pixlar i djupled
dx=10e-3; %pixelstorlek i meter
%% definiera källan
f=10000; %frekvens, Hz
dxs=5e-3; %källpunktsstorlek
%exempel: plan källa 100x20mm
% Ly=360e-3; %källhöjd i meter
% Lz=80e-3; %källbredd i meter
% Lr=1000; %källans radie
% SR=1000; %krökningsradie
% SA=0; %konisk lutning
%exempel: dome, 26mm diameter, 30mm krökningsradie
% Ly=26e-3; %källhöjd i meter
% Lz=26e-3; %källbredd i meter
% Lr=13e-3; %källans radie
% SR=30e-3; %krökningsradie
% SA=0; %konisk lutning
%exempel: kon, 200mm diameter, 60mm djup
Ly=200e-3; %källhöjd i meter
Lz=200e-3; %källbredd i meter
Lr=100e-3; %källans radie
SR=100; %krökningsradie
SA=60/100; %konisk lutning
%% räkna fram källpunkter
x0=-50e-3; %lägg källorna lite utanför rummet för att undvika division med noll
z0=0; %sidled
nsy=round(Ly/dxs); %antal källpunkter y
tempy=linspace(-Ly/2,Ly/2,nsy);
nsz=round(Lz/dxs); %antal källpunkter z
tempz=linspace(-Lz/2,Lz/2,nsz);
[ys, zs] = meshgrid(tempy,tempz);
ys=ys(:);
zs=zs(:);
rs=sqrt(ys.^2 + zs.^2); %radie
xs=x0+sqrt(SR^2-rs.^2)-SR + (rs-Lr)*SA; %räkna fram djup
ints = ones(size(ys)); %källintensitet
mask=rs<Lr; %cirkulär källa
rs=rs(mask);
xs=xs(mask);
ys=ys(mask);
zs=zs(mask);
ints=ints(mask);
ints=1000*ints/sum(ints);
ns=length(ints);
%plotta källpunkterna
figure(1)
plot3(xs,ys,zs,'.')
axis equal
%% skapa matriser och vektorer
c=340;
lambda=c/f;
world_v = zeros(nv,nh);
world_h = zeros(nd,nh);
y=linspace(-nv/2*dx,nv/2*dx,nv);
x=linspace(0,nh*dx,nh);
z=linspace(-nd/2*dx,nd/2*dx,nd);
%% räkna vertikal spridning
h = waitbar(0,'wait..');
[xg, yg]=meshgrid(x,y);
for nn=1:ns
waitbar(nn/ns,h)
r=sqrt((xg-xs(nn)).^2+(yg-ys(nn)).^2+zs(nn).^2);
world_v=world_v+ints(nn).*exp(1i*2*pi*r/lambda)./r.^2;
end
close(h)
logimage_v=20*log(abs((world_v)));
figure(2)
imagesc(x,y,logimage_v,[0 120]);
colormap(jet(256))
colorbar
axis image
title(cstrcat('Vertikal spridning, ',num2str(f), ' Hz'))
%% räkna horisontell spridning
h = waitbar(0,'wait..');
[xg, zg]=meshgrid(x,z);
for nn=1:ns
waitbar(nn/ns,h)
r=sqrt((xg-xs(nn)).^2+(zg-zs(nn)).^2+ys(nn).^2);
world_h=world_h+ints(nn).*exp(1i*2*pi*r/lambda)./r.^2;
end
close(h)
logimage_h=20*log(abs((world_h)));
figure(3)
imagesc(x,z,logimage_h,[0 120]);
colormap(jet(256))
colorbar
axis image
title(cstrcat(''Horisontell spridning, ',num2str(f), ' Hz'))
HenrikE skrev:Ser bra ut! Tänkte bara nämna ifall någon undrar. Skriptet räknar på monopoler, så dipolutsläckningen är inte alls med. Reflexer från golv och tak är det inte heller.
HenrikE skrev:Jag lovade ju en ny version som klarar tredimensionella källor. Den kommer här:
Den klarar att räkna på plan, sfärisk (typ domediskant) och konisk källa. Formen kan vara rektangulär eller cirkulär. Jag har lagt in tre tre exempel för att visa hur man definierar de olika fallen. Man får både vertikal och horisontell spridning.
Exempel från kon:
title(cstrcat(''Horisontell spridning, ',num2str(f), ' Hz'))
solhaga skrev:Jag kommer naturligtvis inte bygga lådorna som just rektangulära lådor, det blir väl mycket parallella ytor.
De skall ju vara i hörn, så här gäller det att var lite innovativ vad det gäller lådans form, stagning mm.
darkg skrev:solhaga skrev:Jag kommer naturligtvis inte bygga lådorna som just rektangulära lådor, det blir väl mycket parallella ytor.
De skall ju vara i hörn, så här gäller det att var lite innovativ vad det gäller lådans form, stagning mm.
Är de parallella ytorna ett verkligt bekymmer vid så låga frekvenser? Eller menar du "bara" estetiskt-möbelpraktiskt?
solhaga skrev:Simulera spridning i 3D, du är verkligen veckans hjälte.
Har precis kört ditt 3D-skript. Så himla grymt!
Skall snarast anpassa det efter mina parametrar.
Fick ett lätt åtgärdat syntaxfel dock:title(cstrcat(''Horisontell spridning, ',num2str(f), ' Hz'))
En fnutt för mycket bara innan Horisontell.
solhaga skrev:@HenrikE:
Jag har försökt ett tag, men det är några saker jag inte kommer till rätta med i det nya 3D-skriptet.
Jag har ju ett rektangulär element, men det verkar som om elementet blir dubbelt så högt jämfört med V2.
Det är ju lätt fixat, förstås. Det kanske har något att göra med att programmet nu inte speglar upp ena halvan.
solhaga skrev:Vad det gäller den horisontella spridningen så har jag inget att jämföra med, men detta borde väl vara rätt för ett 6 cm brett element:
[ Bild ]
solhaga skrev:Det vore förstås häftigt om man kunde rendera två källor och då med valbar toe-in.
Användare som besöker denna kategori: Inga registrerade användare och 18 gäster