当前位置: 首页 > news >正文

MATLAB实现振幅调制(AM调制信号)

AM调制是通信专业非常重要的一个知识点。今天我们使用MATLAB编程实现AM调制。

我们实现输入一个载波信号的频率与调制信号的频率后,再输入调幅度,得到已调信号的波形与包络信号的波形,再使用FFT算法分析出已调信号的频谱图。

源代码:

调制函数的编写:

function AM_modulation(m, fm, fc)% 参数设置fs = 10*fc;       % 自适应采样频率(满足奈奎斯特准则)T = 2;            % 信号持续时间(秒)t = 0:1/fs:T-1/fs; % 时间向量% 验证调制参数合理性if m < 0error('调制指数不能为负数');endif fm >= fcwarning('调制频率接近或超过载波频率可能影响调制效果');end% 生成调制信号和已调信号modulating_signal = m * cos(2*pi*fm*t);carrier = cos(2*pi*fc*t);am_signal = (1 + modulating_signal) .* carrier;envelope = 1 + modulating_signal;envelope1 = -(1 + modulating_signal);% 绘制时域波形(增强可视化)figure('Name','AM调制时域分析','NumberTitle','off');ax1 = subplot(2,1,1);plot(t, am_signal, 'Color', [0 0.4470 0.7410], 'LineWidth', 1.2);hold on;plot(t, envelope, 'r--', 'Color', [0.8500 0.3250 0.0980], 'LineWidth', 1.5);plot(t, envelope1, 'r--', 'Color', [0.8500 0.3250 0.0980], 'LineWidth', 1.5);title(['AM时域波形  m=', num2str(m), ', f_m=', num2str(fm), 'Hz, f_c=', num2str(fc), 'Hz']);xlabel('时间 (s)');ylabel('幅度');legend('已调信号','理论包络','Location','best');grid on;xlim([0 3/fm]);  % 显示3个调制周期% 局部放大观察细节ax2 = subplot(2,1,2);plot(t, am_signal, 'Color', [0 0.4470 0.7410], 'LineWidth', 1.2);hold on;plot(t, envelope, '--', 'Color', [0.8500 0.3250 0.0980], 'LineWidth', 1.5);plot(t, envelope1, '--', 'Color', [0.8500 0.3250 0.0980], 'LineWidth', 1.5);title('局部放大');xlabel('时间 (s)');ylabel('幅度');xlim([0 1/fm]);  % 显示1个调制周期grid on;linkaxes([ax1,ax2],'y');  % 同步纵坐标范围% 高级频谱分析(手动实现FFT)N = length(am_signal);fft_data = zeros(1,N);% 离散傅里叶变换实现for k = 1:N/2+1cos_term = cos(2*pi*(k-1)*(0:N-1)/N);sin_term = -sin(2*pi*(k-1)*(0:N-1)/N);fft_data(k) = sum(am_signal.*(cos_term + 1i*sin_term));endP2 = abs(fft_data/N);P1 = P2(1:N/2+1);P1(2:end-1) = 2*P1(2:end-1);f = fs*(0:(N/2))/N;% 频谱可视化(动态范围调整)figure('Name','AM频谱分析','NumberTitle','off');stem(f, P1, 'filled', 'MarkerSize',4, 'Color',[0.6350 0.0780 0.1840]);title(['信号频谱  f_c=',num2str(fc),'±',num2str(fm),'Hz']);xlabel('频率 (Hz)');ylabel('幅度');grid on;% 自动设置频率显示范围freq_span = max(10*fm, 2*fc);  % 自适应频率范围xlim([max(0,fc-3*fm) fc+3*fm]);xticks(unique([fc-fm, fc, fc+fm, linspace(fc-3*fm,fc+3*fm,5)]));% 标注主要频率成分hold on;[~,idx] = max(P1);text(f(idx), P1(idx), sprintf('%.1fHz\n%.2f',f(idx),P1(idx)),...'VerticalAlignment','bottom');annotation('textbox',[0.15 0.7 0.2 0.1],'String',...sprintf('频率分辨率:%.2fHz',fs/N),'EdgeColor','none');
end

脚本的编写:

% 常规调制
input_m=input('请输入调制指数:');
input_fm=input('请输入调制信号频率:');
input_fc=input('请输入载波信号频率:');
AM_modulation(input_m, input_fm, input_fc)

导出图片

输入参数后,生成相应的波形:

 

导出包络波形和调制波形:

导出的频谱图:

 

http://www.xdnf.cn/news/440803.html

相关文章:

  • Hadoop-HDFS-Packet含义及作用
  • 通用软件项目技术报告 - 术语词典
  • 【数据分析】从TCGA下载所有癌症的多组学数据
  • 掌握Docker Commit:轻松创建自定义镜像
  • 【MySQL】自适应哈希详解:作用、配置以及如何查看
  • Windows10安装WSA
  • ECharts中Map(地图)样式配置、渐变色生成
  • OracleLinux7.9-ssh问题
  • Windows避坑部署CosyVoice多语言大语言模型
  • CSS Grid布局:从入门到实战
  • 《Python星球日记》 第70天:Seq2Seq 与Transformer Decoder
  • sql练习题
  • springboot + mysql8降低版本到 mysql5.7
  • Java中的异常机制
  • Java 直接内存ByteBuffer.allocateDirect原理与源码解析
  • git切换分支后需要pull吗
  • Spark缓存---cache方法
  • 在Ubuntu24.04中配置开源直线特征提取软件DeepLSD
  • Java 与 Go 语言对比
  • Milvus 视角看主流嵌入式模型(Embeddings)
  • 推荐一个Winform开源的UI工具包
  • 《AI大模型应知应会100篇》第64篇:构建你的第一个大模型 Chatbot
  • 嵌入式C语言中指针的不同类型及其特点分析
  • iOS 阅后即焚功能的实现
  • 如何利用大模型对文章进行分段,提高向量搜索的准确性?
  • 关于 Golang GC 机制的一些细节:什么是根对象?GC 机制的触发时机?
  • 【SSL证书系列】操作系统如何保障根证书的有效性和安全
  • 【sql】按照数据的日期/天 ,对入库数据做数量分类
  • java加强 -File
  • MobiPDF:安卓设备上的专业PDF阅读与编辑工具