matlab ask函数,matlab ASK通信系统

matlab ASK通讯系统

要用matlab搭个最简单的通讯系统,做一点想法的测试,基本搭好了,貌似我觉得我注释还是写的非常细了

% Create by Edward.xu

% Must,16,12,2012

% 280599580@qq.com

%%

close all; %关闭所有图

clear all; %清楚所有缓存变量

clc; %清空命令行

%初始化

n=32; %产生n位随机数作为信号,该仿真中标准32

fc=1000000; %载波,该仿真中标准1000000

bitRate=1000000; %这里也可以说是接收端的比特率,2*bitRate为奈奎斯特采样频率,该仿真中标准1000000

sampleRate=2; %奈奎斯特采样频率等于2*bitRate,这里调节的是采样的点数,该仿真中标准1000000

N=64; %每片信号长度,就是1位随机信号用多少个点来表示,该仿真中标准64

snr=30; %信噪比,单位db,该仿真中标准30

gate=0.5; %判决电压,在解调的时候要根据接收信号最后的幅度进行0,1信号判断,该仿真中标准0.5

%%

picNum = 8; %中间绘图数目

figure(1); %第一幅图为主过程

%%

%发送信号产生,sendSignal为结果

sendSignal=randint(1,n); %产生n位0,1交替的随机数,长度为之前设置

bit=[]; %存最后结果,结果里有n*N个数,每N位定义了一片,共n片

for i=1:length(sendSignal)

if sendSignal(i)==0

bit1=zeros(1,N); %每一位随机数用N位数去表示,为了仿真这样写,表示时延

else

bit1=ones(1,N);

end

bit=[bit,bit1]; %依次加入产生的数据>>bit1

end

subplot(picNum,1,1); %发送端信号波形

stairs(1:length(sendSignal),sendSignal),title('发送端二进制信号'),grid on; %这里采用stairs进行画图,为01序列

axis([1,length(sendSignal),-1.5,1.5]);

subplot(picNum,1,2); %发送端信号波形

plot(1:length(bit),bit),title('发送端二进制波形'),grid on;

axis([0,(N)*length(sendSignal),-1.5,1.5]);

%sendSignal-发送信号,bit-发送二进制波形

%%

t=linspace(0,1/bitRate,N); %创建一个用来存放调制完信号的数组,从0-1/bitRate,中间N个元素

c=sin(2*pi*t*fc); %产生载波信号

transmittedSignal=[]; %调制完的信号存放数组初始化

for i=1:length(sendSignal) %调制,sendSignal(i)*c,和载波相乘

transmittedSignal=[transmittedSignal,sendSignal(i)*c]; %调制完依次存放数据

end

subplot(picNum,1,3); %画调制完的信号

plot(1:length(transmittedSignal),transmittedSignal);

title('ASK后的波形'),grid on;

axis([0,length(transmittedSignal),-1.5,1.5]);

%transmittedSignal-调制信号

%%

%对比发送和调制

figure(2); %第二幅是一个对比

plot(bit,'b');

hold on;

plot(1:length(transmittedSignal),transmittedSignal,'r');

axis([0,length(transmittedSignal),-1.5,1.5]);

title('原始信号经调制后的对比'),grid on;

legend('发送端二进制波形','ASK后的波形');

figure(1); %恢复到第一幅图继续

%%

%加上信道的高斯白噪声

signalPlusNoise=awgn(transmittedSignal,snr,'measured'); %awgn是Matlab库函数,直接加入加性高斯白噪声,'measured'标识测定信号强度

subplot(picNum,1,4); %画调制完的信号

plot(1:length(signalPlusNoise),signalPlusNoise);

title('接收端波形(包含噪声)'),grid on;

axis([0,length(signalPlusNoise),-1.5,1.5]);

%signalPlusNoise-调制信号加上高斯白噪声

%%

%对比发送和加上高斯白噪声的干扰

figure(3); %第三幅是一个对比

plot(bit,'b');

hold on;

plot(1:length(signalPlusNoise),signalPlusNoise,'r');

axis([0,length(signalPlusNoise),-1.5,1.5]);

title('原始信号经调制加上高斯白噪声后的对比'),grid on;

legend('发送端二进制波形','接收端波形(AWGN)');

figure(1); %恢复到第一幅图继续

%%

%对其接收信号进行全波整流

rectifyingSignal=abs(signalPlusNoise); %整流,这里实际上是全波整流,由于无线发射信号是有周期的

%可以认为其是一个ac信号,有负半周期,模拟解调不好处理

%所以对其副半周期的信号对折到正半周期,变成一个dc信号

%然后对其进行解调,对折是全波,直接滤去是半波整流

subplot(picNum,1,5); %画整流完的信号

plot(1:length(rectifyingSignal),rectifyingSignal);

title('接收端波形(整流后)'),grid on;

axis([0,length(rectifyingSignal),-1.5,1.5]);

%rectifyingSignal-接收端全波整流后的信号

%%

%对比发送和全波整流的结果

figure(4); %第四幅是一个对比

plot(bit,'b');

hold on;

plot(1:length(rectifyingSignal),rectifyingSignal,'r');

