通信原理与MATLAB(五):FM的调制解调

1.FM的调制原理

FM是频率调制,是用基带信号控制载波的频率,其实现原理如下图所示,基带信号经过积分器,然后和载波信号一起输入给调相器,基带信号控制载波的频率,实现FM的调制。
在这里插入图片描述

2.FM的解调原理

FM的解调原理如下图所示,FM信号经过信道传输之后,通过鉴频器变成调幅调频波,然后经过移相器,包络检波器得到包络,去除偏置恢复出原始信号。
在这里插入图片描述

3.FM调制解调的代码

FM.m,FM主文件

% FM调制解调过程
%% 基本参数
clear all;                  % 清除变量
close all;                  % 关闭所有窗口图像
fm = 100;                   % 基带信号频率
T = 2;                      % 信号时长
fs = 20000;                 % 采样频率 奈奎斯特采样定理为最大频率的两倍,这里取20倍为了绘制更多的细节,让时域信号更平滑
dt=1/fs;                    % 时间采样间隔,采样频率的倒数
N=T/dt;                     % 采样点个数,总时长除以采样间隔
t=[0:N-1]*dt;               % 采样点的时间序列,作为横坐标

%% ******************调制信号时域波形******************
Am=1;                       % 基带信号幅度 
mt=Am*cos(2*pi*fm*t);       % 基带信号
figure(1);                  % 绘制第一幅图
subplot(221);               % 窗口分割,将一幅图分割成2*2plot(t,mt,'Linewidth',2);   % 时间t为横坐标,基带信号mt为纵坐标绘图,线宽为2
xlabel('t/时间');           % 横坐标标注
ylabel('幅度');             % 纵坐标标注
title('基带信号');          % 图标题标注
axis([0,0.1,-1.1,1.1]);     % 横纵坐标范围设置
line([0,0.1],[0,0],'color','b','Linewidth',2);% 绘制一条从(0,0)(0.1,0)的蓝色实线,线宽为2

%% ******************调制信号频域波形******************
subplot(222);
[mf,msf]=T2F(t,mt);         % 傅里叶变换,得到纵坐标频谱和横坐标频率
plot(mf,abs(msf),'Linewidth',2);    % 画出基带信号频谱,线宽为2
title('基带信号的频谱');            % 图标题标注
xlabel('f/Hz');                     % 横坐标标注
ylabel('幅度/H(f)');                % 纵坐标标注
axis([-150 150 -inf inf]);          % 横纵坐标范围设置

%% ******************载波信号时域波形******************
subplot(223);
fc=1000;                            % 载波频率
A=1;                                % 载波幅度
zaibo=A*cos(2*pi*fc*t);             % 载波时域信号
plot(t,zaibo,'r','Linewidth',2);    % 时间t为横坐标,载波信号zaibo为纵坐标绘图,线宽为2,红色
xlabel('t/时间');                   % 横坐标标注
ylabel('幅度');                     % 纵坐标标注
title('载波信号');                  % 图标题标注
axis([0,0.01,-1.1,1.1]);            % 横纵坐标范围设置
line([0,0.01],[0,0],'color','b','Linewidth',2);% 绘制一条从(0,0)(0.01,0)的蓝色实线,线宽为2

%% ******************载波信号频域波形******************
subplot(224);
[mf1,msf1]=T2F(t,zaibo);            % 傅里叶变换,得到纵坐标频谱和横坐标频率
plot(mf1,abs(msf1),'r','Linewidth',2);  % 载波信号频谱,线宽为2,红色
title('载波信号的频谱');            % 图标题标注
xlabel('f/Hz');                     % 横坐标标注
ylabel('幅度/H(f)');                % 纵坐标标注
axis([-1200 1200 -inf inf]);        % 横纵坐标范围设置

