11 FM调制与解调的仿真
调频简介FM调制即调频是使载波的频率随调制信号即原始信号也叫基带信号的大小变化而变化而振幅保持不变的调制方式其数学公式如下调频的主要指标要实现频率调制(FM)就要保证基带信号与瞬时频率偏移成线性对应关系。DDS信号发生器的补充DDS信号发生器框图如下由上图可以看出DDS发生器主要由相位累加器、相位量化器、波形ROM表、 D/A 转换器构成相位累加器宽度为N位它按相位步进K进行累加运算并向相位量化器输出结相位量化器将相位累加器输出的N位相位控制字和外部输入的N位相位控制字P相加然后在进行截断输出M位结果到波形ROM表波形ROM表一共存储有2^M个波形参数它根据相位量化器输出的值从ROM中取出数据并输出到DA转换器D/A 转换器将数字量转换为模拟量输出相位累加器每来一个时钟就会按相位步进(K)进行一次累加运算溢出后又从零开始进行累加如此往复相位累加器完成一次溢出便对应着的完成了一次波形ROM的遍历所以相位累加器的溢出频率就是DDS信号发生器的输出频率DDS相位增量使用DDS进行FM调制FM解调FM调制后的信号如下对信号做IQ分解matlab音频信号FM调制解调仿真以音频信号的FM调制解调为例编写matlab仿真程序仿真代码如下clc;clear;close all;%载波采样率,16M Fsc16e6;%载波中心频率,1M Fc1e6;%载波幅度 Ac1024;%音频的采样率,16K Fsm16e3;%最大频偏,75K dF75e3;%%音频信号加载%读取音频文件 filefopen(v3edu.pcm,r);audiofread(file,int16);fclose(file);%显示音频数据波形figure(1);plot(audio);%计算仿真长度以音频扩展到16M采样率后的长度为仿真长度 sim_lenlength(audio)*Fsc/Fsm;%%将音频信号扩为16M采样 mzeros(1,sim_len);fori1:length(audio)forj1:fix(Fsc/Fsm)%将一个16K采样率得到的采样点复制fix(Fsc/Fsm)次(这里应该是1000次)就得到16M采样率的采样点m((i-1)*fix(Fsc/Fsm)j)audio(i);end end%%波形ROM表%生成波形ROM表共1024个波形参数 n0:1/1024:1023/1024;sin_romsin(2*pi*n);cos_romcos(2*pi*n);%%已调信号非载波部分%利用DDS进行FM调制的参数 dK(2^32*dF)/Fsc;Kf(((2*pi)/2^32)*dK*Fsc)/(2^15-1);KfsKf/Fsc;KfddsKfs/((2*pi)/2^32);%相位累加器 w0;%生成已调信号非载波部分 dac_izeros(1,sim_len);dac_qzeros(1,sim_len);fori1:sim_len%相位累加 wwKfdds*m(i);%做32位累加器的溢出判断 wmod(w,2^32);%将相位转换为波形ROM地址通过除以2^22来截断低22位保留高10位 rrom_addrfix(w/2^22)1;%IQ通道非载波部分dac_i(i)Ac*cos_rom(rrom_addr);dac_q(i)Ac*sin_rom(rrom_addr);end%Q路取反 dac_q-1*dac_q;%%已调信号载波部分,实际工程中载波由AD9361产生%载波相位步进采样率16M频率1M相位控制字32位 k(2^32*Fc)/Fsc;%相位累加器 w0;%生成1M的载波信号 cos_wavezeros(1,sim_len);sin_wavezeros(1,sim_len);fori1:sim_len%相位累加 wwk;%32位相位溢出处理 wmod(w,2^32);%将相位转换为波形ROM地址通过除以2^22来截断低22位保留高10位 rrom_addrfix(w/2^22)1;%载波cos_wave(i)cos_rom(rrom_addr);sin_wave(i)sin_rom(rrom_addr);end%%正交调制输出实际工程中载波由AD9361进行正交调制 fmzeros(1,sim_len);fori1:sim_len%i_ch(i)是I通道q_ch(i)是Q通道fm(i)cos_wave(i)*dac_i(i)sin_wave(i)*dac_q(i);end%%对已调信号做正交分解%正交解调实际工程中载波由由AD9361进行正交解调 Izeros(1,sim_len);Qzeros(1,sim_len);fori1:sim_lenI(i)fm(i)*cos_wave(i);Q(i)fm(i)*sin_wave(i);end%%对IQ数据进行低通滤波把高频分量滤除%进行低通滤波 NUM[-7.894e-05,-2.483e-04,-4.516e-04,-7.089e-04,-1.035e-03,-1.435e-03,-1.903e-03,-2.417e-03,-2.938e-03,-3.415e-03,-3.778e-03,-3.948e-03,-3.837e-03,-3.357e-03,-2.42e-03,-9.524e-04,1.106e-03,3.791e-03,7.113e-03,1.105e-02,1.554e-02,2.051e-02,2.583e-02,3.135e-02,3.691e-02,4.233e-02,4.742e-02,5.199e-02,5.588e-02,5.894e-02,6.105e-02,6.213e-02,6.213e-02,6.105e-02,5.894e-02,5.588e-02,5.199e-02,4.742e-02,4.233e-02,3.691e-02,3.135e-02,2.583e-02,2.051e-02,1.554e-02,1.105e-02,7.113e-03,3.791e-03,1.106e-03,-9.524e-04,-2.42e-03,-3.357e-03,-3.837e-03,-3.948e-03,-3.778e-03,-3.415e-03,-2.938e-03,-2.417e-03,-1.903e-03,-1.435e-03,-1.035e-03,-7.089e-04,-4.516e-04,-2.483e-04,-7.894e-05];adc_i_lpfconv(I,NUM);adc_q_lpfconv(Q,NUM);%前面部分滤波器未收敛将其去掉 adc_i_lpfadc_i_lpf(32:end-32);adc_q_lpfadc_q_lpf(32:end-32);%Q路取反 adc_q_lpf-1*adc_q_lpf;%%FM解调 denominatorzeros(1,sim_len);numeratorzeros(1,sim_len);fm_tempzeros(1,sim_len);fori2:sim_len%I(n-1)*Q(n)-I(n)*Q(n-1)numerator(i)adc_i_lpf(i-1)*adc_q_lpf(i)-adc_i_lpf(i)*adc_q_lpf(i-1);%I(n)^2Q(n)^2denominator(i)adc_i_lpf(i)*adc_i_lpf(i)adc_q_lpf(i)*adc_q_lpf(i);%(I(n-1)*Q(n)-I(n)*Q(n-1))/(I(n)^2Q(n)^2)ifabs(denominator(i))0.000001fm_temp(i)0;elsefm_temp(i)(numerator(i)/denominator(i))*2^16;end end%%降采样%采用取均值的方式来完成降采样将采样率由16M降低到16K sum0;sum_cnt0;data_cnt1;fm_outzeros(1,fix(sim_len*(Fsm/Fsc)));fori1:sim_len sumsumfm_temp(i);sum_cntsum_cnt1;%完成了Fsc/Fsm(这里应该是1000)次的累加进行平均并且存储到fm_outif(sum_cntfix(Fsc/Fsm))fm_out(data_cnt)sum/sum_cnt;data_cntdata_cnt1;sum_cnt0;sum0;end end%显示解调结果%figure(2);hold onplot(fm_out*17,b);仿真输出如下所示可见解调出来的信号与原始信号基本重叠。

