扩频调制matlab仿真

扩频调制matlab仿真扩频调制1.扩频调制概念2.仿真代码(matlab)2.1主程序2.2产生m序列函数3.实验结果1.扩频调制概念扩展频谱是指将信号的频谱扩展至占用很宽的频带,简称扩频。扩展频谱通信系统是将基带信号的频谱通过某种调制扩展到远大于原基带信号带宽的系统。扩展频谱技术一般可以分为三类:1.直接序列扩谱,它通常用一段伪随机序列表示一个信息码元,对载波进行调制。2.跳频扩谱,它是发射机的载频在一个信…

大家好,又见面了,我是你们的朋友全栈君。

1.扩频调制概念

扩展频谱是指将信号的频谱扩展至占用很宽的频带,简称扩频。扩展频谱通信系统是将基带信号的频谱通过某种调制扩展到远大于原基带信号带宽的系统。
扩展频谱技术一般可以分为三类:
1.直接序列扩谱,它通常用一段伪随机序列表示一个信息码元,对载波进行调制。
2.跳频扩谱,它是发射机的载频在一个信息码元的时间内,按照预定的规律,离散地快速跳变,从而达到扩谱的目的。
3.线性调频,在这种系统中,载频在一个信息码元时间内在一个宽的频段中线性地变换。
扩频通信的目的:
1.提高抗窄带干扰的能力,特别时提高抗有意干扰的能力
2.防止窃听
3.提高抗多径传输效应的能力
4.使多个用户可以共用同一频带

2.仿真代码(matlab)

2.1主程序

%%
%1.测试产生m序列,并且查看其特性
clear;
clc;
close all;
%通过异或的方式产生m序列,这里选择了15位单极性m序列
M=50;
m_sequ=[];
for i=1:M
    register = m_sequence([1 0 0 1]);
    %产生m序列数组,用m_sequ保存起来
    m_sequ = [m_sequ register];
end
%将单极性的m序列转换成为双极性的m序列
bipolar_m_sequ = 1-2*m_sequ;
num=1:length(bipolar_m_sequ);

figure(1)
subplot(2,1,1)
stem(num-1,bipolar_m_sequ);
axis([0,15,-1.2,1.2]);%展示15位M序列
xlabel('num');
ylabel('M序列');
title('双极性15位M序列');
sample_num=4096;%设定进行fft变换的点数为4096个

subplot(2,1,2)
m_sequ_fft=fft(bipolar_m_sequ, sample_num);%双极性M序列进行fft变换
magnitude=abs(m_sequ_fft);%采样后的振幅magnitude
frequency_sequence=(1:sample_num)*200/sample_num;%频率序列,按采样频率为200进行采样
%进行fft变换得到的幅值不是真实的,需要将变换后的结果乘2再除以个数N
plot(frequency_sequence,magnitude(1:sample_num)*2/sample_num);
xlabel('Hz');
axis([100,115,0,0.2]);
title('绘出M序列随频率变化的振幅');


%%
%2.生成随机二进制比特序列,并进行扩频编码
N=50;
%生成50位随机二进制比特流
random_bitlist=ceil(rand(1,N)-0.5);
y=zeros(1,15*N);%生成频率信息码
for i=1:N
   k=15*i-14;
   y(k:k+15)=random_bitlist(i);
end
m = 750;%进行m序列编码(异或操作)
for i=1:m
    m_modulation_bitlist(i)=double(xor(m_sequ(i),y(i)));
end

figure(2)
subplot(2,1,1)
t=0:N-1;
stem(t,random_bitlist);
axis([0,50,-0.5,1.5])
title('扩频前二进制比特流');

subplot(2,1,2)
t=1:m;
stem(t,m_modulation_bitlist);
axis([0,200,-0.5,1.5]);
title('扩频后的二进制比特流');

%%
%3.对扩频前后信号进行BPSK调制,观察其时域波形

%设定采样频率
ts=0:1e-5:7.5-0.00001;
%每个符号复制1000次,将本来是冲激信号的m序列调制后比特流转变成矩形信号
m_modulation_bitlist_1=rectpulse(m_modulation_bitlist,1000);
%扩频后信号BPSK调制时域波形
fs=2000;%设定bpsk调制频率为2000hz
m_modulation_bitlist_bpsk=(1-2.*m_modulation_bitlist_1).*cos(2*pi*fs*ts);

m_modulation_bitlist_2=rectpulse(random_bitlist,15000);
%无扩频信号BPSK调制时域波形
m_modulation_bitlis_unbpsk=(1-2.*m_modulation_bitlist_2).*cos(2*pi*fs*ts);

figure(3)
subplot(2,1,2)
plot(ts,m_modulation_bitlist_bpsk);
xlabel('t/s');
axis([0, 0.05, -1.2, 1.2]);
title('扩频后bpsk信号时域波形');

subplot(2,1,1)
plot(ts,m_modulation_bitlis_unbpsk);
xlabel('s');
axis([0, 0.05, -1.2, 1.2]);
title('扩频前bpsk信号时域波形')



%%
%4.计算并观察扩频前后BPSK调制信号的频谱
%对信号采用800000点fft计算,得到频谱
figure(4)
N=800000;