%% ******************FM波信号时域波形******************
Kf=4000;%调频系数
SFM=A*cos(2*pi*fc*t+Kf*Am/2/pi/fm.*sin(2*pi*fm*t));
%% 加噪声
% SNR=20;                            %信噪比为  dB
% SFM=awgn(SFM,SNR,'measured');
figure(2);                          % 绘制第二幅图
subplot(211);                       % 窗口分割,将一幅图分割成2*1plot(t,SFM,'Linewidth',2);          % 画出FM信号波形,线宽为2
title('FM调制信号');                % 图标题标注
xlabel('t/时间');                   % 横坐标标注
ylabel('幅度');                     % 纵坐标标注
axis([0,0.02,-2,2]);                % 横纵坐标范围设置
line([0,0.02],[0,0],'color','b','Linewidth',2);% 绘制一条从(0,0)(0.02,0)的蓝色实线,线宽为2

%% ******************FM波信号频域波形******************
[mf2,msf2]=T2F(t,SFM);              % 傅里叶变换,得到纵坐标频谱和横坐标频率
subplot(212);
plot(mf2,abs(msf2),'Linewidth',1);  % 画出AM信号频谱
title('FM波信号的频谱');            % 图标题标注
xlabel('f/Hz');                     % 横坐标标注
ylabel('幅度/H(f)');                % 纵坐标标注
axis([-2500 2500 -inf inf]);        % 横纵坐标范围设置

%% ******************非相干解调******************
%% ******************调频信号经过微分器,移相器,包络检波器******************
for i=1:N-1
    diff_SFM(i)=(SFM(i+1)-SFM(i))/dt; % 微分器,将调频波变换成调幅调频波
end
diff_SFM=abs(hilbert(diff_SFM));      % 希尔伯特变换移相,然后包络检波
figure(3);
subplot(211);
plot([1:N-1]*dt,diff_SFM,'Linewidth',2)% 绘制包络检波后的波形
title('经过包络检波所得信号波形');
xlabel('t/时间');                   % 横坐标标注
ylabel('幅度');                     % 纵坐标标注
axis([0,0.1,1000,11000]);           % 横纵坐标范围设置
line([0,0.1],[0,0],'color','b','Linewidth',2);% 绘制一条从(0,0)(0.1,0)的蓝色实线,线宽为2
%% ******************包络检波后去除偏置******************
diff_SFM=(diff_SFM/A-2*pi*fc)/Kf;   % 除去偏置
subplot(212);
plot([1:N-1]*dt,diff_SFM,'Linewidth',2)% 绘制最终解调的波形
hold on;                            % 保留之前的图不进行刷新
plot(t,mt,'r-','Linewidth',2);      % 画出原信号
title('经过非相干解调所得的信号波形');
xlabel('t/时间');                   % 横坐标标注
ylabel('幅度');                     % 纵坐标标注
axis([0 0.1 -1.1 1.1]);             % 横纵坐标范围设置
line([0,0.1],[0,0],'color','b','Linewidth',2);% 绘制一条从(0,0)(0.1,0)的蓝色实线,线宽为2

T2F.m文件,FFT功能

function [f,sf]= T2F(t,st)      % FFT
% dt = t(2)-t(1);
T=t(end);                       % 输入信号的时间最大值为T
df = 1/T;                       % dt=1/fs; 时间采样间隔,采样频率的倒数;
                                % N=T/dt;  采样点个数,总时长除以采样间隔
                                % 两式联合推导 df = 1/T 
N = length(st);                 % 输入信号时间的长度为采样点数
f=-N/2*df : df : N/2 * df-df;   % 频率分布
sf = fft(st);                   % 做FFT
sf = T/N * fftshift(sf);        % 最后输出,将0-fs频谱搬移到-fs/2-fs/2频谱

F2T.m文件,IFFT功能

function[t,st]=F2T(f,Sf)        % IFFT
df=f(2)-f(1);                   % 频率间隔
fmax=(f(end)-f(1)+df);          % 最大频率减最低频率加上频率间隔为带宽
dt=1/fmax;                      % 采样间隔
N=length(f);                    % 采样点数
t=[0:N-1] * dt;                 % 时间分布
Sf=fftshift(Sf);                %0-fs频谱搬移到-fs/2-fs/2频谱
st=fmax * ifft(Sf);             % 做IFFT
st=real(st);                    % 取实部

注意:这三个文件要放在同一文件夹中,第一个是主文件,另外三个是函数文件

4.FM调制解调结果图

为了效果展示,图中FM信号是没有加高斯白噪声的。
如果想加噪声,把下面这行代码解除注释即可。

