通信原理实验(二)模拟角度调制

余弦波产生程序

function signal = cosx(A, fc, t1, t2, fs)
    t = t1 : 1/fs : t2;
    signal = A * cos(2 * pi * fc * t);
end

FM

FM信号产生

FM信号形式

只需要对调制信号进行积分,然后放在载波的附加相位项即可。

积分程序

由积分的定义可得

function signal = integral(x, fs)
    N = length(x);
    signal = zeros(1, N);
    for i = 1 : N
        signal(i) = sum(x(1 : i)) / fs;
    end
end

1/fs,为采样间隔,也就是每个小矩形的宽,sum(x(1 : i))将1到第i个采样点的值相加,采样值对应小矩形的高,fs越大,积分结果越接近实际值。 

实验主程序

clc;clear;
%% 参数定义
fs = 1000;
t = 0 : 1/fs : 3;
fc = 20;
fm = 1;
kf = 5;
kp = 5;
%% 调制信号与载波信号定义
mt = cos(2 * pi * fm * t);
ct = cos(2 * pi * fc * t);
%% 调频产生
mt1 = integral(mt, fs); 
st = cos(2 * pi * fc * t + kp * mt1);
%% 调相
% st = cos(2 * pi * fc * t + kp * mt);
%% 调频解调
demt = fmde(st);
%% 调相解调
% demt = pmde(st, fc, t);
%% 频谱分析
Hmt = fft(mt); Hct = fft(ct); Hst = fft(st); Hdemt = fft(demt);
NF = length(Hmt);
nf = 0 : 1 / NF : 1 - 1 / NF;
f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形');
subplot(2, 3, 2);plot(t, ct);title('载波信号时域波形');
subplot(2, 3, 3);plot(t, st);title('已调信号时域波形');
subplot(2, 3, 4);plot(f, abs(Hmt));title('调制信号频谱');
subplot(2, 3, 5);plot(f, abs(Hct));title('载波信号频谱');
subplot(2, 3, 6);plot(f, abs(Hst));title('已调信号频谱');
% figure(2);
% subplot(2, 1, 1);plot(t, demt);title('解调信号时域波形');
% subplot(2, 1, 2);plot(f, abs(Hdemt));title('解调信号频谱');






实验结果

FM信号解调

解调原理

可以先对接收到的FM信号进行微分,得到FM-AM信号,然后对FM-AM信号求得它对应的解析信号,解析信号为复信号,解析信号的模就是原FM-AM信号的振幅的绝对值,具体表达式为

|2*pi*f + kf * mt|,如果想通过获得解析信号的模进行解调那么2*pi*f + kf * mt要恒大于0,否则小于0的部分会被翻上取,导致解调后的波形相对于原调制信号有剧烈的失真,如果2*pi*f + kf * mt恒大于0,那么解析信号的相当于就是先对调制信号进行一个幅值等比例变换再加上一个正值,mt原所在频段内没有产生失真。

微分程序

function signal = differ(x)
    N = length(x);
    signal = zeros(1, N);
    for i = 1 : N - 1
        signal(i) = x(i + 1) - x(i);
    end
end

 FM解调程序

function signal = fmde(x)
    diffx = differ(x);
    hilbertx = hilbert(diffx);
    signal = abs(hilbertx);
end

实验主程序

clc;clear;
%% 参数定义
fs = 1000;
t = 0 : 1/fs : 3;
fc = 20;
fm = 1;
kf = 5;
kp = 5;
%% 调制信号与载波信号定义
mt = cos(2 * pi * fm * t);
ct = cos(2 * pi * fc * t);
%% 调频产生
mt1 = integral(mt, fs); 
st = cos(2 * pi * fc * t + kp * mt1);
%% 调相
% st = cos(2 * pi * fc * t + kp * mt);
%% 调频解调
demt = fmde(st);
%% 调相解调
% demt = pmde(st, fc, t);
%% 频谱分析
Hmt = fft(mt); Hct = fft(ct); Hst = fft(st); Hdemt = fft(demt);
NF = length(Hmt);
nf = 0 : 1 / NF : 1 - 1 / NF;
f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形');
subplot(2, 3, 2);plot(t, ct);title('载波信号时域波形');
subplot(2, 3, 3);plot(t, st);title('已调信号时域波形');
subplot(2, 3, 4);plot(f, abs(Hmt));title('调制信号频谱');
subplot(2, 3, 5);plot(f, abs(Hct));title('载波信号频谱');
subplot(2, 3, 6);plot(f, abs(Hst));title('已调信号频谱');
figure(2);
subplot(2, 1, 1);plot(t, demt);title('解调信号时域波形');
subplot(2, 1, 2);plot(f, abs(Hdemt));title('解调信号频谱');






