MATLAB通信系统仿真(一)模拟调制与解调

模拟调制与解调



前言

主要内容来自参考资料[2],在学习记录的同时勘正了书中代码的部分错误。


一、拟合

常用函数:polyfit(),polyval(),功能如下图所示:
来源见互联网

二、调制与解调仿真

代码如下(示例):

SSB(单边带调制)

希尔伯特变换

m ^ ( t ) = m ( t ) / π t      M ^ ( f ) = − j × s g n ( f ) M ( f ) \hat{m}(t)=m(t)/\pi t\,\,\,\,\hat{M}(f)=-j\times sgn(f)M(f) m^(t)=m(t)/πtM^(f)=j×sgn(f)M(f)其中 m ^ ( t ) \hat{m}(t) m^(t) m ( t ) m(t) m(t)的希尔伯特变换,而 M ^ ( f ) \hat{M}(f) M^(f) M ( f ) M(f) M(f)为两者的傅里叶变换

假设 m ( t ) m(t) m(t)为消息信号,则对其进行单边带调制,得到调制信号 u ( t ) u(t) u(t)
u ( t ) = A c m ( t ) c o s ( 2 π f c t ) / 2 ∓ A c m ^ ( t ) c o s ( 2 π f c t ) / 2 u(t)=A_cm(t)cos(2\pi f_ct)/2\mp A_c\hat{m}(t)cos(2\pi f_ct)/2 u(t)=Acm(t)cos(2πfct)/2Acm^(t)cos(2πfct)/2使用MATLAB进行仿真。对正弦信号 y = sin(t) 进行希尔伯特变换,并绘图。

clear all;close all
t = 0:0.1:30;
y = sin(t);
s_y = hilbert(y);
plot(t,y,'linewidth',2);hold on
plot(t,real(s_y),'ro',t,imag(s_y),'bs');
legend('原信号','希尔伯特变换器实部(仍然是原信号)','希尔伯特变换器虚部')

绘图结果如下
在这里插入图片描述

SSB调制

基带信号是在150Hz~400Hz内,幅度随频率逐渐递减的音频信号,对其进行SSB调制,仿真时间为1s。载波频率为1000Hz,采样频率为10000Hz。

示例MATLAB代码:

% 基带信号是在150Hz~400Hz内,幅度随频率逐渐递减的音频信号,对其进行SSB调制,仿真时间为1s
clear all;close all;
fs = 10000;
fc = 1000;
t = 1/fs:1/fs:1;%仿真时间
f_v = 0:length(t)-1;
m(fs)=0;%创建长度为fs的消息信号
for f = 150:400
    m = m + 0.01*sin(2*pi*f*t)*(400-f);%m(t)包含许多频率分量,且频率分量的幅度随频率递减
end
m_shift = imag(hilbert(m));%基带信号的希尔伯特变换
carriercos = cos(2*pi*fc*t);%载波
carriersin = sin(2*pi*fc*t);%载波的正交变换
ssb_u = m.*carriercos - m_shift.*carriersin; %上边带SSB
ssb_l = m.*carriercos + m_shift.*carriersin; %上边带SSB

figure;
subplot(421);plot(t,carriercos,t,carriersin,':m');axis([0 0.01 -1 1]);title('载波及其正交变换')%载波
subplot(422);plot(f_v,abs(fft(carriercos)));axis([0 2000 -500 12000]);title('载波频谱图')      %载波频谱
subplot(423);plot(t,m);axis([0 0.01 -500 500]);title('基带信号波形图')                       	%基带信号
subplot(424);plot(f_v,abs(fft(m)));axis([0 2000 -500 12000]);title('基带信号频谱图')        	%基带信号频谱图
subplot(425);plot(t,ssb_u);axis([0 0.01 -500 500]);title('%SSB上边带波形图')                   %SSB上边带波形图
subplot(426);plot(f_v,abs(fft(ssb_u)));axis([0 2000 -500 12000]);title('SSB上边带频谱图')      %SSB上边带频谱图
subplot(427);plot(t,ssb_l);axis([0 0.01 -500 500]);title('SSB下边带波形图')                    %SSB下边带波形图
subplot(428);plot(f_v,abs(fft(ssb_l)));axis([0 2000 -500 12000]);title('SSB下边带频谱图')      %SSB下边带频谱图
suptitle('波形图与频谱图')

仿真结果:
在这里插入图片描述

SSB解调

在实际应用中,一般采用高稳定度的晶体振荡器或频率合成器来产生本地解调载波,无需像DSB解调那样用PLL恢复载波,大大降低了单边带接收机的技术复杂度与成本。

在本例中,将采用相干解调法,即产生本地振荡波形与接收信号相乘,再经过低通滤波,恢复原始信号,但由于本地振荡与载波不严格同频同相,此法存在一定的频率偏移和相位偏移。

示例代码:

