登录论坛

查看完整版本 : [MATLAB通信系统] 调用function出错,求指导


朋没友
2019-04-09, 20:26
function x=mysource(N,P_0)%产生长度为N的1,0序列,其中0发生的概率为P_0
x=rand(1,N)>P_0;
%然后实现一个加性高斯白噪声信道,在每个比特样值上加入方差为2的高斯独立噪声样值.
function y=mychannel(x,sigma2)
%x为输入信道的信号序列,sigma2为信道中高斯噪声样值的方差
%y是输出信道的信号序列
y=x+sqrt(sigma2).*randn(size(x))
%在接收机中对信道传输来的混杂了噪声的样值进行判决解码,即
function z=myreceiver_No1(y,panjuemenxian)
%y为接收机接收的序列比特样值
%panjuemenxian为设定的判决门限
%z为判决输出
z=(y>panjuemenxian);%判决输出
%下面就利用我们所设计的信源,信道和接收机函数来进行虚拟通信实验,得出误码率并与理论公式的计算结果进行比较
clear;
%产生10万比特1,0等概的幅度为A=1的二进制序列
N=100000;%当仿真1000bit就统计误码率时,可将改为M=1000
P_0=0.5;A=1;
A_divby_sigma_dB=-5:0.5:15; %A/sigma的分贝值
A_divby_sigma_dB=10.^(A_divby_sigma_dB/20);%由于是电压比,所以除以20
sigma2=(A./divby_sigma).^2; %计算出相应的噪声方差
for k=1:length(A_divby_sigma_dB)%对各种A/sigma值进行实验
x=mysource(N,P_0); %信源信号产生
y=mychannel(x,sigma2(k)); %信号通过信道
z=myreceiver_No1(y,A/2);%最佳门限判决接收机
Pe(k)=sum(abs(x-z))/N; %统计实验得到的误比特率
Pe_lilunjisuan(x)=0.5*erfc(A/(2+sqrt(2*sigma2(k))));%理论计算值
end
semilogy(A_divby_sigma_dB,Pe,'o', A_divby_sigma_dB,Pe_lilunjisuan);
xlabel('A/\sigma_n dB');
ylabel('bit error rate');