title('原始信号经全波整流后信号的对比'),grid on;

axis([0,length(rectifyingSignal),-1.5,1.5]);

legend('发送端二进制波形','接收端波形(整流后)');

figure(1); %恢复到第一幅图继续

%%

%采用低通滤波器进行包络检波(LPF),就是提取接收信号的包络线

%这里LPF是通过toolbox计算的,非自适应或者盲信号检测用的位同步方法,所以片信号长度N不能够过小

%否则提取不了正确的包络线

LPFnumber=[-0.000974115228971540-5.27232987826710e-051.80067726486594e-050.0001454369396715300.0003376930321877910.0006039619342660790.0009539663681081580.001397040450989870.001941617548451700.002596541879989000.003368208219086180.004262337038668350.005282324312780080.006429459829636180.007702712615214660.009098356152680720.01060990786731550.01222814954159050.01394090488284470.01573340797932100.01758821795601220.01948563609911500.02140400738578050.02331982561172910.02520872136087800.02704507672698690.02880340700803920.03045831218821870.03198511184610850.03336072916036110.03456429671298940.03557582349313460.03638183714714220.03696580060288140.03731972734163230.03743833865960530.03731972734163230.03696580060288140.03638183714714220.03557582349313460.03456429671298940.03336072916036110.03198511184610850.03045831218821870.02880340700803920.02704507672698690.02520872136087800.02331982561172910.02140400738578050.01948563609911500.01758821795601220.01573340797932100.01394090488284470.01222814954159050.01060990786731550.009098356152680720.007702712615214660.006429459829636180.005282324312780080.004262337038668350.003368208219086180.002596541879989000.001941617548451700.001397040450989870.0009539663681081580.0006039619342660790.0003376930321877910.0001454369396715301.80067726486594e-05-5.27232987826710e-05-0.000974115228971540

]; %这些分母项直接用toolbox生成,这里只要是一个低通滤波器的冲击响应公式,分母项很多,分子项为1

filterSignal=filter(LPFnumber,1,rectifyingSignal); %LPFnumber是分母,1为分子,后面为进入滤波器的信号

subplot(picNum,1,6); %画整流完的信号

plot(1:length(filterSignal),filterSignal);

title('接收端波形(包络检波后)'),grid on;

axis([0,length(filterSignal),-1.5,1.5]);

%filterSignal-包络检波完的信号

%%

%对比发送和包络检波的结果,这里能看到有一个相位差,是用LPF低通滤波器产生的

%所以在其之后要对其进行相位补偿

figure(5); %第五幅是一个对比

plot(bit,'b');

hold on;

plot(1:length(filterSignal),filterSignal,'r');

title('原始信号经包络检波后信号的对比'),grid on;

axis([0,length(filterSignal),-1.5,1.5]);

legend('发送端二进制波形','接收端波形(包络检波后)');

figure(1); %恢复到第一幅图继续

%%

%LPF的相位延迟补偿

delay=fix(length(LPFnumber)/2); %延迟时间

phaseCompensation=[]; %初始化相位补偿结果数组

i=delay; %i始终作为零时变量

while (i<=length(filterSignal)) %相位补偿,也就是整体把接收信号进行平移i个单位

phaseCompensation=[phaseCompensation,filterSignal(i)];

i=i+1;

end

subplot(picNum,1,7); %画相位补偿的信号

plot(1:length(phaseCompensation),phaseCompensation);

title('接收端波形(相位补偿后)'),grid on;

axis([0,length(phaseCompensation),-1.5,1.5]);

%phaseCompensation-相位补偿完的信号

%%

%对比发送和相位补偿的结果

figure(6); %第六幅是一个对比

plot(bit,'b');

hold on;

plot(1:length(phaseCompensation),phaseCompensation,'r');

title('原始信号经相位补偿的接收信号的对比'),grid on;

axis([0,length(phaseCompensation),-1.5,1.5]);

legend('发送端二进制波形','接收端波形(相位补偿后)');

figure(1); %恢复到第一幅图继续

%%

%判决解调

bitstream=[]; %解码结果存放初始化

LL=(fc/bitRate)*N; %解码的步长,与其说步长不如说片长更好,2为奈奎斯特采样

i=LL/sampleRate;

while (i<=length(phaseCompensation)) %判决

bitstream=[bitstream,phaseCompensation(i)>=gate]; %gate为判决电压

i=i+LL; %按照一片N进行一次判决

end

subplot(picNum,1,8); %画相位补偿的信号

stairs(1:length(bitstream),bitstream); %同样用stairs进行画图,为01序列

title('接收端二进制信号'),grid on;

axis([1,length(bitstream),-1.5,1.5]);

%bitstream-解调之后的结果

%%

%对比发送和接收的结果

figure(7); %第六幅是一个对比

stairs(1:length(sendSignal),sendSignal,'b:p')

hold on;

stairs(1:length(bitstream),bitstream,'ro-.');

grid on;

title('接收信号和发送信号的对比');

axis([1,length(bitstream),-1.5,1.5]);

legend('发送信号','接收信号');

150430775.jpg

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值