首页/文章/ 详情

经典重学:BPSK调制解调器系列文章

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
10天前浏览924

本文摘要:(由ai生成)

本文介绍了BPSK调制解调器的MATLAB编程教学,强调通信基础知识的重要性。作者分享了编程示例,鼓励通过实践理解通信原理,并讨论了AI在工科领域的应用。作者还提及了持续学习和提问的重要性,并承诺更新系列文章以助掌握通信知识。最后,文章包含傅里叶变换教学内容,展示了MATLAB中实现信号频谱分析的方法。

很多年写了一篇关于BPSK调制解调器的教学文章,传阅者过万,好评如潮。标题中的经典二字为自评,相对而言,自视为鼓励。然后慢慢的形成了系列。大约八年之后,再次写作此文,只为能帮助更多的人,尤其是初学通信知识的人,还有那些为考研奋战的学子们。这次写的文章简介,不仅有文字,有代码,还会加入讲解视频,这所作的一切就是让大家更加容易的把握通信知识。一起肯下通信专业道路上最开始啃也是难啃和最值得啃的大骨头—通信仿真!

为什么要写这个话题?自认为最满意的答案是:这是我们通信专业的基础,也是我们学习通信内容的基石中最厚重的一块。唯有掌握透彻,才能不断往上构建通信高层建筑!在二十多年的学习工作过程中,我深刻体会到基础知识对于科研的重要性。将基础知识真正地搞透,会让我们后续的科研提速,所以学习本系列会有着事半功倍的效果。网上这类文章太少了,要么是纯理论仿真,要么是知识点割裂的讲。于是我就花了两年时间将这个系列写全了,理论结合实践,文章中还穿插各种工程实践。如果大家付费阅读了,请务必仔细学习本文的所有内容。写出好文章不是一件容易的事,也请大家珍惜,建议收藏。2024年2月26日,考研成绩公布。我的学生考的不理想,我也跟着神伤,希望这篇文章能够给学《通信原理》的学生们带来一些启发!本文需要付费五毛才能阅读完整,这样设置的目的只是希望文章不能被复 制,敬请谅解!