实验结果

 

PM

PM信号产生

直接将调制信号放在载波的附加相位项即可。

实验主程序

clc;clear;
%% 参数定义
fs = 1000;
t = 0 : 1/fs : 3;
fc = 20;
fm = 1;
kf = 5;
kp = 5;
%% 调制信号与载波信号定义
mt = cos(2 * pi * fm * t);
ct = cos(2 * pi * fc * t);
%% 调频产生
% mt1 = integral(mt, fs); %
% st = cos(2 * pi * fc * t + kp * mt1);
%% 调相
st = cos(2 * pi * fc * t + kp * mt);
%% 调频解调
% demt = fmde(st);
%% 调相解调
demt = pmde(st, fc, t);
%% 频谱分析
Hmt = fft(mt); Hct = fft(ct); Hst = fft(st); Hdemt = fft(demt);
NF = length(Hmt);
nf = 0 : 1 / NF : 1 - 1 / NF;
f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形');
subplot(2, 3, 2);plot(t, ct);title('载波信号时域波形');
subplot(2, 3, 3);plot(t, st);title('已调信号时域波形');
subplot(2, 3, 4);plot(f, abs(Hmt));title('调制信号频谱');
subplot(2, 3, 5);plot(f, abs(Hct));title('载波信号频谱');
subplot(2, 3, 6);plot(f, abs(Hst));title('已调信号频谱');
% figure(2);
% subplot(2, 1, 1);plot(t, demt);title('解调信号时域波形');
% subplot(2, 1, 2);plot(f, abs(Hdemt));title('解调信号频谱');






实验结果

2*pi*f + kf * mt恒大于0时。

 

2*pi*f + kf * mt有部分小于0时。

可以明显看到,当mf过大,那么2*pi*f + kf * mt就有一部分小于0,导致解调信号的失真。

PM信号解调

解调原理

类似于FM解调,可以利用正弦解析信号的相位为正弦信号的相位进行解调。

具体步骤,将接收到的PM信号进行希尔伯特变换y,原PM信号作为实部,y作为虚部构成PM信号的解析信号,直接利用求复数相位的数学表达式即可获得解析信号的相位,也就是PM信号的相位,具体表达式为 2 * pi * fc * t + kp * mt,所以还需要减去2 * pi * fc * t,并且在计算机中表示相位只能表示一个主值区间,需要对利用计算机求得复数的相位进行解卷,得到去相位卷绕的相位,即解调出来的信号。

解调程序

function signal = pmde(x, fc, t)
    hilbertx = hilbert(x);
    signal = unwrap(angle(hilbertx) - 2 * pi * fc * t); 
end

unwrap()即为去相位卷绕。

实验主程序

clc;clear;
%% 参数定义
fs = 1000;
t = 0 : 1/fs : 3;
fc = 20;
fm = 1;
kf = 5;
kp = 5;
%% 调制信号与载波信号定义
mt = cos(2 * pi * fm * t);
ct = cos(2 * pi * fc * t);
%% 调频产生
% mt1 = integral(mt, fs); %
% st = cos(2 * pi * fc * t + kp * mt1);
%% 调相
st = cos(2 * pi * fc * t + kp * mt);
%% 调频解调
% demt = fmde(st);
%% 调相解调
demt = pmde(st, fc, t);
%% 频谱分析
Hmt = fft(mt); Hct = fft(ct); Hst = fft(st); Hdemt = fft(demt);
NF = length(Hmt);
nf = 0 : 1 / NF : 1 - 1 / NF;
f = nf * fs;
%% 画图
figure(1);
subplot(2, 3, 1);plot(t, mt);title('调制信号时域波形');
subplot(2, 3, 2);plot(t, ct);title('载波信号时域波形');
subplot(2, 3, 3);plot(t, st);title('已调信号时域波形');
subplot(2, 3, 4);plot(f, abs(Hmt));title('调制信号频谱');
subplot(2, 3, 5);plot(f, abs(Hct));title('载波信号频谱');
subplot(2, 3, 6);plot(f, abs(Hst));title('已调信号频谱');
figure(2);
subplot(2, 1, 1);plot(t, demt);title('解调信号时域波形');
subplot(2, 1, 2);plot(f, abs(Hdemt));title('解调信号频谱');












实验结果

 

理论来说应该不会有直流成分,因为计算机的有限字长,导致计算误差,但解调出来的信号并无失真。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值