Частота и время отклика фильтра
Я должен реализовать наименьших квадратов частот инвариантную для формирователя луча массива 8 громкоговорителя 14.5cm разнесением друг от друга от 1 кГц до 8 кГц, чтобы достичь максимального лепестка в направлении 6 градусов и остановки лепестка при -6 градусов с нулевой шириной около 9 градусов. с Matlab и справочной документа я разработал этот Beamformer с этим кодом:
%% inizializzazione variabili e definizione risoluzione di discretizzazione
teta=-90:90; %angle in degrees
N=8; %number of sensors
freq=1000:3:8000; %frequenze in hertz
M=length(teta);
P=length(freq);
c=3e08; %speedlight
%% parametri progettuali
teta_target=6;
teta_stop=-6;
null_width=9;
%% inizializzazione dell'array e delle varie posizioni dei sensori rispetto al centro dell'array
sensor_spacing=14.5; %cm
d=sensor_spacing/2; %distance first sensors from the center of the array
sensor_pos=[-(N-1)*d,-(N-3)*d,-(N-5)*d,-(N-7)*d,(N-7)*d, (N-5)*d,(N-3)+d,(N-1)*d];
%% inizializzazione matrici per ottimizzazione
D=zeros(M,N);
G=zeros(M,N,P);
weights=zeros(N,P);
%%
%%definizione matrice [dn*cos(teta/c)] propagation delay tau
for m=1:M
for n=1:N
D(m,n)=sensor_pos(n)*cos(teta(m)/c);
end
end
%%
%definizione matrice G
for j=1:P
G(:,:,j)=exp(-1i*freq(j)*D);
end
%definizione di Gstop
G_stop=zeros(null_width,N,P);
teta_stop_index=find(teta==teta_stop);
flag=0;
%seleziono dalla matrice G le righe corrispondenti all'angolo di stop e a
%quelle adiacenti in base all'ampiezza del lobo di nullo definita in fase
%progettuale
for i=1:(null_width+1)
G_stop(i,:,:)=G(teta_stop_index-null_width+flag,:,:);
flag=flag+1;
end
%%
%definizione desiderate array response b_hat --> ovunque zero tranne che
%un impulso nell'indice che corrisponde all'angolo desiderato
b=zeros(M,1);
teta_target_index=find(teta==teta_target);
i=1;
shape=[0.2360,0.4719,0.7079,0.9900,1.0000,0.9900,0.7079,0.4719,0.2360];
for j=(teta_target_index-4):(teta_target_index+4)
b(j)=shape(i);
i=i+1;
end
%%
%%optimization problems
for f = 1:P
cvx_begin quiet
variable wf(N) complex
minimize(norm(G(:,:,f)*wf - b, 2))
subject to
norm(G_stop(:,:,f)*wf) <= 0.01;
cvx_end
weights(:,f)=wf;
end
Теперь у меня есть в окончательной переменной "веса"
- 8 рядов (по одному на каждого динамика)
- P столбцы (по одной на каждую частоту)
и каждая ячейка представляет собой сложный коэффициент. Как я могу построить частотную характеристику и временную характеристику этих фильтров, а также суммарную характеристику массива в полярной области, чтобы показать правильный угол?