BPSK调制仿真代码

BPSK调制仿真代码,包含了信号生成、调制、信道传输和解调的全过程。

%% BPSK调制解调仿真clear all;close all;clc;%% 1. 参数设置N=10000;% 比特数Rb=1000;% 比特率 (bps)fc=10e3;% 载波频率 (10kHz)fs=10*fc;% 采样频率Tb=1/Rb;% 比特周期Ts=1/fs;% 采样周期samples_per_bit=fs/Rb;% 每比特采样数t_bit=0:Ts:Tb-Ts;% 一个比特周期的时间向量% SNR范围 (dB)EbN0_dB=0:2:10;EbN0=10.^(EbN0_dB/10);% 线性值%% 2. 生成随机比特序列bits=randi([0,1],1,N);fprintf('生成 %d 个随机比特\n',N);%% 3. BPSK调制% BPSK映射: 0 -> +1, 1 -> -1bpsk_symbols=2*bits-1;% 将[0,1]映射到[+1,-1]% 生成基带信号(矩形脉冲成型)baseband_signal=zeros(1,N*samples_per_bit);fori=1:Nbaseband_signal((i-1)*samples_per_bit+1:i*samples_per_bit)=bpsk_symbols(i);end% 生成载波t_total=0:Ts:N*Tb-Ts;carrier=cos(2*pi*fc*t_total);% BPSK调制信号(上变频)modulated_signal=baseband_signal.*carrier;%% 4. 仿真不同信噪比下的性能ber_simulated=zeros(size(EbN0_dB));ber_theoretical=zeros(size(EbN0_dB));forsnr_idx=1:length(EbN0_dB)fprintf('\n仿真 Eb/N0 = %d dB ...\n',EbN0_dB(snr_idx));%% 4.1 添加AWGN噪声% 计算信号功率signal_power=sum(abs(modulated_signal).^2)/length(modulated_signal);% 计算噪声功率(考虑带通信号)Eb=signal_power*Tb;% 每比特能量N0=Eb/EbN0(snr_idx);% 噪声功率谱密度noise_power=N0*fs/2;% 噪声功率(双边带)% 生成高斯白噪声noise=sqrt(noise_power)*randn(size(modulated_signal));% 添加噪声到调制信号received_signal=modulated_signal+noise;%% 4.2 BPSK相干解调% 下变频(乘以同频同相的载波)demod_signal=received_signal.*carrier;% 低通滤波(积分清零)recovered_symbols=zeros(1,N);fori=1:N start_idx=(i-1)*samples_per_bit+1;end_idx=i*samples_per_bit;% 积分运算recovered_symbols(i)=sum(demod_signal(start_idx:end_idx));end% 判决recovered_bits=recovered_symbols<0;% 负值判为1,正值判为0%% 4.3 计算误码率errors=sum(bits~=recovered_bits);ber_simulated(snr_idx)=errors/N;% 理论误码率(BPSK在AWGN信道)ber_theoretical(snr_idx)=0.5*erfc(sqrt(EbN0(snr_idx)));fprintf('误码数: %d, 误码率: %.6f\n',errors,ber_simulated(snr_idx));end%% 5. 可视化结果figure('Position',[100,100,1200,800]);% 5.1 原始比特序列subplot(3,3,1);stem(bits(1:20),'filled','LineWidth',1.5);title('原始比特序列 (前20个比特)');xlabel('比特序号');ylabel('幅度');grid on;ylim([-0.21.2]);% 5.2 BPSK符号subplot(3,3,2);stem(bpsk_symbols(1:20),'filled','LineWidth',1.5);title('BPSK调制符号 (0->+1, 1->-1)');xlabel('符号序号');ylabel('幅度');grid on;ylim([-1.51.5]);% 5.3 基带信号波形subplot(3,3,3);plot((1:5*samples_per_bit)*Ts,baseband_signal(1:5*samples_per_bit),'LineWidth',1.5);title('基带信号波形 (前5个比特)');xlabel('时间 (s)');ylabel('幅度');grid on;% 5.4 载波信号subplot(3,3,4);plot(t_total(1:500),carrier(1:500),'LineWidth',1.5);title('载波信号 (部分波形)');xlabel('时间 (s)');ylabel('幅度');grid on;% 5.5 调制信号subplot(3,3,5);plot(t_total(1:5*samples_per_bit),modulated_signal(1:5*samples_per_bit),'LineWidth',1.5);title('BPSK调制信号 (前5个比特)');xlabel('时间 (s)');ylabel('幅度');grid on;% 5.6 频谱分析subplot(3,3,6);% 基带信号频谱[P_baseband,f_baseband]=pwelch(baseband_signal,[],[],[],fs);% 调制信号频谱[P_mod,f_mod]=pwelch(modulated_signal,[],[],[],fs);plot(f_baseband/1000,10*log10(P_baseband),'b','LineWidth',1.5);hold on;plot(f_mod/1000,10*log10(P_mod),'r','LineWidth',1.5);title('信号频谱');xlabel('频率 (kHz)');ylabel('功率谱密度 (dB/Hz)');legend('基带信号','调制信号');grid on;xlim([0,20]);% 5.7 接收信号(加噪声后)subplot(3,3,7);plot(t_total(1:5*samples_per_bit),received_signal(1:5*samples_per_bit),'LineWidth',1.5);title('接收信号 (Eb/N0 = 10dB, 前5个比特)');xlabel('时间 (s)');ylabel('幅度');grid on;% 5.8 解调后的信号subplot(3,3,8);plot(t_total(1:5*samples_per_bit),demod_signal(1:5*samples_per_bit),'LineWidth',1.5);title('解调信号 (下变频后)');xlabel('时间 (s)');ylabel('幅度');grid on;% 5.9 误码率曲线subplot(3,3,9);semilogy(EbN0_dB,ber_simulated,'bo-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','b');hold on;semilogy(EbN0_dB,ber_theoretical,'r--','LineWidth',2);title('BPSK系统误码率性能');xlabel('Eb/N0 (dB)');ylabel('误码率 (BER)');legend('仿真结果','理论曲线','Location','best');grid on;% 星座图(Eb/N0=10dB时的最后1000个符号)figure('Position',[100,100,600,500]);last_N=min(1000,N);scatter(real(recovered_symbols(end-last_N+1:end)),imag(recovered_symbols(end-last_N+1:end)),30,'filled');title('BPSK星座图 (Eb/N0=10dB)');xlabel('同相分量 (I)');ylabel('正交分量 (Q)');grid on;axis equal;xlim([-3,3]);ylim([-3,3]);hold on;plot([0,0],[-3,3],'k--',[-3,3],[0,0],'k--');% 眼图figure('Position',[100,100,800,400]);% 使用低通滤波后的信号生成眼图eye_diagram_signal=demod_signal;% 这里使用解调后的信号samples_per_eye=2*samples_per_bit;% 显示2个比特周期的眼图subplot(1,2,1);hold on;fori=1:min(50,N-1)start_idx=(i-1)*samples_per_bit+1;end_idx=start_idx+samples_per_eye-1;ifend_idx<=length(eye_diagram_signal)t_eye=(0:samples_per_eye-1)*Ts;plot(t_eye*1000,eye_diagram_signal(start_idx:end_idx),'b');endendtitle('BPSK解调信号眼图');xlabel('时间 (ms)');ylabel('幅度');grid on;subplot(1,2,2);% 平均眼图num_eyes=min(100,floor(length(eye_diagram_signal)/samples_per_bit)-1);eye_matrix=zeros(num_eyes,samples_per_eye);fori=1:num_eyes start_idx=(i-1)*samples_per_bit+1;end_idx=start_idx+samples_per_eye-1;eye_matrix(i,:)=eye_diagram_signal(start_idx:end_idx);endeye_mean=mean(eye_matrix,1);t_eye=(0:samples_per_eye-1)*Ts;plot(t_eye*1000,eye_mean,'r','LineWidth',2);title('平均眼图');xlabel('时间 (ms)');ylabel('幅度');grid on;%% 6. 显示关键结果fprintf('\n========== BPSK调制仿真结果 ==========\n');fprintf('比特数: %d\n',N);fprintf('比特率: %d bps\n',Rb);fprintf('载波频率: %.1f kHz\n',fc/1000);fprintf('采样频率: %.1f kHz\n',fs/1000);fprintf('每比特采样数: %d\n',samples_per_bit);fprintf('\n');fprintf('误码率比较:\n');fprintf('Eb/N0(dB)\t仿真BER\t理论BER\n');fori=1:length(EbN0_dB)fprintf(' %2d\t\t%.2e\t%.2e\n',EbN0_dB(i),ber_simulated(i),ber_theoretical(i));end

