ADSP仿真作业.docx
《ADSP仿真作业.docx》由会员分享,可在线阅读,更多相关《ADSP仿真作业.docx(12页珍藏版)》请在冰点文库上搜索。
ADSP仿真作业
西安电子科技大学
高级数字信号处理
仿真实验
学院:
通信工程学院
专业:
通信与信息系统
学号:
1501120069
姓名:
张威
任课老师:
阔永红
一仿真题目
GenerateastationaryprocessAR
(2)denotedby
.Supposethat
Here,theparametersof
aredeterminedbyyourselves.Thengenerateawhitenoisewiththevariance
.Thereceivedsignalis
withavariableSNR.PutthereceivedthesignaltoaWiener-filter,thelengthofthefilterisN.Andtheoutputisdenotedby
.
StudyontherelationshipbetweenthecostfunctionandSNRofthesignal,providedthelengthoftheWiener-filterisgiven.
Studyontherelationshipbetweenthecostfunctionandlengthofthefilter,providedtheSNRisgiven.
3.Whenone-steppredictionisdone,howaboutthecostfunctionvarieswiththeSNRandlengthoftheWiener-filter.
二实验原理和方法
本仿真实验主要运用维纳-霍夫方程:
矩阵形式:
滤波器参数:
代价函数
其中:
为输入滤波器的序列x(n)的自相关矩阵,
是s(n)与x(n)的互相关函数。
为s(n)的期望响应功率。
为滤波器的代价函数
本仿真实验通过选取
,利用迭代产生序列s(n)(1
M阶),并随机产生噪声v(n)(1
M阶),可以计算得到x(n)=s(n)+v(n)。
然后计算信噪比SNR,采用如下公式:
其中
。
通过输入序列x(n)通过
计算自相关函数进而生成自相关矩阵R。
接着构造长度为N的Wiener滤波器,求得x(n)与s(n)的互相关函数
,然后再利用维纳-霍夫方程
求出
,由Wiener滤波器对x(n)进行滤波处理,得到相应的s(n),计算代价函数
。
三实验结果
1当N=8,Var_W=1.0时,通过改变Var_V的值得到下表:
Var_V
SNR
P
0.1
20.7786
0.0097
0.2
14.7580
0.0381
0.3
11.2362
0.1358
0.4
8.7374
0.2674
0.5
6.7992
0.4151
0.6
5.2156
0.5703
0.7
3.8767
0.7293
0.8
2.7168
0.8906
0.9
1.6938
1.0540
通过输入以下程序段:
SNR=[20.778614.758011.23628.73746.79925.21563.87672.71681.6938];
P=[0.00970.03810.13580.26740.41510.57030.72930.89061.0540];
plot(SNR,P);title('N=8,Var_W=1.0的情况下信噪比SNR和代价函数P的关系');
xlabel('SNR(dB)');ylabel('P');
可以得到如下图形:
由上面的曲线可以看出:
随着输入信噪比
的增大,代价函数P逐渐变小。
与代价函数的计算式相符合。
2Var_V=0.5,Var_W=1.0,SNR=6.7992dB,通过改变N的值得到下表:
N
P
1
0.1946
2
0.2062
3
0.1977
4
0.1967
5
0.1961
6
0.1981
7
0.1980
8
0.2017
9
0.1980
通过输入以下程序段:
N=[123456789];
P=[0.19460.20620.19770.19670.19410.19810.19800.20170.1980];
stem(N,P);;
title('Var_W=1.0,SNR=6.7992dB的情况下滤波器长度N和代价函数P的关系)');
xlabel('N');ylabel('P');
可以得到如下图形
:
由上面的曲线可以看出:
随着Wiener滤波器的长度
的增加,代价函数P趋于平稳,基本不变。
这说明单靠增加Wiener滤波器的长度
来提高滤波器性能的方法是行不通的。
3
(1)N=8,Var_W=1.0,通过改变Var_V的值得到下表:
Var_V
SNR
0.1
20.7786
0.8439
0.2
14.7580
0.87077
0.3
11.2362
0.9069
0.4
8.7374
0.9489
0.5
6.7992
0.9940
0.6
5.2156
1.0400
0.7
3.8767
1.0857
0.8
2.7168
1.1305
0.9
1.6938
1.1739
通过输入以下程序段:
SNR=[20.778614.758011.23628.73746.79925.21563.87672.71681.6938];
P_f=[0.84390.87070.90690.94890.99401.04001.08571.13051.1739];
plot(SNR,P_f);title('N=8,Var_W=1.0的情况下信噪比SNR和代价函数P的关系');
xlabel('SNR(dB)');ylabel('P_f');
可以得到如下图形:
由上面的曲线可以看出:
随着加性噪声V的标准差Var_V的增大,输入信噪比
减小,代价函数
随之增大。
结果与代价函数的计算式相符合。
(2)Var_V=0.5,Var_W=1.0,SNR=6.7992dB,通过改变N的值得到下表:
N
J
1
0.9251
2
0.9489
3
0.9200
4
0.9028
5
0.9575
6
0.9733
7
0.9736
8
0.9940
9
0.9954
通过输入以下程序段:
N=[123456789];
P_f=[0.92510.94890.92000.90280.95750.97330.97360.99400.9954];
stem(N,P_f);axis([190.81.0]);
title('Var_W=1.0,SNR=6.7992dB的情况下滤波器长度N和代价函数P的关系');
xlabel('N');ylabel('P_f');
可以得到如下图形:
由上面的曲线可以看出:
代价函数
在滤波器长度N=4的时候达到最小值0.9028。
附录
源代码
%--------------------------------------------------
clc;
clear;
%Givenparameters
Var_V=0.1;%Var_V->加性噪声V的标准差
M=100;%M->产生的信号的长度
N=8;%N->Wiener滤波器的长度
Var_W=1.0;
%产生发射信号S(n),取a1=0.5,a2=0.25
randn('state',0);
W=sqrt(Var_W)*randn(1,M);%W->用于在AR模型中产生信号S(n)的白噪声
a1=0.5;
a2=0.25;
S=zeros(1,M);%S->信号的时间序列模型
S
(1)=W
(1);
S
(2)=W
(2);
forn=3:
M;
S(n)=a1*S(n-1)+a2*S(n-2)+W(n);
end;
%产生X(n)
randn('state',1);
V=Var_V*randn(1,M);%V->S(n)经传输后加入的噪声
X(n)=S(n)+V(n);%X(n)->发射信号加入噪声后的接收到的信号,即输入Wiener滤波器的信号
%计算信噪比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);
forn=0:
N;
temp=0;
forc=(n+1):
M;
temp=temp+X(c)*X(c-n);
end;
r(n+1)=(1/M)*temp;
temp=0;
end;
R=zeros(N,N);%R->信号X(n)的自相关矩阵,维数为(N-1)*(N-1)
R(1,:
)=r(1:
N);
forrow=2:
N;
R(row,1)=r(row);
R(row,2:
N)=R(row-1,1:
N-1);
end;
P=zeros(1,N);%P->X(n)与S(n)的互相关
X_temp=X;
fork=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;
Wo=zeros(1,N);
Wo=inv(R)*P';
Wo=Wo';
%由Wiener滤波器进行滤波处理,得到Y(n)
Y_temp=conv(Wo,X);
Y=Y_temp(1:
M);
%计算代价函数J
E=zeros(1,M);
E=S-Y;
P=mean(E.^2);%P->代价函数;
disp('P=');
disp(P)
disp('SNR=');
disp(SNR);
%一步线性预测
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);
%计算J_P
E_P=zeros(1,M);
E_P=S-Y_P;
J_P=mean(E_P.^2);
disp('J_P=');
disp(J_P);
%figure
(2)
%stem(Y_P);
%--------------------------------------------------