m基于MATLAB的FM调制收音机仿真实现

1.算法概述

那么FM调制端的基本原理图如下所示:

 

 

 

 

FM解调

 

FM解调的基本原理框图为:

 

 

 

 

       在不考虑频偏的情况下,FM解调运算就相当于FM调制的逆运算,任务的第一步比较简单,所以这里关于FM解调的原理就不在叙述。

 

       对该系统进行系统仿真,在仿真之前,要将系统做进一步的模块化从而有利于仿真分析。

 

2.仿真效果预览

matlab2013b

 

 

 

上图是系统的发送信号,第二章图是通过FM调制以后的信号。系统发送出去的就是这个信号。

 

 

 

 

这是系统接收到的信号,我们可以看到,接收到的信号在初始有一个抖动的过程,这个就是PLL的锁定过程,通过这个锁定过程,系统就可以得到正确的解调信号,上图第三章图是PLL的相位输出,通过一开始的抖动,相位误差就锁定在0附近,这说明相位已经锁定了。此后的解调信号都是正确的。

 

以上是一个正弦信号做为发送信号,下面我们用一个方波来作为发送信号检测系统。

 

 

 

 

 

 

当发送发波的时候也可以锁定,但是在波形的边沿会产生误差信号。

 

 

 

 

3.核心MATLAB代码预览

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
N  = 4000;                         % 采样点数
Fs = 40000;                        % 采样频率
Ts = 1/Fs;                         % 采样周期
  
  
%注意,这里不同的频域,不同改变的太夸张,否则系统也无法正常工作。46000~54000
  
%5000~15000,25000~35000,45000~55000,65000~75000,85000~95000,105000~115000..
%.......................
k=input('请输入你要的电台序号:0,1,2,3,4,5,6,7,8,9\n\n\n');
  
  
fc1= k*20000+8000+4000*rand(1)                     %发送载波频率
  
fc2 =k*20000+10000                                 %接收载波频率
  
  
t = [0:Ts:(N*Ts)- Ts];            
start_point = 1;
end_point = 1000; %查看仿真的持续时间周期
  
%锁相环的初始化                                             
  
  
  
TestFreq = 500;                                                %FM调制频率
msg = 0.5*square(2*pi*TestFreq*t);                             %要发送的信号
[fmmsg, phase] = fm_modulation(msg, fc1, Fs, 1.0, 0.05, 0);     %调用FM调制函数进行调制
  
%以上就是FM的调制过程
%=============================================================
%=============================================================
%一下是PLL-FM解调过程
[pd_out,lfsum,lf_out,vco_phase,vco_out] = pll_function(fmmsg,Fs,2.0,1.0,1.0,fc2,50000,1.0);
  
  
  
figure(1);
subplot(3,1,1);
plot(fmmsg(start_point:end_point));
title('10K的载波对500HZ的信号进行调制');
grid;
subplot(3,1,2);
plot(lf_out(start_point:end_point));
title('PLL的环路滤波输出信号');
grid;
  
subplot(3,1,3);
plot(pd_out(start_point:end_point));%   fc1>fc2,值<0,
title('PLL相位输出');                %   fc1<fc2,值>0,
%                                       Rfc1=fc2,值-5~5
A01-11

 

  

 

posted @   我爱C编程  阅读(165)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
点击右上角即可分享
微信分享提示