周国平先生的书
写作是困难时期的自我救赎。当年本人生病的时候,确实曾思考下半辈子该怎么活?生病也许会让自己失去工作,但不能让自己失去活下去的勇气。于是在那个手和脑不听使唤的特殊时期,我的写作却变得更加的勤奋。磨难也许会让人变的坚强!
小时候就有写日记的习惯,坚持了很多年。等到工作了以后,就将工作内容和生活佚事一起记录了下来。待到离职时,已经累积了厚厚的五本笔记,记载了十多年的工作经历和人生故事。正因为有这个习惯,所以工作过程中所写的代码和文档都会事无巨细地保留了下来,同时使得程序中的注释非常的齐全,文档的内容也非常的完备。这就为我以后回归校园专注于传播知识打下了坚实的基础。有了这些存粮,我的店铺开张起来就会货源充足,一开就是七年。在公 众 号里面已经展示了程序和工程文档,后续还会逐渐增加公开频次。
我和写作有一种神圣关系,我的写作是在履行某种义务。索尔仁尼琴的这句话一直在激励我。
经典知识可以重学,还需要反复重学。在对经典文章回味的同时,依旧可以发现新的知识点。笔者力求将知识点讲得更加深入浅出,致力于让电子、通信领域的工科学子们更加快速和通透的掌握基础理论,助力后续的科研学习过程。科研兴国!
掌握基础知识十分重要,这也是笔者的教学重点,也是自己的学习经验。不好高骛远是我教学的宗旨,教学中的务实态度使得我对基础知识的讲解层次不断提升,再结合自身的工作经验,自认可以讲透BPSK调制解调器!一起来学习专业内容吧!浓缩的都是精华!一篇文章就可以让你对《通信原理》不再抗拒!本文长达两万多字,如果大家仔细读完全部内容,肯定受益匪浅!
之前《通信原理》中关于通信模型的定义!
快速学习第一章的内容!
这是学习《通信原理》的纲!
在教学过程中,本人就是依据这幅图逐步的展开讲解通信知识的,讲解过程中把其中涉及的模块的功能在不断地细化,然后就形成了一系列课程。
这些框图来自于樊老的《通信原理》,也是很多学校的教材。要想搞懂调制解调器就得从这个入手!要学的通透,就要看这个模型的仿真程序!哪里找?
2024年1月,和学生在考研后进行了长时间交流。交流什么?学习方法!专业课的知识点可以考的非常灵活,不能指望靠背题目过关!我所教的学生中普遍存在“死学”的现象,硬是把工科学习变成了文科学习,危害无穷!这种学生即使考上研究生,也不会走入研究之路!这是我在课堂上一直告诫的!可惜的是听进去的同学很少很好!好在有互联网让我的知识可以传承,我要学习陈志新老师!不忘初衷,后续还会增加或者更新文章。
继续看知识点!
数字信号发送和接收模型也可以这么定义!
记住:这是数字传输!
模拟传输没有编译码内容!
数字信号要想在信道中传输,必须在发射机的基带部分进行脉冲成形,将数字信号转换成脉冲信号;脉冲信号到达接收机后,在基带部分进行采样判决,将数字信号恢复出来。
脉冲成型的作用主要有两个,一个是形成带限信号,还有一个就是实现无 码间干扰的传输。后者理解起来会有些难度,至少当年我学的时候就有很多困惑。这是通信知识中的难点!
本系列文章从PSK调制方式讲起,这是本人的精心安排。在上个世纪的2G时代,移动通信系统用的是GMSK调制方式(后续会详细讲解这类调制技术)。当要实现高速数据传输的时候。系统采用了8PSK。然后到了3G的时候开始转向了QAM。随着卫星通信的发展,PSK调制方式必然再次进入大家的视野。最近华为手机的卫星通信功能让大家眼前一亮,这遥遥领先的背后支撑就是PSK调制解调技术。QAM调制方式现在是地面移动通信的主流,这方面的知识也离不开PSK调制方式,因为它是PSK和ASK的结合体。所以我决定从PSK调制方式开始讲起。
写这样的文章是为力求让大家能够通过理解程序读懂半本《通信原理》。付费方式的文章必然会有干货,不然会被大家骂。作为一个知识分子。不可能只是为了钱而写文章,还要为名,一个传播知识的工程师之名。如果你想让我到这个资格,那就请你读完文章后,在文章的下面写出留言,对我推荐的文章点评一番,教学相长。
有了初步的通信系统概念,我们就一起看看框图中的调制和解调该如何完成。这部分内容可以组成最简通信系统,写出这样的系统程序就能涵盖大部分《通信原理》的知识。一些非常重要的知识点,比如信噪比、比特信噪比、等效换算、采样定理、滚降成型滤波器、匹配滤波、最佳采样、误码率性能等,都将在程序中一一涉及。通过程序来消化这些知识点,会有直观的感受,理解后会恍然大悟,再做题就会有解题思路。原来这个概念应该这么用!!!现在就开始进行详细讲解。本人在仿真秀网站上有一个系列课程,专门讲解通信系统仿真,很多读者给予了很高的评价。
精心打造数年的通信专业课程!这种课程和讲解方式结合了实际工作中的需要,不再单纯是依靠书本中的知识进行加,所以它是承接本科学习和研究生学习的桥梁。我为此付出了很多努力。当初在编排这个课程的时候,确实想告诉大家,工科需要实践,想学好工科更需要多多实践,纯理论的学习无益于后续考研能力的发展。
在公 众 号“通信工程师专辑”里,这个系列沿着由简到难的脉络写,不断的添加和实际环境相契合的模块,使得程序涉及的知识点逐渐增加,这样的学习让人不至于一开始就对通信产生恐惧。
AI时代来了!
向国内的AI求助,它会给出什么答案呢?
提问:用MATLAB编写BPSK调制解调器程序,含有载波!
回答:在MATLAB中编写一个包含载波的BPSK(二进制相移键控)调制解调程序,你需要执行以下步骤:
1. 生成随机比特流:首先,你需要生成一个随机的二进制数据流,这将是我们调制到载波上的信号。
2. BPSK调制:根据比特流的值,改变载波的相位。对于BPSK,如果比特为0,相位不变(比如0弧度);如果比特为1,相位变化180度(比如π弧度)。
3. 添加高斯白噪声:在传输过程中,信号可能会受到噪声的影响。为了模拟这种情况,可以在调制后的信号上添加高斯白噪声。
4. 信号在信道中传输:这里我们假设信号已经通过一个理想的信道传输。
5. BPSK解调:在接收端,通过比较接收信号与原始载波的相位差来判断原始比特是0还是1。
6. 性能评估:最后,可以通过比较解调后的比特流与原始比特流来评估系统的性能,例如计算误码率。
以下是一个简单的MATLAB代码示例,实现了上述BPSK调制解调过程:
% 定义参数
Fs = 1000; % 采样频率
Tb = 0.001; % 比特时间
N = 1000; % 生成比特的数量
载波频率 = 100; % 载波频率
% 生成随机比特流
data = randi([0 1], 1, N);
% 生成基带信号
t = (0:N-1)*Tb; % 时间向量
basebandSignal = cos(2*pi*载波频率*t);
% BPSK调制
modulatedSignal = basebandSignal .* (2*data - 1);
% 添加高斯白噪声
snr = 30; % 信噪比
noise = (1/snr) * (randn(size(modulatedSignal)) + 1j*randn(size(modulatedSignal)));
modulatedSignalNoisy = modulatedSignal + noise;
% 信号传输(这里我们假设信号已经通过一个理想的信道传输)
% BPSK解调
receivedData = real(acos(modulatedSignalNoisy./basebandSignal));
decisions = (receivedData > pi/4) + 1;
% 计算误码率
[~, ber] = biterr(data, decisions);
fprintf('误码率为: %f\n', ber);
% 绘制调制和解调信号
figure;
subplot(2,1,1);
plot(t, real(modulatedSignal));
title('调制信号');
xlabel('时间 (s)');
ylabel('幅度');
subplot(2,1,2);
plot(t, real(modulatedSignalNoisy));
title('带噪声的调制信号');
xlabel('时间 (s)');
ylabel('幅度');
这段代码首先生成了一个随机的二进制数据流,然后通过改变载波的相位进行BPSK调制。接着,向调制后的信号中添加了高斯白噪声,模拟信号在传输过程中受到的干扰。最后,通过解调过程恢复原始的比特流,并计算了误码率。同时,代码还绘制了调制信号和带噪声的调制信号的图形,以便于观察信号的变化。
仿真结果不正确!
点评:程序不靠谱,文字总结明显是堆积,但效果远好于程序!程序能用吗?请看下面的视频!
不过下面这篇文章的代码是基本可用的,你会发现代码和本人写的相似度很高啊,可惜的是滤波器用错了!抄袭在互联网上是杜绝不了的,唯有靠自己不断的努力才能保持领先!
大家可以将本代码和下面的第二篇中的代码比对一下就清楚了。为何又说是基本可用的呢?因为还是有错误的!问题出在rcosdesign的使用上!
再来看本人的文章!
学习过程中可以留言提问!我肯定会解答!这种互动会带动你思考!主动学习的效果是最好的!我也在课堂上严格要求大家学习,但效果甚微,甚至引起学生的方案!但我能怎么办?学生们不学,受伤的是家长和自己。我只是受很小的伤,所以我依旧在坚持!
再来看看ChatGPT的答题能力。2024年4月,本人开始正式使用ChatGPT3.5。
% 读取文件
filename = 'your_file.txt'; % 替换成你的文件名
data = load(filename); % 假设数据是以文本形式存储的,如果是其他格式,请相应修改读取方法
% 假设数据是一维的,如果是二维数据,需要根据实际情况进行调整
signal = data(:, 1); % 假设第一列是信号数据
% 计算傅里叶变换
Fs = 1000; % 采样频率,根据实际情况修改
L = length(signal); % 信号长度
Y = fft(signal); % 进行傅里叶变换
P2 = abs(Y/L); % 计算双边频谱
P1 = P2(1:L/2+1); % 仅取正频率部分
P1(2:end-1) = 2*P1(2:end-1); % 偶数倍频部分需乘以2
f = Fs*(0:(L/2))/L; % 构建频率向量
% 绘制频谱图
figure;
plot(f, P1);
title('单边频谱');
xlabel('频率 (Hz)');
ylabel('|P1(f)|');
% 如果你希望查看双边频谱,可以使用以下代码绘制:
% f = Fs*(-L/2:(L/2)-1)/L; % 构建频率向量
% figure;
% plot(f,fftshift(P2));
% title('双边频谱');
% xlabel('频率 (Hz)');
% ylabel('|P2(f)|');
请确保替换文件名 'your_file.txt' 为你实际的文件名,并根据你的数据格式进行相应的调整。此代码假设文件中的数据是一维的,如果数据是二维的,你需要根据文件中的数据结构进行适当的更改。此外,采样频率 Fs 也需要根据实际情况进行调整。
课程主题: MATLAB 中的傅里叶变换
课程目标:
  • 了解傅里叶变换的基本原理
  • 学习如何在 MATLAB 中使用傅里叶变换函数
  • 能够读取文件中的信号数据并进行傅里叶变换
  • 理解频谱图的解释及其应用