代码说明

1.主要模块

  • 参数设置:配置仿真参数(比特数、比特率、载波频率等)
  • 信号生成:产生随机二进制序列
  • BPSK调制:将二进制信号映射为BPSK符号并进行载波调制
  • 信道模拟:添加AWGN(加性高斯白噪声)
  • 相干解调:使用同步载波进行解调
  • 性能分析:计算误码率并与理论值比较

2.可视化内容

  • 时域波形:原始比特、基带信号、调制信号、接收信号
  • 频域分析:基带和调制信号的频谱
  • 性能曲线:BER vs Eb/N0 曲线
  • 星座图:展示信号点在复平面的分布
  • 眼图:评估信号质量

3.BPSK调制原理

  • 调制:二进制"0" → 载波相位0°(cos(ωt))
  • 调制:二进制"1" → 载波相位180°(-cos(ωt))
  • 数学表示:s(t) = A·cos(2πf₀t + φ),其中φ=0或π

4.使用方法

  1. 直接运行MATLAB代码
  2. 调整参数(N, Rb, fc等)进行不同条件下的仿真
  3. 观察各种图形输出和分析结果

参考代码 BPSK调制仿真www.youwenfan.com/contentcsp/98097.html

5.扩展建议

  • 可以添加脉冲成型滤波器(如升余弦滤波器)
  • 可以仿真多径信道或衰落信道
  • 可以添加载波同步和定时同步算法
  • 可以扩展到QPSK等其他调制方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1124570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

