フィルターのクリア

beamforming a signal with random noise

6 ビュー (過去 30 日間)
zozo
zozo 2011 年 12 月 15 日
コメント済み: Harriet Vickers 2016 年 11 月 28 日
This is my code for beamforming:
close all
clear all
clc
m = 8;
signal=(sin(20* pi/180));
ad = exp (-1j * pi *[0: m-1]'*signal);% array response vector in the direction of desired signal. expect the direction of the array response vector
wop = ad;
thetas = [-90:90];
tm = thetas * pi/180;
am = exp (-1j * pi * [0: m-1]'* (sin (tm)));
A = abs (wop'* am);% array response array response
A = A / max (A);
figure, polar (tm, A)
A = 10 * log10 (A);% log figure log plot
title ('Normalized magnitude response array polar diagram, eight array elements')
figure, plot (thetas, A);
title ('eight microphones');
xlabel ('angle[degrees]');
ylabel ('Normalized Beam Power[dB]');
grid on
It works when signal is just a sinusoid. But does'nt work when i add noise to it, that is:
signal=(sin(20* pi/180)+randn(size(1000,1)));
What is the reason? How can i improve my code to get the result for above signal corrupted with noise?
  1 件のコメント
vijay
vijay 2013 年 10 月 31 日
do u have code with noise signal ...please send me ...asap i need it urgent

サインインしてコメントする。

採用された回答

Honglei Chen
Honglei Chen 2011 年 12 月 15 日
Try the following code:
t = (0:999)'/1000;
s = sin(2*pi*t);
ad = exp(-1i*pi*(0:7)*sin(30*pi/180));
x = s*ad;
y = x*ad';
subplot(211),plot(t,s),subplot(212),plot(t,real(y));
It defines a signal, s, modulate it to simulate the return, x, for an 8-element half-wavelength ULA when the source is at 30 degrees, and then beamformed it to form output, y.
  1 件のコメント
Harriet Vickers
Harriet Vickers 2016 年 11 月 28 日
How would you implement the noise signal into this solution?

サインインしてコメントする。

その他の回答 (2 件)

Honglei Chen
Honglei Chen 2011 年 12 月 15 日
Is your signal sin(20*pi/180) and also impinging from 20 degrees? I just want to make sure this is what you want. It looks like that you are putting signal itself in to the steering vector which is incorrect. The steering vector should contain sin(theta0) where theta0 is your signal incoming direction.
HTH
  1 件のコメント
zozo
zozo 2011 年 12 月 15 日
yes..u r right! my signal should impinge from theta0 onto the array. How can i achieve it in my code?

サインインしてコメントする。


Honglei Chen
Honglei Chen 2011 年 12 月 15 日
Hi zozo,
It seems that you are using half wavelength spacing. If that's the case, your steering vector should be
ad = exp (-1j * pi *[0: m-1]'*sin(theta0*pi/180))
There is an issue in your signal definition
signal=(sin(20* pi/180)+randn(size(1000,1)));
Because you basically added a scalar onto the noise vector. You need a signal vector to combine with noise vector. If you really have a signal vector (assume a column vector), you can do
x = signal*ad
to get the signal at each element.
It is worth noting that what you do here is really narrowband and assuming plane wave. If you are doing audio signal, then it is by nature wideband and from your other post, you are using spherical wavefront. Therefore make sure you take these things into consideration when interpreting the result.
HTH
  1 件のコメント
zozo
zozo 2011 年 12 月 15 日
Iam suppose to do for audio signal(for other post). but my first task is to simulate a signal which is close to audio (by adding white noise) to a plane sinusoidal signal. Then I need to perform beamforming using the array geometry i used in my previous post.
How can i place a signal and sumulate beamforming(DSB) from my array? please give me a idea!!

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by