相关新闻

以 Weather Reporter 为单一线索重构演讲:Claude Code 五段式 Agentic 教学路径的叙事设计与落地

以 Weather Reporter 为单一线索重构演讲:Claude Code 五段式 Agentic 教学路径的叙事设计与落地

文档教程AI 技能 【免费下载链接】claude-code-best-practice from vibe coding to agentic engineering - practice makes claude perfect 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-best-practice 点击查看 免费下载 这份学习旅程文档&…

2026/9/30 6:58:07 阅读更多 →
JAVA V6 多商户商城 开发文档——手机端前端

JAVA V6 多商户商城 开发文档——手机端前端

准备工作​ 概述​ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,支持同时生成 ios、Android、H5、以及各种小程序等多平台应用。本项目基于 Vue 3、Vite 和 TypeScript 构建,集成了 Pinia 状态管理、uview-plus UI 组件库和 WindiCSS 样式框架 …

2026/9/30 6:58:07 阅读更多 →
厂区地磅改无人值守,系统怎么选?

厂区地磅改无人值守,系统怎么选?

厂区地磅准备改成无人值守,常见的第一反应是:买一套软件,接上车牌识别和道闸,就能自动过磅了。 实际改造涉及的不只是软件。车辆识别、称重仪表、道闸、红外检测、视频留证、异常处理和业务系统对接都要配合起来。任何一个接口或…