% SFM=awgn(SFM,SNR,'measured');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.优缺点

优点:抗噪声能力强;
缺点:有效传输带宽大,占用频带资源。
牺牲通信系统的有效性来提高可靠性。

  • 42
    点赞
  • 265
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
### 回答1: 在MATLAB中进行音频FM调制解调需要以下几个步骤: 1. 读取音频文件:使用MATLAB内置的音频读取函数,如audioread,可以读取音频文件并将其转换为数字信号。 2. 调制信号生成:使用调制信号的频率和幅度信息,结合音频信号进行调制。可以使用MATLAB内置的信号生成函数,如sin函数,生成调制信号。 3. 调制:将调制信号与音频信号进行相乘或叠加。根据FM调制原理,可以使用MATLAB中的乘法或加法运算符实现。 4. 解调信号生成:使用解调信号的频率信息,结合调制信号进行解调。同样可以使用MATLAB内置的信号生成函数,如sin函数,生成解调信号。 5. 解调:将调制信号与解调信号进行相乘或叠加。根据FM解调原理,可以使用MATLAB中的乘法或加法运算符实现。 6. 写入音频文件:将解调后的信号保存为音频文件。使用MATLAB内置的音频写入函数,如audiowrite,将解调后的信号保存为音频文件。 需要注意的是,在进行FM调制解调时,需要根据实际的调制指标(如调制指数),以及选择适当的调制信号和解调信号频率,来保证正确的调制解调效果。 ### 回答2: MATLAB可以用于音频FM调制解调。首先,我们需要准备两个音频文件,一个是调制信号,一个是载波信号。调制信号可以是我们想传输的音频信号,而载波信号则是一个固定频率的正弦波。 首先,我们可以使用MATLAB的信号处理工具箱来读取和处理音频文件。可以使用audioread函数来读取音频文件,并使用resample函数可以调整采样率,使其适应于调制和解调的过程。 接下来,我们需要生成一个固定频率的正弦波作为我们的载波信号。可以使用MATLAB的sin函数来生成正弦波,并根据需要调整其频率和振幅。 一旦我们获得了调制信号和载波信号,我们可以开始进行FM调制。使用MATLAB的modulate函数,我们可以将调制信号和载波信号进行FM调制,生成调制后的信号。 进行FM解调时,我们可以使用demod函数将调制后的信号还原为调制信号。可以选择使用不同的调制方法,例如直接解调或用于PM调制的解调方法。 最后,我们可以使用MATLAB的sound函数将解调后的信号播放出来,以检查解调效果是否符合预期。 在 MATLAB 中进行音频FM调制解调的过程比较简单,并且可以轻松地对调制参数进行调整和优化。通过这种方法,我们可以实现音频信号的无线传输和接收,同时也可以对调制和解调的效果进行研究和分析。 ### 回答3: 音频FM调制解调是一种常见的信号处理和通信技术,具有广泛的应用。在MATLAB中进行音频FM调制解调可以采用以下步骤: 1. 音频信号加载:首先,将需要调制的音频信号导入MATLAB环境中。可以使用MATLAB的音频处理工具箱或者wavread函数来实现。 2. 调制参数设置:根据需要,设置FM调制的参数,包括载波频率、调制指数和采样率等。载波频率一般选择合适的中心频率,调制指数用于控制调制的程度,采样率用于设定采样的精度。 3. 调制过程:使用MATLAB的modulate函数将音频信号进行调制。传入音频信号、载波频率和调制指数等参数,即可得到调制后的信号。 4. 解调过程:接下来,使用MATLAB的demodulate函数将调制后的信号进行解调。传入调制后的信号、载波频率和调制指数等参数,即可得到解调后的信号。 5. 音频信号输出:最后,使用MATLAB的音频处理工具箱或者wavwrite函数将解调后的信号导出为音频文件,以便进一步使用或播放。 需要注意的是,在进行FM调制解调过程中,应确保信号的采样率满足奈奎斯特采样定理,以避免信号混叠现象的发生。 总的来说,MATLAB提供了一系列方便易用的函数和工具,能够帮助我们实现音频FM调制解调,并且具有良好的灵活性和可扩展性,可以满足不同应用场景和需求的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜yuan~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值