参会预告 | AtomGit 邀您共赴 TritonNext 2026 技术大会,解锁 AI 系统与编译生态新机遇

2026 年开年首场 AI 技术盛宴即将启幕&#xff01;1 月 9 日&#xff0c;国内首个聚焦 Triton 技术与生态的开发者盛会 —— 2026 TritonNext 技术大会&#xff0c;将在北京海淀区中关村国家自主创新示范区展示中心重磅召开。作为深耕开源协作与 AI 基础设施领域的重要力量&…

【teambition 二开】TB JSAPI 学习

开始使用通过 script 标签引入使用 script 标签加载以下 jshttps://g.alicdn.com/code/npm/alife/teambition-jsapi/0.0.33/tb-jsapi.umd.js文件概述这是一个 Teambition JSAPI 库&#xff08;版本 0.0.33&#xff09;&#xff0c;提供了与 Teambition 平台交互的 JavaScript A…

售价1499元起 华为MatePadSE搭载鸿蒙OS2亮相

华为应用市场 2022年4月28日&#xff0c;华为折叠旗舰及全场景新品发布会召开&#xff0c;华为MatePadSE正式发布亮相&#xff0c;搭载HarmonyOS2&#xff0c;为用户带来智慧体验&#xff1b;10.1英寸全高清显示通过德国莱茵低蓝光认证搭配华为Histen7.0音效技术&#xff0c;为…

飞凌嵌入式ElfBoard-打开目录readdir

1.头文件#include <dirent.h>2.函数原型struct dirent *readdir(DIR *dirp);3.参数dirp&#xff1a;指向由 opendir() 返回的 DIR 结构体的指针&#xff0c;用于表示打开的目录流。4.返回值成功&#xff1a;返回指向 dirent 结构体的指针&#xff0c;该结构体包含目录项的…

飞凌嵌入式ElfBoard-打开目录closedir

用于关闭目录流的函数。 1.头文件 #include <sys/types.h> #include <dirent.h> 2.函数原型 int closedir(DIR *dirp); 3.参数 dirp: 指向 DIR 结构的指针&#xff0c;该结构由 opendir() 返回。它表示要关闭的目录流。 4.返回值 成功: 返回 0。失败: 返回…

Windows 右键集成方案:轻量级图片格式转换工具实践

图片格式转换不是“多此一举”&#xff0c;而是为了适配场景、提升效率、保证兼容、控制质量与体积的必要操作。 它是一款高效简洁的图片格式转换工具。 相较于传统工具需依次执行“启动程序—导入图片—选择输出格式—执行转换—保存文件”等多步操作。 该工具通过集成右键菜…

破解物流分拣效率瓶颈:ARM工控机驱动的智能调度方案深度解析

在日吞吐量数以万计件的现代智慧物流分拣中心&#xff0c;AGV&#xff08;自动导引运输车&#xff09;如同不知疲倦的“搬运工”&#xff0c;穿梭于货架与分拣台之间。然而&#xff0c;随着订单量激增、SKU种类繁杂&#xff0c;AGV数量从几十台增加到数百台&#xff0c;一个核心…

华为:共建鸿蒙世界,鸿蒙生态向前再迈一步!

鸿蒙 华为鸿蒙系统刚推出时&#xff0c;还有不少不同的声音&#xff0c;甚至有人嘲笑它是“安卓套壳”版。如今&#xff0c;已过去三年&#xff0c;鸿蒙OS一步一个脚印&#xff0c;一路劈荆斩刺&#xff0c;不仅突破了生死线&#xff0c;还迎来了新的成果。 11月4日&#xff0c…

降本增效新范式:Linux预测性维护在水务行业

想象一下&#xff0c;一座现代化大都市的地下&#xff0c;如同人体的血管网络&#xff0c;密布着成千上万台水泵。它们日夜不息&#xff0c;将清洁的水送往千家万户&#xff0c;又将生活污水安全排出。这些“心脏”一旦“罢工”&#xff0c;轻则导致片区水压不稳&#xff0c;重…