教学材料:
  • 计算机上安装了 MATLAB 软件
  • 包含信号数据的文本文件(可提供样例文件)
教学过程:
1. 引言(5分钟)
  • 解释傅里叶变换的基本概念,包括将信号分解为频谱成分的过程。
2. 傅里叶变换在 MATLAB 中的应用(10分钟)
  • 介绍 MATLAB 中的 fft 函数,以及如何使用它进行傅里叶变换。
  • 演示如何使用 fft 函数对一个简单的信号进行傅里叶变换,并绘制其频谱图。
3. 读取文件并进行傅里叶变换(15分钟)
  • 指导学生如何使用 MATLAB 读取包含信号数据的文件。
  • 分步说明如何对读取的信号数据应用傅里叶变换。
  • 学生在自己的计算机上尝试读取文件并进行傅里叶变换,解决可能出现的问题。
4. 频谱图的解释与应用(10分钟)
  • 解释频谱图的含义,包括频率和幅度的解释。
  • 探讨频谱图在信号处理和频域分析中的应用,例如频率成分的识别和滤波器设计等。
5. 实践与总结(15分钟)
  • 学生根据提供的文本文件,自行读取数据并进行傅里叶变换。
  • 学生分享他们的实践经验和遇到的问题,并与其他同学讨论解决方案。
  • 教师总结课程内容,强调重点和要点。
