美文网首页
ADSP简单题一步到位

ADSP简单题一步到位

作者: withism | 来源:发表于2017-12-14 00:12 被阅读14次

    %---------西安电子科技大学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');

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

    相关文章

      网友评论

          本文标题:ADSP简单题一步到位

          本文链接:https://www.haomeiwen.com/subject/ehutwxtx.html