使用 MATLAB 验证 AM 信号调制原理

问题描述

AM(Amplitude Modulation),即幅度调制,常用于无线电载波传输讯息。

其基本原理是使用混频器,将低频的原始信号叠加到高频的载波信号上,使用低频信号对高频信号进行幅度调制,以传递信息。

考虑如下一个频率为 \(f_c\) ,幅度为 \(A\) 的正弦载波信号: \[ c\left( t \right) =A\cdot \cos \left( 2\pi f_ct \right) \] 另有一个调制波形(原始信号): \[ m\left( t \right) =M\cdot \cos \left( 2\pi f_mt+\phi \right) \] 其中,$ f_m f_c $, \(M\) 是调制幅度,在确保 \(M<1\) 的前提下, \(1+m(t)\) 恒为正数,能够避免过调制现象产生。

使用混频器进行调制时,调制的结果就是载波 \(c(t)\) 乘以正数 \(1+m(t)\),也就是说,调制信号满足:

\[ \begin{aligned} y\left( t \right) &=\left[ 1+m\left( t \right) \right] \cdot c\left( t \right) \\\\ &=\left[ 1+M\cdot \cos \left( 2\pi f_mt+\phi \right) \right] \cdot A\cdot \cos \left( 2\pi f_ct \right) \end{aligned} \]

进一步地,应用积化和差恒等式,可以将 \(y(t)\) 用正弦信号的线性组合表出:

\[ \begin{aligned} y\left( t \right) &=A\cdot \cos \left( 2\pi f_ct \right) \\\\ &+\frac{AM}{2}\left[ \cos \left( 2\pi \left( f_c+f_m \right) t+\phi \right) +\cos \left( 2\pi \left( f_c-f_m \right) t-\phi \right) \right] \end{aligned} \]

由此可知,调制信号含有频率 \(f_c、f_c+f_m、f_c-f_m\),故在接受端只需将天线的 \(LC\) 谐振频率调整至 \(f_c\) 附近,即可接受到调制信号。

本次测试的主要目的,即验证调制信号内含有频率 \(f_c、f_c+f_m、f_c-f_m\),并通过图示直观展示信号调制过程,以便于为后续使用乘积检波器进行信号的解调提供理论依据。

求解程序

首先,我们分别生成原始信号与载波信号。注意,对于采样频率 \(f_s\) 的设置,应使其满足 Nyquist 采样定理。但为了确保采样效果,\(f_s\) 通常取待测信号频率的 5 倍以上。

1
2
3
4
5
6
7
8
9
10
11
% ***** Signals *****
omega = 2*pi*400; % 调幅
omega_c = 2*pi*6000; % 载波

fs = 150000;
t = 0 : 1/fs : 0.25; % 0 ~ 0.25s

v_hp = 5;
fa = 0.95 * cos(omega*t); % 原始信号 幅值应小于1
fc = v_hp * cos(omega_c*t); % 载波信号

其次,对原始信号和载波信号进行乘法混频:

1
2
3
% ***** Modulation *****
u_am = (1 + fa).*fc; % 乘法器

接下来,对信号进行傅里叶变换,以得到频域信息。在傅里叶变换后,应对幅值进行处理。在第 \(n\) 点处的真实幅值 \(A_n\) 满足以下关系式: \[ A_n=\left\{ \begin{array}{l} A_n'/N\ ,\ \ \ \ \ \ \ \ \ n=1\\\\ A_n'/\left( N/2 \right) ,\ \ n>1 \end{array} \right. \] 其中, \(A_n'\) 是傅里叶变化后的幅值,\(N\) 为采样点数。

1
2
3
4
5
6
7
8
9
10
11
12
% ***** Fast Fourier Transform *****
N = length(t);
U_o = fft(fa);
U_c = fft(fc);
U_am = fft(u_am);
U_o(1) = U_o(1) / N;
U_o(2:end) = U_o(2:end) .*(2/N);
U_c(1) = U_c(1) / N;
U_c(2:end) = U_c(2:end) .*(2/N);
U_am(1) = U_am(1) / N;
U_am(2:end) = U_am(2:end) .* (2/N);

最后,将计算结果作图。需要注意将频谱图的横坐标与频率之间进行换算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
% ***** Plot *****
figure(1);

subplot(3,2,1);plot(t, fa, 'k');title('原始信号');
grid;axis([0 0.005 -1.2 1.2]);

subplot(3,2,3);plot(t, fc, 'k');title('高频载波');
grid;axis([0 0.005 -1.5*v_hp 1.5*v_hp]);

subplot(3,2,5);plot(t, u_am, 'k');title('调制信号');
grid;axis([0 0.005 -2.2*v_hp 2.2*v_hp]);

wl = (0:N-1) * fs / N;
subplot(3,2,2);plot(wl, abs(U_o), 'b');title('原始信号频谱');
grid;axis([0 2*omega/(2*pi) 0 1.5]);

subplot(3,2,4);plot(wl, abs(U_c), 'b');title('载波信号频谱');
grid;axis([0 2*omega_c/(2*pi) 0 1.5*v_hp]);

subplot(3,2,6);plot(wl, abs(U_am), 'b');title('调制信号频谱');
grid;axis([0 2*omega_c/(2*pi) 0 1.5*v_hp]);

数据分析

使用MATLAB作图如下:

SVG 图形 可以尽情放大

首先观察三个信号在时域上的波形图,可见,调制信号的包络线近似为原始信号,调制信号内部的振荡频率则与高频载波信号的频率相一致。

总体上看,调制信号是将高频载波信号的频率保持不变,而将其幅度被原始信号的幅度所“限制”而得到。

接下来,在频域上,观察三个信号之间的频率关系:

坐标 X 即信号频率,坐标 Y 即为信号幅值。

在误差范围内,经 FFT 后得到的信号参数在数值上都与代码中对信号参数的原始设定相一致,表明了 FFT 运算处理的正确性。

观察“调制信号频谱”,发现正中央的谱线频率与载波信号频谱相等,即说明调制信号含有载波频率 \(f_c\) 。对于谱线中的上下边带,有: \[ 5999.84-399.989=5599.85 \] \[ 5999.84+399.989=6399.83 \] 说明调制信号中也含有 \(f_c+f_m\text{、}f_c-f_m\)

综上,此次AM信号调制的原理得到验证。

当然,在现实生活中,还需要考虑噪声的干扰。但噪声的功率往往远小于我们载波信号的功率,因此,通过一些衰减,滤波措施之后,噪声的影响是很有限的。