2026/9/30 6:58:07 阅读更多 →

最新新闻

Vidu视频原生生成:AI角色直播在场感实现指南

Vidu视频原生生成:AI角色直播在场感实现指南

1. 项目概述:当 AI 角色真正“坐进”直播间,不是播音员,而是“在场者”“当 AI 角色真的走进直播间,会发生什么?”——这句话最近在技术圈和内容创作圈反复被提起,不是作为科幻设定,而是作为正在…

2026/9/30 9:02:42 阅读更多 →
从零开始AI工程落地:数据、训练到部署的完整实操指南

从零开始AI工程落地:数据、训练到部署的完整实操指南

从零开始做 AI 工程,听起来像是一条又长又卷的路。我入行这几年,见过太多人把“跑通一个 Jupyter Notebook”当成“搞定了 AI”,结果一上生产环境就翻车:模型推理慢到超时、数据分布一变精度就崩、显卡 OOM 却不知道日志在哪看。这…

2026/9/30 9:02:42 阅读更多 →
哈希表原理、冲突处理与扩容:从手写实现到工程选型

哈希表原理、冲突处理与扩容:从手写实现到工程选型

哈希表这个词在数据结构这门课里出现的频率,大概仅次于数组和链表。但很多人对它的认识停留在"存key-value,查询快"这一层,真要问一句为什么快、快到什么程度、什么情况下会变慢,就答不上来了。我从大二第一次写课程设计…

2026/9/30 9:02:42 阅读更多 →
飞书PC端指定浏览器打开技术方案与落地实践

飞书PC端指定浏览器打开技术方案与落地实践

1. 项目概述:为什么飞书自建应用在PC端必须“指定浏览器打开”? 飞书自建应用在PC端默认走的是飞书客户端内嵌的WebView容器,这个容器底层基于Chromium,但版本固定、更新滞后、功能阉割严重——比如不支持WebRTC音视频通话、无法…

2026/9/30 9:02:42 阅读更多 →
PhyloSuite实战指南:从序列比对到分子定年的系统发育分析流程

PhyloSuite实战指南:从序列比对到分子定年的系统发育分析流程

刚看完张东老师的《从序列到进化树和时间:PhyloSuite在系统发育与分子定年分析中的应用》视频回放,趁着热乎劲把笔记整理成文。做分子系统学的同行应该都有体会:从测序仪下来的一堆峰图到最终稿子上那棵漂亮的进化树,中间隔着的是…

2026/9/30 9:02:42 阅读更多 →
Qwen Image 2.1结构化提示词与ComfyUI工作流实战指南

Qwen Image 2.1结构化提示词与ComfyUI工作流实战指南

1. 这不是“魔法”,是提示工程与工作流协同的精密控制——Qwen Image 2.1 在 ComfyUI 中逼近 GPT-4o 图像能力的真实路径你搜“Qwen Image 2.1 ComfyUI”时,看到的大多是零散截图、模糊描述,甚至有人直接说“不如GPT-4o图生图”,然…

2026/9/30 9:01:39 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →