天天看點

Matlab鏡像模組化産生嘯叫信号,【!!!】将一個信号生成帶有回報嘯叫的信号

本帖最後由 wx_K109bN7b 于 2015-5-30 13:08 編輯

g=100; % 統計仿真次數為g

N=1024; % 輸入信号抽樣點數N

k=128; % 時域抽頭LMS算法濾波器階數

pp=zeros(g,N-k); % 将每次獨立循環的誤差結果存于矩陣pp中,以便後面對其平均

u=0.0002;

for q=1:g

t=1:N;

a=1;

s=a*sin(0.05*pi*t); % 輸入單頻信号s

figure(1);

subplot(311)

plot(t,real(s)); % 信号s時域波形,real實數部分

title('信号s時域波形');

xlabel('n');

ylabel('s');

axis([0,N,-a-1,a+1]); % 設定坐标軸範圍

xn=awgn(s,5); % 加入均值為零的高斯白噪聲,信噪比為5dB

% 設定初值

y=zeros(1,N); % 輸出信号y

y(1:k)=xn(1:k); % 将輸入信号xn的前k個值作為輸出y的前k個值

w=zeros(1,k); % 設定抽頭權重初值

e=zeros(1,N); % 誤差信号

% 用LMS算法疊代濾波

for i=(k+1):N

XN=xn((i-k+1):(i));

y(i)=w*XN';

e(i)=s(i)-y(i);

w=w+u*e(i)*XN;

end

pp(q,:)=(e(k+1:N)).^2;

end

subplot(312)

plot(t,real(xn)); % 信号s時域波形

title('信号s加噪聲後的時域波形');

subplot(313)

plot(t,real(y)); % 信号s時域波形

title('自适應濾波後的輸出時域波形');

for b=1:N-k

bi(b)=sum(pp(:,b))/g; % 求誤差的統計平均

end

figure(2); % 算法收斂曲線

t=1:N-k;

plot(t,bi,'r');

hold on % 将每次循環的圖形顯示結果儲存下來

上面是自适應濾波器LMS消除信号中摻雜的高斯白信号的代碼。

上面這個代碼xn是對信号s添加高斯白噪聲後的信号,但是我現在想要研究關于回報嘯叫的問題,也就是想在這個代碼的基礎上,添加一個回報路徑,可以産生回報嘯叫。(想讓xn是發生回報嘯叫情況後的信号)但是水準實在太差。。。。求助大神幫忙。。。