d=[]
for k=4:12
H=hilb(k)
L=diag(sqrtm(H))
F=inv(L)*H*inv(L) %%%% 错误之处 %%%%
%%%%% 错误原因:L不是方阵,不可逆,所以inv(L)报错!%%%%%%
c=[c,cond(H)]
d=[d,cond(F)]
end
lc=log(d/c)
n=4:12
p=polyfit(n,lc,1)
plot(n,lc,'*',n,polyval(p,n))
residdure=c-exp(polyval(p,n))
1 新建m文件,把函数function [ray]=ray_sig(zhongzi)贴进去,保存;
2 新建m文件,把函数
function [p]=wubitlv(snr_in_dB,Lc,W0)贴进去,保存;
3 在command window里输入
echo on
Lc=20
W0=1%窄带干扰信号的中心频率
SNRindB=0:2:30
for i=1:length(SNRindB)
smld_err_prb(i)=wubitlv(SNRindB(i),Lc,W0)
echo off
end
% 绘制仿真结果曲线,误码率用对数表示
echo on
semilogy(SNRindB,smld_err_prb)
axis([0,10,0,10^-1])
xlabel('信噪比Eb/N0')
ylabel('误码率Pb')
title('DS系统在窄带干扰下的误码率曲线')
%%%即可,可以出图!
%这是主函数,在matlab中建个m文件复制进去,保存echo on
Lc=20%每个信息比特为对应的PN码片数
A1=3%第一个正弦干扰信号的幅度
A2=7%第二个正弦干扰信号的幅度
A3=12%第三个正弦干扰信号的幅度
A4=0%无正弦干扰情况下
W0=1%正弦干扰信号的频率
SNRindB=0:2:30%要求的信噪比范围
%计算在不同幅度正弦干扰信号的误码率
for i=1:length(SNRindB)
smld_err_prb1(i)=wubitlv(SNRindB(i),Lc,A1,W0)
smld_err_prb2(i)=wubitlv(SNRindB(i),Lc,A2,W0)
smld_err_prb3(i)=wubitlv(SNRindB(i),Lc,A3,W0)
echo off
end
%计算在无正弦干扰信号情况下的误码率
echo on
SNRindB4=0:1:8
for i=1:length(SNRindB4)
mld_err_prb4(i)=wubitlv(SNRindB(i),Lc,A4,W0)
echo off
end
%绘制仿真结果曲线,误码率用对数表示
semilogy(SNRindB,smld_err_prb1,SNRindB,smld_err_prb2,SNRindB,smld_err_prb3,SNRindB4,smld_err_prb4)
xlabel('信噪比Eb/N0')
ylabel('误码率Pb')
title('DS系统在不同振幅的正弦干扰下的误码率曲线')
%这是子函数,在matlab中建立新的m文件,复制进去,保存,文件名必须为wubitlv.m
%子函数:
%计算误码率的m文件
function [p]=wubitlv(snr_in_dB,Lc,Ac,W0)
snr=10^(snr_in_dB/10)
sgma=1
Eb=2*sgma^2*snr%每位信息比特的能量
E_chip=Eb/Lc%每个码片的能量
N=10000%待传输的信息符号数
num_of_err=0
%生成一个待传的随机信息符号
for i=1:N
temp=rand
if (temp<0.5)
data=-1
else
data=1
end
% 将一位信息比特重复LC次
for j=1:Lc
repeat_data(j)=data
end
% 生成PN码
for j=1:Lc
temp=rand
if (temp<0.5)
pn_seq(j)=-1
else
pn_seq(j)=1
end
end
% 待传输的扩频信号
trans_sig=sqrt(E_chip)*repeat_data.*pn_seq
noise=sgma*randn(1,Lc)%高斯白噪声
% 生成单频率正弦干扰信号
n=(i-1)*Lc+1:i*Lc
interference=Ac*sin(W0*n)
%接收机接收的信号
rec_sig=trans_sig+noise+interference
temp=rec_sig.*pn_seq%进行解扩
%进行输出判决
decision_variable=sum(temp)
if (decision_variable<0)
decision=-1
else
decision=1
end
if (decision~=data)
num_of_err=num_of_err+1%误码计数
end
end
p=num_of_err/N%误码率计数器
%%然后运行主程序,上述两个m文件放在同一个文件夹。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)