作业:
  • 要求学生在家中使用 MATLAB 进行更多的练习,尝试使用不同的信号数据进行傅里叶变换,并理解其频谱图的特征。
评估:
  • 学生在课堂上的参与度和提问情况。
  • 作业的完成情况和质量。
     
% 参数设置
fc = 10e3; % 载波频率(Hz)
fs = 100e3; % 采样频率(Hz)
T = 1; % 符号周期(秒)
SNR_dB = 10; % 信噪比(dB)
N = 1000; % 符号数量
% 生成随机二进制数据
data = randi([0,1],1,N);
% 生成基带信号
t = 0 : 1/fs : T-1/fs;
baseband_signal = zeros(1,length(t)*N);
for i = 1:N
    baseband_signal((i-1)*length(t)+1:i*length(t)) = data(i)*cos(2*pi*fc*t);
end
% 加入高斯噪声
SNR = 10^(SNR_dB/10);
power_signal = mean(baseband_signal.^2);
power_noise = power_signal / SNR;
noise = sqrt(power_noise) * randn(1,length(baseband_signal));
received_signal = baseband_signal + noise;
% BPSK 解调
demodulated_data = zeros(1,N);
for i = 1:N
    demodulated_data(i) = sign(sum(received_signal((i-1)*length(t)+1:i*length(t)) .* cos(2*pi*fc*t)));
end
% 计算误码率
BER = sum(abs(demodulated_data - data)) / N;
disp(['信噪比为 ' num2str(SNR_dB) ' dB 时,误码率为 ' num2str(BER)]);
点评:回答的依旧不准确,因为解调端没有滤波器,不过从程序的完整度和契合度来看,要比国内的好用一些的!
暂时在工科方面,AI还要走很长的路!暂时不用担心自己会失业!
在本系列文章中,通信的实用知识点会多次出现,还做了删减和引导,让大家能够在学完本文后,建立里系统概念,了解系统涉及的多方面知识。
2024年3月,准备继续增加本系列的文章,一年增加一篇,力争篇篇都是精品。难度也随之上升!后续的文章非常适合企业的研发人员阅读学习。
在学校里讲解,也许绪论的内容就是全部,但这和工作所需的要求相距十万八千里。纯理论的仿真只能对书本的知识做个概括性的补充,对考研的帮助都微乎其微。
滚降成型滤波器的加入是仿真程序的第一个难点。程序里面有好几个滤波器呢?怎么区分它们的作用?很多学生在本科期间没有学好数字滤波器的知识,再结合通信的应用,确实会处于“懵”的状态!好在本系列文章重点讲解这个难点,所以只要弄懂文章,自然难点不难。
有几位学生在学习这方面的知识点时会有很多疑问,这是思考的体现。好事!只要坚持学下去,肯定可以把一些难点和不懂的点都搞清楚。当初我在学的时候也有这样的情况。经过了十年,终于把那些通信里面基本的知识点都搞清楚。我想这个十年是通过不断的学习和实践才获取的解惑。我希望我的学生和看这篇文章的读者们都能有这个坚持的意义。人与人之间最大的差距是坚持,最小的差距是智商。这句话送给你我共勉。
先看看学生在理论学习中会有哪些问题?最怕没问题!这意味着没有思考,至少没有深入思考!我的学生在准备“二战”了,终于开始思考了,于是公 众号文章下面的问题多了起来,这是好事。学习能力的提升离不开提问。但你如果只是在记忆知识,那哪来的问题呢?
再次强调:善于提问是一种好的学习方式。众所周知,码间串扰和噪声是传输系统中的两个影响误码性能的因素!这些知识点在程序中如何体现呢?在写调制解调器程序的时候,最开始在发送端就要遇到成形滤波器!这个滤波器该如何设计呢?这涉及到课本《通信原理》的6.4章节,也会涉及课本《数字信号处理》的FIR滤波器章节。
来源:通信工程师专辑
系统仿真建筑电子MATLAB通信UM理论材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-10
最近编辑:10天前
算法工匠
博士后 | 高级工程师 诚信做事 认真讲课 传播知识
获赞 381粉丝 2436文章 212课程 38
点赞
收藏

作者推荐

未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