目前手头有两码在awgn信道下的仿真,也有各部分的函数程序,但不会改瑞利信道的,不知道应该是在主程序下手改还是变动添加函数子程序,求指导。
你最终是想实现什么需求?
瑞利信道Matlab仿真程序
https://www.csdn.net/tags/MtTaAg2sMTk2NjktYmxvZwO0O0OO0O0O.html
N=10000; % 序列长度
SNR=-5:5;
M=2;
tx=randi([0,M-1],N,1); % 原始信号
pskSig=pskmod(tx,M); % BPSK调制
%% 方法一:瑞利信道
rayleighChan=comm.RayleighChannel(); % 调用自带的瑞利信道
fadeSig = rayleighChan(pskSig);
%% 方法二:瑞利序列
a=zeros(N,1); % 存放随机数的数列
n=0; % 计数器
% 瑞利分布表达式
sigma=1;
f=@(x) (x.*exp(-x.^2/2/sigma^2)/sigma^2).*(x>0);
% 随机序列
while n<N
t=rand(1)*20;
r=rand(1);
if r<=f(t)
n=n+1;
a(n)=t;
end
end
fadeSig2 = a+pskSig; % 叠加
%% 方法三:复高斯法
h = (randn(N,1)+i*randn(N,1))/sqrt(2);
fadeSig3 = h.*pskSig;
%% 高斯信道
awgnChan=comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)');
%% 信号通过信道
for i=1:length(SNR)
awgnChan.SNR=SNR(i);
rxSig_rayleigh_awgn = awgnChan(fadeSig);
rxSig2_rayleigh_awgn = awgnChan(fadeSig2);
rxSig3_rayleigh_awgn = awgnChan(fadeSig3);
rxSig4_awgn = awgnChan(pskSig);
rx_rayleigh_awgn=pskdemod(rxSig_rayleigh_awgn,M);
rx2_rayleigh_awgn=pskdemod(rxSig2_rayleigh_awgn,M);
rx3_rayleigh_awgn=pskdemod(rxSig3_rayleigh_awgn,M);
rx4_awgn = pskdemod(rxSig4_awgn,M);
[num1,err1] = biterr(tx,rx_rayleigh_awgn);
[num2,err2] = biterr(tx,rx2_rayleigh_awgn);
[num3,err3] = biterr(tx,rx3_rayleigh_awgn);
[num4,err4] = biterr(tx,rx4_awgn);
BER_rayleigh_awgn(i) = err1;
BER2_rayleigh_awgn(i) = err2;
BER3_rayleigh_awgn(i) = err3;
BER4_awgn(i) = err4;
end
BERtheory = berawgn(SNR','psk',M,'nondiff');
semilogy(SNR,BERtheory,'-',SNR,BER4_awgn,'-*');
legend('AWGN理论','AWGN仿真','Location','southwest');
hold on;
semilogy(SNR,BER_rayleigh_awgn,'-^',SNR,BER2_rayleigh_awgn,'-o',SNR,BER3_rayleigh_awgn,'-x','MarkerSize',10);
legend('AWGN理论','AWGN仿真','自带瑞利信道','瑞利序列叠加法','复高斯法','Location','southwest');
```