哪位高人帮我改一下这个MATLAB程序,能运行出结果来,谢谢了,十分火急!!!程序已给出(但有错误)。

2025-01-05 16:35:48
推荐回答(1个)
回答1:

%这是主函数,在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文件放在同一个文件夹。