大家好,又见面了,我是你们的朋友全栈君。
扩频调制- 1.扩频调制概念
- 2.仿真代码(matlab)
- 2.1主程序
- 2.2产生m序列函数
- 3.实验结果
- 2.1主程序
- 2.2产生m序列函数
1.扩频调制概念
扩展频谱是指将信号的频谱扩展至占用很宽的频带,简称扩频。扩展频谱通信系统是将基带信号的频谱通过某种调制扩展到远大于原基带信号带宽的系统。 扩展频谱技术一般可以分为三类: 1.直接序列扩谱,它通常用一段伪随机序列表示一个信息码元,对载波进行调制。 2.跳频扩谱,它是发射机的载频在一个信息码元的时间内,按照预定的规律,离散地快速跳变,从而达到扩谱的目的。 3.线性调频,在这种系统中,载频在一个信息码元时间内在一个宽的频段中线性地变换。 扩频通信的目的: 1.提高抗窄带干扰的能力,特别时提高抗有意干扰的能力 2.防止窃听 3.提高抗多径传输效应的能力 4.使多个用户可以共用同一频带
2.仿真代码(matlab)
2.1主程序
代码语言:javascript复制%%
%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');
%%
对解扩信号进行采样,判决
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序列函数
代码语言:javascript复制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.实验结果
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140993.html原文链接:https://javaforall.cn