资源描述
Matlab和通信仿真课程设计汇报
班级:12通信(1)班
姓名:诸葛媛
学号:Xb12680129
试验一 S-函数&锁相环建模拟真
一、 试验目标
1. 了解S函数和锁相环工作原理
2. 掌握用S函数建模过程,锁相环载波提取仿真
二、 试验内容
1、用S函数编写Similink基础模块
(1) 信源模块
实现一个正弦波信号源,要求其幅度、频率和初始相位参数能够由外部设置,并将这个信号源进行封装。
(2) 信宿和信号显示模块
实现一个示波器木块,要求能够设定示波器显示扫描周期,并用这个示波器观察(1)信源模块
(3) 信号传输模块
实现调幅功效,输入用(1)信源模块,输出用(2)信宿模块;
基带信号频率1KHz,幅度1V;载波频率10KHz,幅度5V
实现一个压控正弦振荡器,输入电压u(t)范围为[v1,v2]V,输出正弦波中心频率为f0Hz,正弦波瞬时频率f随控制电压线性改变,控制灵敏度为kHz/V。输入用(1)信源模块,输出用(2)信宿模块
2、锁相环载波提取仿真
(1)利用压控振荡器模块产生一个受10Hz正弦波控制,中心频率为100Hz,频偏范围为50Hz到150Hz振荡信号,并用示波器模块和频谱仪模块观察输出信号波形和频谱。
(2)构建一个抑制载波双边带调制解调系统。载波频率为10KHz,被调信号为1KHz正弦波,试用平方环恢复载波并进行解调。
(3)构建一个抑制载波双边带调制解调系统。载波频率为10KHz,被调信号为1KHz正弦波,试用科斯塔斯环恢复载波并进行解调。
(4)设参考频率源频率为100Hz,要求设计并仿真一个频率合成器,其输出频率为300Hz。并说明模型设计上和实例3.26关键区分
三、试验结果分析
1、用S函数编写Similink基础模块(3)
为了使S函数中输入信号包含多个,需要将其输入变量u初始为制订维数或自适应维数,而在S函数模块外部采取Simulink基础库中复用器(Mux)将3个信号复用在一根信号线上。MUX实质上是将多个单行信号序列组成一个多行信号矩阵。采取Fcn函数模块则能够从输入信号矩阵中取出对应元素进行计算。设置参数以下:输入信号源为常数值2信号,subsystem中信号输入为频率为1000Hz,幅度为1正弦信号,仿真步长设置为2e-5;最终利用做成显示模块来观察输出信号波形。
测试模型:
signal generator:基带信号
constant:直流偏置
signal generator1:载波信号
显示结果:
Subsystem中M文件:
function [sys,x0,str,ts] = zgy1(t,x,u,flag,Amp,Freq,Phase)
%正弦波信号源
switch flag,
case 0 %flag=0初始化
[sys,x0,str,ts]=mdlInitializeSizes;
case 3 %flag=3计算输出
sys=mdlOutputs(t,Amp,Freq,Phase);
case{1,2,4,9} %其它作不处理flag
sys=[]; %无用flag时返回sys为空矩阵
otherwise %异常处理
error(['Unhandled flag = ',num2str(flag)]);
end
%主函数结束
%子函数实现(1)初始化函数
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes; %获取simulink仿真变量结构
sizes.NumContStates = 0; %连续系统状态数为0
sizes.NumDiscStates = 0; %离散系统状态数为0
sizes.NumOutputs = 1; %输出信号数目是1
sizes.NumInputs = 0; %输入信号数目是0
sizes.DirFeedthrough = 0; %这系统不是直通
sizes.NumSampleTimes = 1; %这里必需为1
sys = simsizes(sizes);
str = []; %通常为空矩阵
x0 = []; %初始状态矩阵x0(零状态情况)
ts = [0 0]; %表示连续取样时间仿真
%子函数实现(2)系统输出方程函数
function sys=mdlOutputs(t,Amp,Freq,Phase)
sys = Amp*sin(2*pi*Freq*t+Phase); %这里写入系统输出方程矩阵形式
%修改这个函数能够得到任意波形输出
%系统输出方程函数结束
S-function中M文件:
function [sys,x0,str,ts] = zgy4(t,x,u,flag)
%输入信号代数运算实例:调幅
%输出u是3行1列矩阵,u(1),u(2),u(3)分别表示基带信号,直流偏置和载波
%size(u)
switch flag,
case 0 %flag=0初始化
sizes = simsizes; %获取simulink仿真变量结构
sizes.NumContStates = 0; %连续系统状态数是0
sizes.NumDiscStates = 0; %离散系统状态数是0
sizes.NumOutputs = 1; %输出信号数目是1
sizes.NumInputs = -1; %输入信号数目是自适应
sizes.DirFeedthrough = 1; %该系统是直通
sizes.NumSampleTimes = 1; %这里必需为1
sys = simsizes(sizes);
str = [];
x0 = []; %初始状态矩阵x0
ts = [-1 0];%采样时间由外部模块给出
case 3 %flag=3计算输出
sys=(u(1)+u(2))*u(3); %调幅输出计算
case{1,2,4,9} %其它作不处理flag
sys=[]; %无用flag时返回sys为空矩阵
otherwise %异常处理
error(['Unhandled flag = ',num2str(flag)]);
end
显示模块中M 文件:
function [sys,x0,str,ts] = zgy2(t,x,u,flag,numofshowsteps)
%显示示波器
global T Y N; %申明使用全局变量
switch flag,
case 0 %flag=0初始化
sizes = simsizes; %获取simulink仿真变量结构
sizes.NumContStates = 0; %连续系统状态数为0
sizes.NumDiscStates = 0; %离散系统状态数为0
sizes.NumOutputs = 0; %输出信号数目是0
sizes.NumInputs = 1; %输入信号数目是0
sizes.DirFeedthrough = 1; %该系统是直通
sizes.NumSampleTimes = 1; %这里必需是1
sys = simsizes(sizes);
str=[]; %通常为空矩阵
x0=[]; %初始化状态矩阵x0(零状态情况)
ts=[0,0]; %表示连续取样时间仿真
N=0; %缓冲区全局变量初始化
T=zeros(1,numofshowsteps-1);
Y=zeros(1,numofshowsteps-1);
case 3 %flag=3计算输出
if N<numofshowsteps-1 %将输入暂存到缓冲区中
N=N+1; %缓冲区数组跑标
Y(N)=u; %统计目前信号
T(N)=t; %统计目前时刻
else %缓冲区满(一帧完成)则作图
figure(1);
plot(T-min(T),Y); %做出一帧信号波形
axis([0 max(T)-min(T) 1.1*min(Y) 1.1*max(Y)]); %坐标范围
set(gcf,'DoubleBuffer','on'); %双缓冲避免作图闪烁
drawnow; %作图
N=0; %缓冲区跑标复位
end
case{1,2,4,9} %其它作不处理flag
sys=5; %无用flag时返回sys为空矩阵
otherwise %异常处理
error(['Unhandled flag = ',num2str(flag)]);
end
压控正弦振荡器:其中控制信号输入幅度为4、频率为1Hz正弦波,压控振荡器中心频率设置为10Hz,控制灵敏度为1Hz/V,初始相位为0,输出幅度为2V。
测试模型:
S-function中M文件:
function [sys,x0,str,ts] = zgy5(t,x,u,flag,Amp,f0,k,phi0)
%VCO实现
switch flag,
case 0 %flag初始化
sizes = simsizes; %获取simulink仿真变量结构
sizes.NumContStates = 1; %连续系统状态为1
sizes.NumDiscStates = 0; %离散系统状态数是0
sizes.NumOutputs = 1; %输出信号数目是1
sizes.NumInputs = -1; %输入信号数目是自适应
sizes.DirFeedthrough = 0; %该系统不是直通
sizes.NumSampleTimes = 1; % 这里必需是1
sys = simsizes(sizes);
str = []; %通常为空矩阵
x0 = [0]; % 初始状态矩阵x0
ts = [-1 0]; %采样时间由外部模块给出
case 1 %flag=1计算连续系统状态方程
sys=2*pi*f0+2*pi*k*u; %VCO输出方程
case 3 %flag=3 计算输出
sys=Amp*sin(x+phi0); %VCO输出方程
case{2,4,9} %其它作不处理flag
sys=[]; %无用flag时返回sys为空矩阵
otherwise %异常处理
error(['Unhandled flag = ',num2str(flag)]);
end
显示结果:
2、锁相环载波提取仿真
构建一个抑制载波双边带调制解调系统。载波频率为10KHz,被调信号为1KHz正弦波,试用平方环恢复载波并进行解调。
仿真模型:
AWGN:信道
Analog filter:低通滤波器
仿真步进设计为10^-6s,即在一个载波(10KHZ)周期中将有100个仿真计算点。仿真计算采取ode5算法。图中两个信号模块分别产生幅度为1,频率为1000Hz基带正弦信号和10000Hz载波信号,被送入Product模块完成DSB-SC调制。调制输出经过加性高斯白噪声信道(AWGN)传输,在信道中加入噪声方差设置为0.01。在接收解调端,使用乘法器1完成平方功效。然后将平方输出经过中心频率为20kHz二阶带通滤波器选出载波二次谐波。该带通滤波器通带可设置为19-21kHz(19000*2*pi——0*2*pi)。
乘法器2作为锁相环鉴相器,环路滤波器设为直通,所以该锁相环为一阶环。CO中心频率可设置为20.3KHz,VCO控制灵敏度可设置为4000Hz/V。butter低通滤波器通带截止频率设置为1000*pi*2。仿真步长设为1e-6。VCO输出为锁定载波二次谐波,经过计数器Counter模块进行二分频以后得到恢复载波。Counter模块设置为计数上升沿触发模式,最大计数数值为1,输出端为计数输出,输出数据类型为双精度。计数器初始状态可设置为0或1。
显示结果:
接收信号
平方输出
带通输出二次谐波
鉴相输出
Vco输出
分频输出恢复载波
发送基带信号
解调输出信号
从图可知,接收信号和发送信号之间存在延迟,来自相干解调低通滤波器相移
试验二 单边带调幅系统建模拟真
一、试验目标
1. 了解单边带调幅系统工作原理。
2. 掌握单边带调幅系统Matlab和Simulink建模过程。
二、试验原理:此次试验采取希尔伯特变换,希尔伯特变换就是将信号中所以频率成份信号分量移相-π/2而得到新信号。单边带调幅和解调原理:双边带调幅所产生上下两个边带包含信息相同,所以只需要传输其中任意一个边带就能够了。将DSB信号中某一个边带去除,所得到就是单边带调制信号。单边带信号突出特点是节省了传输频带。另外,对于话音信号单边带解调,能够不用恢复载波相位,甚至接收机当地载波和发射机发生载波之间存在少许频率差,话音信号解调输出失真也不大。
三、试验内容
1、Matlab设计一个单边带发信机、带通信道和对应接收机,参数要求以下。
(1)输入话音信号为一个话音信号,采样率8000Hz。话音输入后首优异行预滤波,预滤波器是一个频率范围在[300,3400]Hz带通滤波器。其目标是将话音频谱限制在3400Hz以下。单边带调制载波频率设计为10KHz,调制输出上边带。要求观察单边带调制前后信号功率谱。
(2)信道是一个带限高斯噪声信道,其通带频率范围是[10000, 13500]Hz。要求能够依据信噪比SNR要求加入高斯噪声。
(3)接收机采取相干解调方法。为了模拟载波频率误差对解调话音音质影响,设当地载波频率为9.8KHz,和发信机载波频率相差200Hz。解调滤波器设计为300Hz到3400Hz带通滤波器。
2、用Simulink方法设计一个单边带传输系统并经过声卡输出接收机解调结果声音。系统参数参考实例5.9,系统仿真参数设置为50KH
三、试验结果
(1)Matlab仿真
[wav,fs]=wavread('GDGvoice8000.wav');
t_end=1/fs*length(wav);%计算声音时间长度
Fs=50000;%仿真系统采样率
t=1/Fs:1/Fs:t_end;%仿真系统采样时间点
%设计300-3400Hz带通预滤波器H(z)
[fenzi,fenmu]=butter(3,[300 3400]/(fs/2));
%对音频信号进行预滤波
wav=filter(fenzi,fenmu,wav);
%利用插值函数将音频信号采样率提升为Fs=50kHz
wav=interp1([1/fs:1/fs:t_end],wav,t,'spline');
wav_hilbert=imag(hilbert(wav));%音频信号希尔伯特变换
fc=10000;%载波频率Hz
SSB_OUT=wav.*cos(2*pi*fc*t)-wav_hilbert.*sin(2*pi*fc*t);%单边带调制
figure(1);%观察调制前后频谱
subplot(2,2,1);plot(wav(53550:53750)); axis([0 200 -0.3 0.3]);
subplot(2,2,2);psd(wav,10000,Fs); axis([0 25000 -20 10]);
subplot(2,2,3);plot(SSB_OUT(53550:53750)); axis([0 200 -0.3 0.3]);
subplot(2,2,4);psd(SSB_OUT,10000,Fs); axis([0 25000 -20 10]);
wavwrite(0.5*SSB_OUT,Fs,'SSB_OUT.wav');
运行结果:实施后输出基带信号、单边带(上边带)调制输出信号时域波形和估量功率谱密度
Simulink仿真:
输入信号为名为GDGvoice8000.wav音频文件,首先将系统仿真步进时长设置为1/50000,即仿真采样频率为50Khz,对信号进行预滤波,这里采取butter带通滤波器频率设置为300Hz~3400Hz。因为希尔伯特变换需要输入信号离散,所以将信号滤波以后进入一个零阶保持器,将信号离散化,保持器采样时间和系统采样时间相同。一样,因为当地载波也需要希尔伯特变换,所以对当地载波也要进行离散化改变参数设置同上。当地载波频率设置为(10KHz)初相位设置为pi/2,经过希尔伯特改变后进入一个实部和虚部分离器,然后将二者实部虚部分别相乘以后再相加就能够得到SSB调制信号。因为输出时需要是离散化信号,所以要将乘法器采样时间设置为1/50000.。得到调制信号以后就能够进行信道加入噪声,在加入噪声之前,加入一个零阶保持器,仿真步长和前面设置成一样,将信号经过高斯白噪声信道,信噪比SNR设置为50。信道以后,加入一个零阶保持器,仿真步长设置为1/50000,然后对信号进行相干解调,为了能对比结果将想干解调当地载波设置和源信号当地载波有所差距,这里设置为9800Hz。最终经过一个和前一个相同带通滤波器,最终将解调后信号输出。
语音输入M文件:
clc;
clear;
[wavs,fs]=wavread('GDGvoice8000.wav');
t_end=1/fs*length(wavs);
t=(1/fs:1/fs:t_end)';
source=[t wavs];
语音输出M文件:
wavwrite(demod_out,50000,'linkSSbDemod_OUT.wav');
仿真结果:
试验三 数字通信系统建模拟真
一、 试验目标
1、 了解数字通信系统建模过程。
2、 了解数字通信系统仿真过程,并掌握对建模好坏进行分析。
二、 试验原理:
直接序列扩频(Direct Sequence Spread Spectrum),就是用高速率扩频序列在发射端扩展信号频谱,而在接收端用相同扩频码序列进行解扩,把展开扩频信号还原成原来信号。 直接序列扩频方法是直接用伪噪声序列对载波进行调制,要传送数据信息需要经过信道编码后,和伪噪声序列进行模2和生成复合码去调制载波。
码分多址:CDMA是码分多址英文缩(CodeDivisionMultipleAccess),它是在数字技术分支--扩频通信技术上发展起来一个崭新而成熟无线通信技术。CDMA技术原理是基于扩频技术,立即需传送含有一定信号带宽信息数据,用一个带宽远大于信号带宽高速伪随机码进行调制,使原数据信号带宽被扩展,再经载波调制并发送出去。接收端使用完全相同伪随机码,和接收带宽信号作相关处理,把宽带信号换成原信息数据窄带信号即解扩,以实现信息通信。
跳频工作原理是指收发双方传输信号载波频率根据预定规律进行离散改变通信方法,也就是说,通信中使用载波频率受伪随机改变码控制而 随机 跳变。从通信技术实现方法来说,“跳频”是一个用码序列进行多频频移键控通信方法,也是一个码控载频跳变通信系统。从时域上来看,跳频信号是一个多频率频移键控信号;从频域上来看,跳频信号频谱是一个在很宽频带上以不等间隔随机跳变。其中:跳频控制器为关键部件,包含跳频图案产生、同时、自适应控制等功效;频合器在跳频控制器控制下合成所需频率;数据终端包含对数据进行差错控制。
三、试验内容
建立并测试一个直接序列扩频体制码分多址传输系统,对比以Gold序列、m序列和随机整数发生器 Random Integer Generator 作为直接序列扩频扩频序列传输性能,观察两路CDMA码源收发数据波形,测试误码率,并用频谱仪观察直接序列扩频调制前后和解调前后信号频谱。
l 1、建立一个直接序列扩频体制
观察收发数据波形;并用频谱仪观察原信号、直接序列扩频后信号频谱、加噪声信号频谱、解扩后信号频谱;测试误码率。
l 2、对比以Gold序列、m序列(已做)和随机整数发生器 Random Integer Generator作为直接序列扩频码源传输性能,观察波形、频谱(扩频后、加噪声后、解扩后、解调后)、误码率,比较分析传输性能
l 3、建立并测试一个直接序列扩频体制码分多址传输系统
观察两路CDMA码源收发数据波形;观察误码率;观察频谱(各自扩频后、加噪声后、各自解扩后、各自解调后);
l 4、对比以Gold序列、m序列和随机整数发生器 Random Integer Generator作为直接序列扩频码源码分多址传输系统
观察波形、频谱(各自扩频后、各自解调后)、误码率,分析传输性能
l 5、完成跳频扩频传输系统
四、试验结果
1、Simulink仿真:gold
Bernoulli Binary Generator用于产生数据流,其采样时间设置为0.01s。PN Sequence Generator用于产生伪随机扩频序列,其采样时间设置为0.0005s,这么输出码片速率为chip/s。为了使扩频模块上数据采样速率相同,需要对数据流进行升速率处理。Unipolar to Bipolar Coneverter用于完成数据和扩频序列双极性变换。乘法器输出就是扩频输出,其码速率等于采样速率,即每个采样点就是一个码片。扩频输出信号以BPSK方法进行调制。调制输出信号是复信号,采样率为次/s。调制也采取通带模型实现,为了使频谱观察范围达成4KHz,需要被观察信号采样率达成8000次/s,为此,以升速率模块配合采样保持模块将调制输出信号采样率提升到8000次/s。信道由AWGN Channel模块、采样率为次/s300Hz离散正弦波源和加法器模块组成。接收机当地PN序列由和发射机中完全相同参数PN Sequence Generator模块和单双极模块组成,其同时双极性伪随机码送入解扩器中和接收信号相乘进行解扩,然后送入BPSK解调器等效基带模型进行解调和解码。BPSK解调器中设置sample per symbol 参数为20。AWGN信道中方差设置为10。
仿真结果:
PN:
RANDOM:
2、比较分析:
分析M文件:
clear;clc;
sigma=0:5:10;
for k=1:length(sigma)
sigma2=sigma(k);
sim('fenxi1.mdl');
sigmademod(k,:)=simout(end,1);
sigmademod1(k,:)=simout1(end,1);
sigmademod2(k,:)=simout2(end,1);
end
plot(sigma,sigmademod,'r');hold on;
plot(sigma,sigmademod1,'g');hold on;
plot(sigma,sigmademod2,'b');hold on;
xlabel('信道输入方差');ylabel('误码率');legend('PN','GOLD','RANDOM')
3、码分多址传输系统
仿真模型:
各模块参数设置和前一个试验参数设置是一样
Gold:
仿真结果:
PN:
RANDOM:
4、比较分析:
5、完成跳频扩频传输系统
跳频输出信号带宽约为1600Hz,其等效低通信号频率变换范围为-800~800Hz。为了使仿真观察频谱范围达成-~Hz,信号采样率为4000次/s。跳频速率为50跳/s,故每跳连续时间为0.02s,对应采样点数为80点。二进制信源数据采取Bernoulli Binary Generator产生,采样时间设置为0.01s。然后用M-FSK Modulator Baseband模块完成2FSK调制,调制元数为2,频率间隔为100HZ。伪随机码中每5bit转换为一个0——31随机整数,以控制跳频载波输出频率。因为假设接收机伪随机码是理想同时,且信道没有时延,所以在模型中可直接用发送方伪随机码作为接收机恢复伪随机序列。
由PN序列转换得到0-31随机整数由子系统Subsystem PN Sequence产生,子系统中,PN序列模块采样时间间隔设置为1/250s,并设置按帧输出,每帧5个样值(即5个码片),将帧格式转换为基于取样信号后,用Bit to Integer Converter将每5码片转换为一个随机整数输出,作为跳频载波频率点控制信号。输出随机整数速率是250/5=50个/s,等于跳频速率。跳频器采取M-FSK Modulator Baseband1完成,其设置参数是:调制元数32,输入数据类型为整型, 频率间隔为50,每符号采样点数为80,这么该模块将输出在32个频点上跳频速率为50次/s伪随机跳频载波信号。它是复信号,采样率和2FSK信息调制输出信号相同,为4000次/s。信息调制输出和跳频载波进行相乘以实现跳频扩频。 扩频输出经过AWGN信道并加入一个150Hz单频正弦波作为干扰源。 在接收端,当地跳频载波是发送跳频载波信号共轭信号,以相乘完成解跳后,用M-FSK Demodulator Baseband完成2FSK信息解跳,其设置和信息调制器对应。和发送数据相比,解调输出数据将会延迟一个码元间隔时间0.01s。系统中可对比观察收发数据波形,测试误码率,并用频谱仪观察跳频。
仿真结果:
试验心得:
经过这一周MATLAB和通信仿真课程设计我收获颇多,其中最关键就是提升了我建立仿真模块能力。此次试验在老师讲解下先对整个设计试验步骤有所了解,再依据自己了解画出设计仿真程序框图。依据书本上提到模块功效和老师帮助指导下建立模型,最终将具体参数进行设置。运行所建仿真模型,得到想要试验结果。整个过程使我不仅巩固了书本上部分相关基础知识,而且对于单边带调制解调有了更深入了解。
在试验二试验过程中,经过书本上步骤图和模型建立,让我了解了通信系统建模模型。而经过对比以Gold序列、m序列和随机整数发生器 Random Integer Generator 作为直接序列扩频扩频序列传输性能,让我对通信系统传输有了更深刻了解。
最终,MATLAB和通信仿真课程设计让我获益匪浅,同时也让我发觉本身存在不足之处,我将努力改善。谢谢老师指导和帮助。
展开阅读全文