out = ssb_u.*carriercos;%相干解调
[a,b] = butter(4,500/(fs/2));    %设计4阶低通滤波器,且截止频率为500Hz
out1 = filter(a,b,out);       %滤波输出

figure;
subplot(323);plot(t,out);axis([0 0.01 -500 500]);title('解调信号波形图')                       	
subplot(324);plot(f_v,abs(fft(out)));axis([0 2000 -500 12000]);title('解调信号频谱图')        
subplot(325);plot(t,out1);axis([0 0.01 -500 500]);title('滤波信号波形图')                       
subplot(326);plot(f_v,abs(fft(out1)));axis([0 2000 -500 12000]);title('滤波信号频谱图')        
subplot(321);plot(t,ssb_u);axis([0 0.01 -500 500]);title('%SSB上边带波形图')                   %SSB上边带波形图
subplot(322);plot(f_v,abs(fft(ssb_u)));axis([0 2000 -500 12000]);title('SSB上边带频谱图')      %SSB上边带频谱图
suptitle('波形图与频谱图')

仿真结果图:
在这里插入图片描述

角度调制

频率调制

示例代码

%% 频率调制 FM
clear all;close all;
t0 = 0.15;%信号保持时间
ts = 0.0005;%采样时间
fc = 200;%载波频率
kf = 50;%调制系数
fs = 1/ts;%采样频率
df = 0.25;%频率分辨率
t_v = [0:ts:t0];%时间序列
m = [ones(1,t0/(3*ts)),-2*ones(1,t0/(3*ts)),zeros(1,t0/(3*ts)+1)];%消息信号m(t),t/ts是序列的数目。注意端点,要+1
m_int(length(m)) = 0;
%以下两种方法都可实现对m(t)的积分。法二更直观,一定要乘以ts!
for i = 1:length(m)-1
    m_int(i+1) = m_int(i) + m(i)*ts;
end
% for i = 1:length(m)
%     m_int(i) = ts*sum(m(1:i));
% end
[M,m,df1] = fftseq(m,ts,df);%傅里叶变换
M = M/fs;
f = [0:df1:df1*(length(m)-1)]-fs/2;%[-fs/2,fs/2]的图像
u = cos(2*pi*fc*t_v + 2*pi*kf*m_int);%调制信号
figure
plot(t_v,u)
[U,u,df1] = fftseq(u,ts,df);%傅里叶变换
U = U/fs;
%画图
figure;
subplot(221);plot(t_v,m(1:length(t_v)));%经过fftseq函数后,m的长度与t_v的长度不一定相等,但有效长度相等
axis([0 0.15 -2.1 2.1]);
xlabel('时间');title('消息信号')
subplot(222);plot(t_v,u(1:length(t_v)))
axis([0 0.15 -2.1 2.1]);
xlabel('时间');title('调频信号')

subplot(223);plot(f,abs(fftshift(M)));
xlabel('频率');title('消息信号频谱')
subplot(224);plot(f,abs(fftshift(U)));
xlabel('频率');title('调制信号频谱')

仿真结果图:
在这里插入图片描述

相位调制

示例代码

clear all;close all;
t0 = 0.25;%信号保持时间
ts = 0.0005;%采样时间
fc = 200;%载波频率
fs = 1/ts;%采样频率
df = 0.25;%频率分辨率
t_v = [0:ts:t0];%时间序列
m(length(t_v)) = 0;
lent = length(t_v)-1;
for i = 1:(t0/ts/4)
    m(i) = i;
end
for i = (lent/4+1):3*(lent/4)
    m(i) = m(lent/4) - i+lent/4;
end
for i = (3*lent/4+1):lent+1
    m(i) = m(3*lent/4) + i-lent*3/4
end
m = m/50;

[M,m,df1] = fftseq(m,ts,df);%傅里叶变换
M = M/fs;
f = [0:df1:df1*(length(m)-1)]-fs/2;%[-fs/2,fs/2]的图像

u = cos(2*pi*fc*t_v + m(1:length(t_v)));%调制信号
[U,u,df1] = fftseq(u,ts,df);%傅里叶变换
U = U/fs;
%画图
figure;
subplot(221);plot(t_v,m(1:length(t_v)));%经过fftseq函数后,m的长度与t_v的长度不一定相等,但有效长度相等
axis([0 0.25 -3 3]);
xlabel('时间');title('消息信号')
subplot(222);plot(t_v,u(1:length(t_v)))
axis([0 0.15 -2.1 2.1]);
xlabel('时间');title('调频信号')

subplot(223);plot(f,abs(fftshift(M)));
xlabel('频率');title('消息信号频谱')
subplot(224);plot(f,abs(fftshift(U)));
xlabel('频率');title('调制信号频谱')

仿真结果图:在这里插入图片描述

相关函数

fft()和fftshift()的区别

M = fft(m)是对消息信号 m(t) 进行快速FFT变换,得到取值范围为 (0,fs) 的函数 M(f) ,如果想画出取值范围为 (-fs/2,fs/2) 的函数时,需要用到 fftshift() 函数。

