Date: 2019.3.26
前言
回想一下大学时期学习的通信原理,还记得多少东西呢,额,调制解调,基带信号,调制信号,似乎没有多少了。。。。不用是硬伤啊。下面对调频信号FM的相干解调进行分析并实现,网上非相干解调的实现非常多,但是相干解调由于应用较少,实现也比较少。
1、参考
孤独的大白白噪声及Matlab常用实现方法
FM调制解调
【通信基础知识】白噪声、相关解调和相干解调
AM、FM、DSB、SSB、ISB信号及其频谱
对SSB信号的调制以及相干解调过程进行仿真
相干解调与非相干解调
2、相干解调与非相干解调
区别:相干解调表明本地的载波和发送载波同频同相,而非相干解调则不必关注发送载波是什么相位。
相干解调:
接收机接收到的信号为已调信号,该信号通过解调器再次与一个载波信号相乘。
解调后的信号包含一个低频信号 和一个高频成分,用一个低通滤波器把高频成分滤掉,就得到了要传递的基带信号。以上这个解调过程就是相干解调。
调频指数:
调频指数Mf是最大频偏Δfm与调制信号频率F的比值:
Mf=Δfm/F
窄带调频:
就是指Mf远小于1,即最大频偏远远小于调制信号频率的调频信号。
3、调制方式
(一) 模拟调制:用连续变化的信号去调制一个高频正弦波(载波信号)。
主要有:
幅度调制(调幅AM,双边带调制DSBSC,单边带调幅SSBSC,残留边带调制VSB以及独立边带ISB);
角度调制(调频FM,调相PM)两种。因为相位的变化率就是频率,所以调相波和调频波是密切相关的;
(二) 数字调制:用数字信号对正弦或余弦高频振荡进行调制。
主要有:
振幅键控ASK;
频率键控FSK;
相位键控PSK;
(三) 脉冲调制:用脉冲序列作为载波进行调制。
主要有:
脉冲幅度调制(PAM:Pulse Amplitude Modulation);
脉宽调制(PDM:Pulse Duration Modulation);
脉位调制(PPM:Pulse Position Modulation);
脉冲编码调制(PCM:Pulse Code Modulation) ;
4、相干解调Matlab代码实现(部分)
这里仅提供了相干解调的部分代码,需要完整代码可通过QQ(2963033731)联系我。
%生成FM信号
clc
clear all;
close all;
%%%%%%%%%%%%%%%%%%FM调制%%%%%%%%%%%%%%%%%%%%%
ps = 625000; % 数据率625KHz
Fs = 80*10^4; % 80M采样率
dt = 1/Fs; % 采样间隔
a = 1000;
t = 0:dt:(a*Fs/ps-1)/Fs; % 产生时间序列
N = length(t)-1;
am = 5; % 设定调制信号幅度
fm = 15*10^2; % 调制信号频率
fc = 5*10^6; % 载波频率5M
mt = am*sin(2*pi*fm*t); % 生成调制信号
ct = cos(2*pi*fc*t); % 生成载波信号
kf = 10000; % 调频系数 频偏75kHz
integral_mt(1)=0;
for i=1:N %积分
integral_mt(i+1)=integral_mt(i)+mt(i)*dt;
end
%figure(100);plot(t,integral_mt); title('integral_mt');
sfm= am*cos(2*pi*fc*t+2*pi*kf*integral_mt); %已调信号
%%%%%%%%%%%%画图%%%%%%%%%%%%
figure(1);
subplot(311);
plot(t,mt); title('调制信号时域');
%axis([0 10^(-3) -5 5]);
subplot(312);plot(t,ct); title('载波信号时域');
%axis([0 10^(-5) -1 2]);
subplot(313);plot(t,sfm);title('FM已调信号时域');
%axis([0 10^(-5) -5 5]);
实验效果图:
5、非相干解调Matlab代码实现(部分)
这里仅提供了非相干解调的部分代码,需要完整代码可通过QQ(2963033731)联系我。
%
% dt=0.001; %设定时间步长
% t=0:dt:1.5; %产生时间向量
% am=15; %设定调制信号幅度←可更改
% fm=15; %设定调制信号频率←可更改
% mt=am*cos(2*pi*fm*t); %生成调制信号
% fc=50; %设定载波频率←可更改
% ct=cos(2*pi*fc*t); %生成载波
% kf=10; %设定调频指数
% int_mt(1)=0; %对mt进行积分
% for i=1:length(t)-1
% int_mt(i+1)=int_mt(i)+mt(i)*dt;
% end
% sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt); %调制,产生已调信号
% plot(sfm)
echo off
close all
clear all
clc
%FM调制
dt=0.001; %设定时间步长
t=0:dt:1.5; %产生时间向量
am=5; %设定调制信号幅度
fm=5; %设定调制信号频率
mt=am*cos(2*pi*fm*t); %生成调制信号
fc=50; %设定载波频率
ct=cos(2*pi*fc*t); %生成载波
kf=10; %设定调频指数
int_mt(1)=0;
for i=1:length(t)-1
int_mt(i+1)=int_mt(i)+mt(i)*dt; %求信号m(t)的积分
end %调制,产生已调信号
sfm=am*cos(2*pi*fc*t+2*pi*kf*int_mt); %调制信号
%添加孤独的大白白噪声
sn1=10; %设定信躁比(小信噪比)
sn2=30; %设定信躁比(大信噪比)
sn=0; %设定信躁比(无信噪比)
db=am^2/(2*(10^(sn/10))); %计算对应的孤独的大白白躁声的方差
n=sqrt(db)*randn(size(t)); %生成孤独的大白白躁声
nsfm=n+sfm; %生成含孤独的大白白躁声的已调信号(信号通
%过信道传输)
%FM解调
for i=1:length(t)-1 %接受信号通过微分器处理
diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;
end
diff_nsfmn = abs(hilbert(diff_nsfm)); %hilbert变换,求绝对值得到瞬时%幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
diff_nsfmn1=diff_nsfmn-zero;
%时域到频域转换
ts=0.001; %抽样间隔
fs=1/ts; %抽样频率
df=0.25; %所需的频率分辨率,用在求傅里叶变换
%时,它表示FFT的最小频率间隔
%对调制信号m(t)求傅里叶变换
m=am*cos(2*pi*fm*t); %原调信号
fs=1/ts;
if nargin==2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df1=fs/n; %以上程序是对调制后的信号u求傅里变换
M=M/fs; %缩放,便于在频铺图上整体观察
f=[0:df1:df1*(length(m)-1)]-fs/2; %时间向量对应的频率向量
实验效果图:
THE END!