y_unbpsk=fft(m_modulation_bitlis_unbpsk,N);
magnitude_unbpsk=abs(y_unbpsk);
frequency_unbpsk=(1:N/2)*100000/N;

y_bpsk=fft(m_modulation_bitlist_bpsk, N);
magnitude_bpsk=abs(y_bpsk);
frequency_bpsk=(1:N/2)*100000/N;

subplot(2,1,1)
plot(frequency_unbpsk,magnitude_unbpsk(1:N/2)*2/N);
%扩频前调制信号频率在2000hz
xlabel('Hz');
axis([1700,2300,0,0.8]);
title('扩频前调制信号频谱');

subplot(2,1,2);
plot(frequency_bpsk,magnitude_bpsk(1:N/2)*2/N);
axis([1700,2300,0,0.8]);
title('扩频后调制信号频谱') ;
xlabel('Hz');


%%
%5.仿真经过awgn信号传输后,扩频后信号时域及频域的变化
%awgn信道模拟了真实的信道,为传输信号增加了高斯白噪声

m_modulation_bitlist_bpsk_awgn=awgn(m_modulation_bitlist_bpsk, 3,'measured');
y_bpsk_awgn=fft(m_modulation_bitlist_bpsk_awgn, N);
magnutide_bpsk_awgn=abs(y_bpsk_awgn);
frequency_bpsk=(1:N/2)*100000/N;


%扩频调制信号经信道后频谱分析
figure(5)
subplot(2,1,1)
plot(ts,m_modulation_bitlist_bpsk,ts,m_modulation_bitlist_bpsk_awgn);
axis([0, 0.005, -1.2, 1.2]);
title('扩频后经加噪过信道后的信号时域波形');

subplot(2,1,2)
plot(frequency_bpsk,magnutide_bpsk_awgn(1:N/2)*2/N);
title('扩频后经信道调制信号频谱');
axis([1700, 2300, 0, 0.8]);
xlabel('Hz');


%%
%6.对比经信道前后两种信号的频谱变化
figure(6)

subplot(2,1,1)
plot(frequency_bpsk, magnitude_bpsk(1:N/2)*2/N);
axis([0,4000,0,0.04]);
title('扩频后调制信号频谱');
xlabel('Hz');

subplot(2,1,2)
plot(frequency_bpsk, magnutide_bpsk_awgn(1:N/2)*2/N);
axis([0,4000,0,0.04]);
title('扩频后施加高斯噪声调制信号频谱');
xlabel('Hz');

%%
%7.不加窄带强干扰
%接收机与本地恢复载波相乘,观察仿真时域波形,观察其频谱变化

bitlist_recovery=m_modulation_bitlist_bpsk_awgn.*cos(2*pi*fs*ts);
frequency_recovery=(1:N/2)*100000/N;
y_bitlist_recovery_fft=fft(bitlist_recovery,N);
magnitude_recovery=abs(y_bitlist_recovery_fft);


figure(7)
subplot(2,1,1)
plot(ts,bitlist_recovery);
axis([0.03, 0.055, -1.5, 1.5]);
title('扩频后接受信号乘以恢复载波')
xlabel('t');

subplot(2,1,2)
plot(frequency_recovery, magnitude_recovery(1:N/2)*2/N);
axis([0, 5000, 0, 0.5]);
xlabel('Hz');
title('扩频后乘以恢复载波后信号频谱');


%%
%8.仿真观察信号经凯萨尔窗低通滤波后的频谱


fp=100;
fc=200;
as=100;
ap=1;%衰减1db
fsw=22000;
wp=2*fp/fsw;
wc=2*fc/fsw;
%求低通滤波器阶数
Nw=ceil((as-7.95)/(14.36*(wc-wp)/2))+1;
beta=0.1102*(as-8.7);
window=kaiser(Nw+1,beta);
%返回截止频率为wc的Nw阶低通滤波器系数向量
b=fir1(Nw,wc,window);
%求频率响应
bs=abs(freqz(b,1,N,fsw))';
magnitude_low_frequency_re=bs.*magnitude_recovery;
%观察经过低通滤波器后无扩频与扩频系统的时域波形
%对扩频系统做iift变换
y_bitlist_recovery_ifft=real(ifft(bs.*y_bitlist_recovery_fft,N));


figure(8)
subplot(2,1,1)
plot(frequency_recovery,magnitude_low_frequency_re(1:N/2)*2/N);
axis([0,200/7,0,0.2]);
title('扩频信号经过低通滤波后频域波形');
xlabel('Hz');

tm=(1:N)/N*4;
subplot(2,1,2)
plot(tm,y_bitlist_recovery_ifft);
xlabel('t');
title('扩频后经过低通滤波后时域波形');

%%
%9,对扩频系统进行解扩,观察其时域频域

%扩频信号乘以解扩序列
bitlist_despread=rectpulse(bipolar_m_sequ,1000);
y_bitlist_recovery_relieve=bitlist_despread.*y_bitlist_recovery_ifft(1:750000);
y_bitlist_recovery_relieve_fft=fft(y_bitlist_recovery_relieve,N);
magnitude_bitlist_recovery_relieve=abs(y_bitlist_recovery_relieve_fft);


