matlab代码m序列和正交gold序列在瑞利信道下的性能仿真

目前手头有两码在awgn信道下的仿真,也有各部分的函数程序,但不会改瑞利信道的,不知道应该是在主程序下手改还是变动添加函数子程序,求指导。

img

img

你最终是想实现什么需求?

瑞利信道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');

```