ADSP简单题一步到位

2017-12-14  本文已影响14人  withism

%---------西安电子科技大学ADSP仿真作业第一题-----%

%------本题目要填写四个表格,每个表格附加一个图像--%

%------填写表格的时候,要改动四个代码块,在程序中标出来了--------%

%--表格1和表格3的填写需要取消注释奇数代码块1和3,注释掉代码块2和4-%

%--表格2和表格4的填写需要取消注释奇数代码块2和4,注释掉代码块1和3-%

%-------自定义数据集可以根据自己的喜好随意设置----%

%---------作者:小何-------------------------%

%---------请关注【科研果园】微信公众号----------%

%---------打开微信搜索"outputing"------------%

clear all;

clc;

%---------自定义的数据,a1,a2,Vw,M=信号长度----%

a1=0.1997;

a2=0.313;

Vw=0.19970313;

M=10000;

Vv_set=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0];

N_set=[1 2 3 4 5 6 7 8 9 10];

%--------------输出的预定义数据集合------------%

SNR_data=zeros(1,10);

cost_data=zeros(1,10);

cost_1_data=zeros(1,10);

for i=1:10

%-代码块1:第1个表和第3个表,用这个,注释掉下面的代码块2---%

% Vv=Vv_set(i);N=8;

%-代码块2:第2个表和第4个表,用这个,注释掉上面的代码块1---%

N=N_set(i);Vv=0.5;

%------------------这下面的代码不要改动--------------%

% 产生发射信号S(n)

randn('state',0);

W=sqrt(Vw)*randn(1,M);

S=zeros(1,M);

S(1)=W(1);

S(2)=W(2);

for n=3:M

S(n)=a1*S(n-1)+a2*S(n-2)+W(n);

end

%figure;n=1:M;stem(n,S);

%title('The source signal S(n)');xlabel('n');ylabel('S(n)');

%-----------产生噪声信号X(n)=S(n)+V(n)--------%

randn('state',1);

V= Vv*randn(1,M);

X=S+V;

%figure;n=1:M;stem(n,X(n));

%title('The received signal X(n)');xlabel('n');ylabel('X(n)');

%-----------计算信噪比SNR--------------------%

S_Power=mean(S.^2);

N_Power=mean(V.^2);

SNR=10*log10(abs(S_Power/N_Power));%  SNR->信噪比

%-----------构造长度为N的Wiener滤波器----------%

r=zeros(1,N+1);

for n=0:N

temp=0;

for c=(n+1):M

temp=temp+X(c)*X(c-n);

end

r(n+1)=(1/M)*temp;

temp=0;

end

%r(1)=(1/M)(X(1)*X(1)+(X(2)*X(2)+(X(3)*X(3)+...+(X(M)*X(M))

%r(2)=(1/M)(X(2)*X(1)+(X(3)*X(2)+(X(4)*X(3)+...+(X(M)*X(M-1))

%r(3)=(1/M)(X(3)*X(1)+(X(4)*X(2)+(X(5)*X(3)+...+(X(M)*X(M-2))

%r(4)

%r(5)

%...

%r(n+1)=(1/M)(X(n+1)*X(1)+(X(n+2)*X(2)+(X(n+3)*X(3)+...+(X(M)*X(M-n))

%R为信号X(n)的自相关矩阵,维数为(N-1)*(N-1)

%R是由r构造而成的N*N的矩阵

R=zeros(N,N);

R(1,:)=r(1:N);

for row=2:N

R(row,1)=r(row);

R(row,2:N)=R(row-1,1:N-1);

end

%-----------P是X(n)与S(n)的互相关---------%

P=zeros(1,N);

X_temp=X;

for k=0:N-1

X_temp(1:M-k)=X(1+k:M);

X_temp(M-k+1:M)=0;

P(k+1)=1/M*X_temp*S';

end

Wiener=zeros(1,N);

Wiener=inv(R)*P';

Wiener=Wiener';

%----由Wiener滤波器进行滤波处理,得到Y(n)---%

Y_temp=conv(Wiener,X);

Y=Y_temp(1:M);

%-----------计算代价函数cost-------------%

E=zeros(1,M);

E=S-Y;

cost=mean(E.^2);

%-----------一步线性预测----------------%

N_P=N;

A_P=zeros(N_P);

r_p=zeros(1,N_P);

r_p=r(2:N+1);

A_P=A_P';

A_P=inv(R)*(r_p');

Y_P_temp=conv(A_P,X);

Y_P=zeros(1,M);

Y_P(3:M)=Y_P_temp(1:M-2);

%-----------计算一步线性预测后的cost-----%

E_P=zeros(1,M);

E_P=S-Y_P;

cost_1=mean(E_P.^2);

SNR_data(i)=SNR;

cost_data(i)=cost;

cost_1_data(i)=cost_1;

end

%-代码块3:第1个表和第3个表,用这个,注释掉下面的代码块4---%

% disp('a1=');disp(a1);

% disp('a2=');disp(a2);

% disp('N=');disp(N);

% disp('Var_v=');disp(Vv_set);

% disp('SNR=');disp(SNR_data);

% disp('cost_set=');disp(cost_data);

% disp('cost_1_set=');disp(cost_1_data);

% figure;

% plot(SNR_data,cost_data);title('The relationship between cost funtion & SNR');

% xlabel('SNR(dB)');ylabel('The cost');

% figure;

% plot(SNR_data,cost_1_data);title('The relationship of SNR & cost after step1 prediction');

% xlabel('SNR(dB)');ylabel('One cost after one step prediction');

%------------------------------------------%

%-代码块1:第2个表和第4个表,用这个,注释掉上面的代码块3---%

disp('a1=');disp(a1);

disp('a2=');disp(a2);

disp('Var_v=');disp(Vv);

disp('Var_w=');disp(Vw);

disp('N=');disp(N_set);

disp('SNR=');disp(SNR);

disp('cost_set=');disp(cost_data);

disp('cost_1_set=');disp(cost_1_data);

figure;

stem(N_set,cost_data);

title('The relationship of Filter length N & the cost');

xlabel('Filter length N');ylabel('The cost');

figure;

stem(N_set,cost_1_data);

title('The relationship of Filter length N & the cost_1');

xlabel('Filter length N');ylabel('The cost_1');

%------------------------------------------%

上一篇下一篇

猜你喜欢

热点阅读