中专计算机专业毕业可从事的工作方向

2026年毕业的中专计算机专业学生&#xff0c;可选择的职业方向广泛&#xff0c;涵盖技术、运维、设计、数据分析等多个领域。以下是具体职业方向及对应的技能要求、薪资范围和证书建议&#xff08;包括CDA数据分析师证书&#xff09;。技术开发类岗位名称技能要求薪资范围&…

员工背景调查标准化操作蓝图

为确保招聘质量&#xff0c;企业需建立标准化的背景调查流程。本蓝图提供一套可复制的操作框架&#xff0c;以“江湖背调系统”为工具支撑&#xff0c;兼顾效率与合规。 第一阶段&#xff1a;调查前准备 明确调查范围与授权。在录用意向达成后&#xff0c;获取候选人签字的《背…

海纳AI亮相北京人工智能创新高地建设推进会:以“AI向善”重塑招聘生态

2026年1月5日&#xff0c;北京中关村国际创新中心海慧厅内人头攒动、暖意融融&#xff0c;一场聚焦“人工智能”的盛会——“2026北京人工智能创新高地建设推进会”拉开帷幕。作为国内AI招聘领域的标杆企业&#xff0c;海纳AI凭借“参展商、生态伙伴和案例输出者”的三重身份深…

冷热电联供系统优化:用粒子群算法实现多目标优化

MATLAB代码&#xff1a;基于多目标粒子群算法冷热电联供综合能源系统运行优化 关键词&#xff1a;综合能源 冷热电三联供 粒子群算法 多目标优化 参考文档&#xff1a;《基于多目标算法的冷热电联供型综合能源系统运行优化》 仿真平台&#xff1a;MATLAB 平台 …

企业微信外部群消息主动推送开发指南

在私域运营的深度开发中&#xff0c;很多开发者面临一个核心诉求&#xff1a;如何基于业务系统触发的消息&#xff0c;自动推送到包含客户的外部群聊中&#xff1f; 不同于内部群简单的 Webhook 机器人&#xff0c;外部群的推送涉及更高标准的权限管理和合规校验。本文将从技术…

ARM嵌入式调试核心技巧:深入解析`__asm volatile(“bkpt 0“)`

ARM嵌入式调试核心技巧&#xff1a;深入解析__asm volatile("bkpt 0") 在嵌入式开发中&#xff0c;调试是解决问题的关键。本文将深入探讨ARM架构下的核心调试指令bkpt&#xff0c;并全面介绍嵌入式系统调试的高级技巧与实践方法。 一、bkpt指令&#xff1a;硬件断点…

数据在田间思考:ARM边缘网关实现灌溉的秒级决策与控制

在广袤的农田里&#xff0c;灌溉一直是门“经验活”。看天吃饭、凭感觉浇水&#xff0c;不仅浪费了宝贵的水资源&#xff0c;还可能影响作物生长&#xff0c;甚至导致土壤盐碱化。如今&#xff0c;随着智慧农业的兴起&#xff0c;精准灌溉成为可能。而在这背后&#xff0c;一个…

网络安全零基础入门指南:从小白到安全达人的成长路径

网络安全零基础入门指南&#xff1a;从"小白"到"安全达人"的成长路径 网络安全零基础入门指南&#xff1a;从"小白"到"安全达人"的成长路径 网络安全不再是技术高手的专属领域&#xff0c;而是每个互联网用户都应具备的基本素养。本文…

基于企业微信 API 的外部群消息异步推送机制实现

一、 引言&#xff1a;为什么“异步”是外部群推送的核心&#xff1f; 平台限制的挑战&#xff1a; 简述企业微信对外部群消息推送的频率限制&#xff08;Rate Limit&#xff09;。同步请求的弊端&#xff1a; 解释在高并发业务场景下&#xff0c;同步调用 API 会导致的请求阻…

别让你的才华埋没在二流公司!向量数据库 Top 1 正在等你,这波风口别错过!

我们是全球领先的向量数据库企业&#xff0c;业务正在快速发展&#xff0c;现开放大量岗位&#xff1a; 数据库开发工程师、数据库运维、运营、销售…… 为你金光闪闪履历锦上添花&#xff1b;如果你是还在成长中的新锐&#xff0c;那么这里将是你加速的孵化器**。 但如果你还…

从“云端”到“身边”:ARM边缘计算让传统产业更智能

当前&#xff0c;培育“新质生产力”已成为推动经济高质量发展的核心任务。对于大量传统制造业、能源、农业等领域的企业而言&#xff0c;这意味着一场深刻的数字化、智能化变革。然而&#xff0c;在升级路上&#xff0c;它们普遍面临几大“拦路虎”&#xff1a;海量生产数据上…