需要注意的是,使用时直接 fftshift(M) 即可,该函数只是实现对函数 M(f) 的移位,并未对其进行FFT变换。

详情见博客: https://www.cnblogs.com/limanjihe/p/10014142.html

参考资料

[1] ttps://blog.csdn.net/u014630987/article/details/70156489
[2] 《MATLAB通信系统建模与仿真(第2版)》 邓奋发 编著

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
众所周知,人工智能是当前最热门的话题之一, 计算机技术与互联网技术的快速发展更是将对人工智能的研究推向一个新的高潮。 人工智能是研究模拟和扩展人类智能的理论与方法及其应用的一门新兴技术科学。 作为人工智能核心研究领域之一的机器学习, 其研究动机是为了使计算机系统具有人的学习能力以实现人工智能。 那么, 什么是机器学习呢? 机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。 机器学习的用途 机器学习是一种通用的数据处理技术,其包含了大量的学习算法。不同的学习算法在不同的行业及应用中能够表现出不同的性能和优势。目前,机器学习已成功地应用于下列领域: 互联网领域----语音识别、搜索引擎、语言翻译、垃圾邮件过滤、自然语言处理等 生物领域----基因序列分析、DNA 序列预测、蛋白质结构预测等 自动化领域----人脸识别、无人驾驶技术、图像处理、信号处理等 金融领域----证券市场分析、信用卡欺诈检测等 医学领域----疾病鉴别/诊断、流行病爆发预测等 刑侦领域----潜在犯罪识别与预测、模拟人工智能侦探等 新闻领域----新闻推荐系统等 游戏领域----游戏战略规划等 从上述所列举的应用可知,机器学习正在成为各行各业都会经常使用到的分析工具,尤其是在各领域数据量爆炸的今天,各行业都希望通过数据处理与分析手段,得到数据中有价值的信息,以便明确客户的需求和指引企业的发展。
### 回答1: 使用 MATLAB ASK (Amplitude Shift Keying) 的调制解调系统仿真实验包括以下步骤: 1. 定义载波频率和比特率:首先,我们需要定义调制系统的载波频率和比特率。载波频率是调制信号的频率,比特率是数据传输的速率。 2. 生成数字信号:生成要传输的数字信号。这可以是一个数字序列,其中每个数字表示一个比特。 3. 将数字信号转换为基带信号:使用脉冲调制生成将数字信号转换为基带信号。这通常涉及到将数字信号映射为离散的脉冲信号。 4. 进行ASK调制:将基带信号与载波信号相乘,进行ASK调制。这可以通过将基带信号与幅度为A的载波信号相乘来实现,其中A是振幅。 5. 添加噪声:在调制信号中添加噪声以模拟实际信道中的噪声。 6. 进行ASK解调:在接收端,将接收到的ASK调制信号与与发送端相同的载波信号相乘,进行ASK解调。这将移除载波频率,使信号返回基带。 7. 还原数字信号:使用滤波器滤除噪声,并对解调信号进行采样和判决,以还原传输数据的数字信号。 8. 比特错误率(BER)分析:比特错误率是比较解调后的数字信号与原始数字信号之间的错误比特数。通过对不同信噪比条件下的BER进行计算和分析,我们可以评估系统的性能。 通过以上步骤进行仿真实验,我们可以评估ASK调制解调系统的性能,并对不同条件下的BER进行分析。MATLAB提供了丰富的工具箱和函数,可用于实现这些步骤,从而进行ASK调制解调系统仿真实验。 ### 回答2: 使用MATLAB进行ASK调制解调系统仿真实验,首先我们需要明确ASK调制的原理和步骤。 ASK调制(Amplitude Shift Keying)是一种数字调制技术,利用信号的不同幅度来表示数字信息。其基本原理是将数字信号表示为高低电平,并与载波信号进行幅度调制。 在MATLAB中,可以通过以下步骤实现ASK调制解调系统仿真实验: 1. 生成数字信号:根据需要传输的数字信息,生成相应的数字信号序列。可以使用MATLAB中的函数生成或手动定义。 2. 生成载波信号:选择合适频率的载波信号,并生成与数字信号长度相同的载波信号序列。 3. 进行幅度调制:将数字信号与载波信号进行幅度调制。通过将数字信号乘以载波信号来实现幅度调制。如果数字信号为高电平,则将其与载波信号相乘;如果数字信号为低电平,则将其与载波信号相乘并取相反数。 4. 增加噪声:为了模拟真实信道的干扰,可以向调制信号中添加噪声。可以使用MATLAB的函数为信号添加高斯噪声。 5. 解调过程:对接收到的调制信号进行解调,恢复出原始的数字信号。可以通过检测调制信号的幅度大小来判断数字信号的高低电平。 通过进行上述步骤,可以在MATLAB中实现ASK调制解调系统仿真实验。根据实验结果,可以评估系统的性能并进行性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值