诸事顺遂。 2021-07-02 16:34 采纳率: 0%
浏览 80

关于m序列和gold序列的仿真,程序似乎有问题

img
这是要求的通过瑞利衰落信道后的样子

img
这是我运行的样子
%直接序列扩频主程序代码
function [ber] = dscdma(user,seq)
% user: 同时进行扩频通信的用户数
% seq: 扩频码 1:M- 序列 2:Gold 序列 3: 正交 Gold 序列
% ber : 该用户数下的误码率
%************************** 初始化部分 *****************************
sr = 25600.0; % 符号速率
nSymbol=1000; %每种信噪比下发送的符号数
M = 4; % 4-QAM 调制
br = sr * log2(M); % 比特速率
graycode=[0 1 3 2]; % Gray 编码规则
EbNo=0:2:10; % Eb/No 变化范围
%********************** 脉冲成形滤波器参数 **************************
delay = 10; % 升余弦滤波器时延
Fs = 8; % 滤波器过采样数
rolloff = 0.5; % 升余弦滤波器滚降因子
rrcfilter = rcosine(1,Fs, 'fir/sqrt' ,rolloff,delay);
%设计根升余弦滤波器
%********************** 扩频码产生参数 **********************
% user = user1; % 用户数
stage = 3; % m序列的阶数
ptap1 = [1 3]; % m序列 1的寄存器连接方式
ptap2 = [2 3]; % m序列 2的寄存器连接方式
regi1 = [1 1 1 ]; % m序列 1的寄存器初始值
regi2 = [1 1 1]; % m序列 2的寄存器初始值
%******************** 扩频码的生成 *********************
switch seq
case 1 % M- 序列
code = mseq(stage,ptap1,regi1,user);
case 2 % Gold 序列
m1 = mseq(stage,ptap1,regi1);
m2 = mseq(stage,ptap2,regi2);
code = goldseq(m1,m2,user);
case 3 % 正交 Gold 序列
m1 = mseq(stage,ptap1,regi1);
m2 = mseq(stage,ptap2,regi2);
code = [goldseq(m1,m2,user),zeros(user,1)];
end
code = code * 2 - 1;
clen = length(code);
%************************** 衰落信道参数 **************************
ts=1/Fs/sr/clen; %采样时间间隔
t=(0:nSymbolFsclen-1+2delayFs)ts; %每种信噪比下的符号传输时间
fd = 160; % 多普勒频移 [Hz]
h=rayleigh(fd,t);
%
*************************** 仿真开始 ****************************
for indx=1:length(EbNo)
%************************** 发射端 ********************************
data = randsrc(user,nSymbol,[0 :3]) ; % 产生各个用户的发射数据
data1=graycode(data+1); % Gray 编码
data1 = qammod(data1,M); % 4-QAM 调制
[out] = spread(data1,code); % 扩频
out1=rcosflt(out.',sr,Fssr, 'filter' ,rrcfilter);
% 通过脉冲成形滤波器
spow = sum(abs((out1)).^2) / nSymbol; % 计算每个用户信号功率
if user > 1 % 用户数大于 1 时,所有用户数据相加
out1=sum(out1.');
else
out1=out1.';
end
%
******************* 通过瑞利衰落信道 ******************************
out1=h.out1;
%
************************ 接收端 *********************************
sigma = sqrt(0.5 * spow * sr / br * 10^(-EbNo(indx)/10));
% 根据信噪比计算高斯白噪声方差
y=[];
for ii=1:user
y(ii,:)=out1+sigma(ii).(randn(1,length(out1))+jrandn(1,length(out1))); % 加入高斯白噪声( AWGN)
%y(ii,:)=y(ii,:)./h;
% 假设理想信道估计
end
y=rcosflt(y.',sr,Fssr, 'Fs/filter' ,rrcfilter);
% 通过脉冲成形滤波器进行滤波
y=downsample(y,Fs); % 降采样
for ii=1:user
y1(:,ii)=y(2
delay+1:end-2*delay,ii);
end
yd = despread(y1.',code); % 数据解扩
demodata = qamdemod(yd,M); % 4-QAM 解调
demodata=graycode(demodata+1); % Gray 编码逆映射
[err,ber(indx)]=biterr(data,demodata,log2(M)); % 统计误比特率
end

function [h]=rayleigh(fd,t)
%该程序利用改进的jakes模型来产生单径的平坦型瑞利衰落信道
%Yahong R.Zheng and Chengshan Xiao "Improved Models for
%the Generation of Multiple Uncorrelated Rayleigh Fading Waveforms"
%IEEE Commu letters, Vol.6, NO.6, JUNE 2002
%输入变量说明:
% fd:信道的最大多普勒频移 单位Hz
% t :信号的抽样时间序列,抽样间隔单位s
% h为输出的瑞利信道函数,是一个时间函数复序列

%假设的入射波数目
% 
N=40; 
wm=2*pi*fd;
%每象限的入射波数目即振荡器数目
N0=N/4;
%信道函数的实部
Tc=zeros(1,length(t));
%信道函数的虚部
Ts=zeros(1,length(t));
%归一化功率系数
P_nor=sqrt(1/N0);
%区别个条路径的均匀分布随机相位
theta=2*pi*rand(1,1)-pi;
for ii=1:N0
      %第i条入射波的入射角 
        alfa(ii)=(2*pi*ii-pi+theta)/N;
        %对每个子载波而言在(-pi,pi)之间均匀分布的随机相位
        fi_tc=2*pi*rand(1,1)-pi;
        fi_ts=2*pi*rand(1,1)-pi;
        %计算冲激响应函数
        Tc=Tc+cos(cos(alfa(ii))*wm*t+fi_tc);
        Ts=Ts+cos(sin(alfa(ii))*wm*t+fi_ts);
end
%归一化功率系数得到传输函数

h=P_nor*(Tc+j*Ts );
这是我的部分代码 ,感觉是哪里的参数设错了,希望哪位大佬能帮我看一看 辛苦了!

  • 写回答

1条回答 默认 最新

  • Fuyaoqin_ID 2023-02-23 20:43
    关注

    这段代码看起来没有明显的语法错误,但是我注意到其中一些变量是在代码中没有被定义的。比如,fd,t,alfa这些变量的值应该在代码中被定义和初始化。因此,请确保这些变量在运行代码之前已经定义并初始化了,否则代码会出现错误。

    此外,我还注意到cos函数的输入参数中的cos和sin是被误用的。如果要计算cos(alfa(ii))和sin(alfa(ii))的值,应该将其计算出来并分别赋值给变量,而不是作为cos和sin函数的输入参数。

    评论

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误