figure(9)
subplot(2,1,1)
plot(ts(1:750000),y_bitlist_recovery_relieve(1:750000));
xlabel('t');
axis([0,4,-0.5,0.5]);
title('解扩后信号波形');

subplot(2,1,2)
plot(frequency_recovery,magnitude_bitlist_recovery_relieve(1:N/2)*2/N);
axis([0,500,0,0.2]);
title('解扩后信号频谱');
xlabel('Hz');

%%
%11对解扩信号进行采样,判决

for i=1:750
    K=i*1000-500;
    recovery_bitlist(i)=y_bitlist_recovery_relieve(K);
end
figure(10)
subplot(2,1,1)
stem(recovery_bitlist);
title('解扩信号采样');
for i=1:750
    if recovery_bitlist(i)>0.2
        recovery_bitlist(i)=1;
    elseif recovery_bitlist(i)<-0.2
        recovery_bitlist(i)=-1;
    else
        recovery_bitlist(i)=0;
    end
end
for i=1:50
    K=15*i-14;
    if recovery_bitlist(K)==0
        recovery_bitlist(K)=recovery_bitlist(K+4);
    end
end
for i=1:348
    if recovery_bitlist(i)==0
        recovery_bitlist(i)=recovery_bitlist(i+2);
    end
end
for i=1:50
    output_bitlist(i)=recovery_bitlist(i*15-6);
    if output_bitlist(i)==0
        output_bitlist(i)=output_bitlist(i)+1;
    end
    output_bitlist(i)=(1-output_bitlist(i))/2;
end



subplot(2,1,2)
stem(output_bitlist);
axis([0,50,-0.5,1.5])
title('判决后的最终信号');


figure(11)
subplot(2,1,1)
t=1:50;
stem(t,random_bitlist);
axis([0,50,-0.5,1.5])
title('扩频前二进制比特流');

subplot(2,1,2)
stem(random_bitlist);
axis([0,50,-0.5,1.5])
title('解扩信号采样');

2.2产生m序列函数

function[mseq]=m_sequence(coefficient)
n=length(coefficient);
N=2^n-1; 
register=[zeros(1,n-1) 1]; %移位寄存器的初始状态
mseq(1)=register(n); %m序列的第一个输出码元
for i=2:N
newregister(1)=mod(sum(coefficient.*register),2);
for j=2:n
newregister(j)=register(j-1); 
end;
register=newregister; 
mseq(i)=register(n);
end

3.实验结果

M序列

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140993.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Linux(centos7)离线安装Kubernetes1.19.2和docker——images导入导出

    Linux(centos7)离线安装Kubernetes1.19.2和docker——images导入导出

  • 关于最短路径算法的理解

    关于最短路径算法的理解“最短路径算法:Dijkstra算法,Bellman-Ford算法,Floyd算法和SPFA算法等。​从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径。”我们解决最短路径问题,常用的是Dijkstra与Floyd算法Dijkstra(迪杰斯特拉)算法他的算法思想是按路径长度递增的次序一步一步并入来求取,是贪心算法的一个应用,用来解决单源点到其余顶点的…

  • 使用CityScapes数据集训练实例分割网络YOLACT

    使用CityScapes数据集训练实例分割网络YOLACT#2020开年第一篇,谁能预料新年伊始的世界如此脆弱,中国疫情肆虐,美伊箭拔弩张,英国愤懑脱欧,儿时的偶像科比和女儿也不幸离世,生命之渺小,生活之曲折,兄弟们,要充满阳光地活着啊,人间,值得。:-)今天还是鄙人生日,愿世间多点爱,与和平。上一篇介绍了博主用CityScapes数据集提取了五类实例,并转换成了COCO数据集的标注格式(将CityScapes数据集转换为COCO格式的实例分割数据集…

  • 海龟交易_海龟交易法则的核心

    海龟交易_海龟交易法则的核心入行十多年,见过不少充满灵性的投资人,选股能力非常出色,但是在买卖时机、投入资金多寡上的不足使得他们的盈利水平并不理想。没有别的原因,是缺少一个交易系统。一个完整的交易系统,包括:·市场

  • 数据结构 || 二维数组按行存储和按列存储[通俗易懂]

    数据结构 || 二维数组按行存储和按列存储[通俗易懂]问题描述:设有数组A[n,m],数组的每个元素长度为3字节,n的值为1~8,m的值为1~10,数组从内存收地址BA开始顺序存放,请分别用列存储方式和行存储方式求A[5,8]的存储首地址为多少。解题说明:(1)为什么要引入以列序为主序和以行序为主序的存储方式?因为一般情况下存储单元是单一的存储结构,而数组可能是多维的结构,则用一维数组存储数组的数据元素就存…

  • 数组和对象的深拷贝_Java对象深拷贝工具类

    数组和对象的深拷贝_Java对象深拷贝工具类functiondeepCopy(obj,cache){if(cache===void0)cache=[]if(obj===null||typeofobj!==’object’)returnobjvarhit=find(cache,function(c){debuggerreturn…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号