neeeewbee
neeeewbee
采纳率0%
2020-06-19 23:08

matlab编程出现“未定义变量 "commsrc" 或类 "commsrc.pn"”如何解决

  • 开发语言

%2^7-1个伪随机码,载波频率为20KHz,利用MATLAB画出QPSK调制波形的频谱图和星座图,其中码元速率为20kbps
function [] = btest()
%% 生成伪随机码
pngen = commsrc.pn('NumBitsOut',128); % 创建伪随机噪声发生包
xulie = generate(pngen); % 生成伪随机序列
fm = 20; % 波特率20kHz 一个信号码元有两种状态:0或1,每种状态含一位二进制数,比特率值=波特率值
total =128; % 采样次数
fs=fm*total; %采样频率
N = total*length(xulie); % 总采样点个数
dt=1/fs; % 时域采样间隔
T = N*dt; % 截断时间
t = linspace(0,T,N); % 时域横坐标
%% 生成两路调制信号
NRZ = []; %并行信号
NRZ_0 = []; %采样后的第一路串行信号
nrz_0 = []; %采样前的第一路串行信号
NRZ_1 = []; %采样后的第二路串行信号
nrz_1 = []; %采样前的第二路串行信号
for k=1:length(xulie) % 采样的同时也是对信号进行NRZ与RZ变换
for j=1:(total) % NRZ变换
NRZ((k-1)*total+j)=xulie(k);
end

end
for k=1:(length(xulie)-1) % 采样的同时也是对信号进行串并行变化
if (mod(k, 2)==0)
for j=1:(total) % 串行第一路信号采样
if xulie(k)==1
NRZ_0((k-1)*total+j)=1;
nrz_0(k)=1;
else
NRZ_0((k-1)*total+j)=-1;
nrz_0(k)=-1;
end
end
for j=1:(total) % 串行第二路信号采样
if xulie(k-1)==1
NRZ_1((k-1)*total+j)=1;
nrz_1(k)=1;
else
NRZ_1((k-1)*total+j)=-1;
nrz_1(k)=-1;
end
end
else
for j=1:(total) % 串行第一路信号采样
if xulie(k)==1
NRZ_1((k-1)*total+j)=1;
nrz_1(k)=1;
else
NRZ_1((k-1)*total+j)=-1;
nrz_1(k)=-1;
end
end
for j=1:(total) % 串行第二路信号采样
if xulie(k+1)==1
NRZ_0((k-1)*total+j)=1;
nrz_0(k)=1;
else
NRZ_0((k-1)*total+j)=-1;
nrz_0(k)=-1;
end
end
end

end
for j=1:(total) % 串行信号修正(补充对最后一个码元的采样)
if xulie(length(xulie))==1
NRZ_0((length(xulie)-1)*total+j)=1;
nrz_0(length(xulie))=1;
else
NRZ_0((length(xulie)-1)*total+j)=-1;
nrz_0(length(xulie))=-1;
end
if xulie(length(xulie)-1)==1
NRZ_1((length(xulie)-1)*total+j)=1;
nrz_1(length(xulie))=1;
else
NRZ_1((length(xulie)-1)*total+j)=-1;
nrz_1(length(xulie))=-1;
end
end
%% 生成QPSK信号
fc=20; % 载波20kHz
mNRZ_0=NRZ_0.*sin(2*pi*fc*t); % 第一路调制后的载波信号
mNRZ_1=NRZ_1.*cos(2*pi*fc*t); % 第二路调制后的载波信号
QPSK = mNRZ_1-mNRZ_0; % 生成QPSK调制信号 I*cos(wt)-Qsin(wt)

figure(1) % 绘制基带时域波形
plot((0:1:total*length(xulie)-1)*dt/total, NRZ);
axis([0 length(xulie)*dt -2 2]);
grid on;
title('基带时域波形');
xlabel('s')

figure(2) % QPSK调制信号波形
plot((0:1:total*length(xulie)-1)*dt/total, QPSK);
axis([0 length(xulie)*dt -2 2]);
grid on;
title('QPSK调制信号波形');
xlabel('s')

figure(3) % QPSK调制信号功率谱图
Bs =fs/2; % 系统带宽
ff = linspace(-Bs,Bs,N); % 频域横坐标
fQPSK = fft(QPSK);
pfQPSK =abs(fftshift(fQPSK))/fs;
plot(ff,pfQPSK,'b');

axis([-50,50,0,1]);
title('QPSK调制信号功率谱图');
xlabel('f/kHz');
%% 绘制星座图
signal = cat(2, nrz_0', nrz_1'); % 将两路串行信号码元合并在一个length(xulie)*2的矩阵中
[a1,~]=find(signal(:,1)==-1&signal(:,2)==-1); % 返回满足条件的矩阵元素对应的坐标
xinzuotu(a1)=-1-1i;

[a2,~]=find(signal(:,1)==-1&signal(:,2)==1);
xinzuotu(a2)=-1+1i;

[a3,~]=find(signal(:,1)==1&signal(:,2)==-1);
xinzuotu(a3)=1-1i;

[a4,~]=find(signal(:,1)==1&signal(:,2)==1);
xinzuotu(a4)=1+1i;

scatterplot(xinzuotu) % 以散点图的形式画出星座图
axis([-2 2 -2 2])
title('理想情况基带发射星座图')
end


未定义变量 "commsrc" 或类 "commsrc.pn"。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • qq_43404066 零壹c 10月前

    result

    看看运行结果有没有问题。我运行没有报错,Matlab R2018a。

    顺带提一句,脚本前,先走一波

    clear all;
    close all;
    clc;
    
    点赞 1 评论 复制链接分享

相关推荐