信号与系统 chapter 04-05 & 09-10 总结归纳

Review

在上一篇博客中,我们讲述了连续时间下的傅里叶变换以及对应的更为一般的情况,拉普拉斯变换。以及这两个变换在线性时不变系统中的表征和性质。其次我们讲述了离散时间下的傅里叶变换以及对应的更为一般的情况,Z变换。以及这两个变换在线性时不变系统中的表征和性质。无论是拉普拉斯变换还是Z变换都是对原输入信号添加一个增益后再进行傅里叶变换,为了满足添加增益后的输入信号能够收敛,我们对增益有一定的限制,由此引出了拉普拉斯变换和Z变换的收敛域的概念。

下面我们将开始介绍Chapter 06-08的内容,这也是我们最后的一部分内容。

Chapter 06

幅度与相位表征系统函数

在前文中,我们说线性时不变系统对于一个复指数信号的响应是等于信号自身乘上一个系统函数,对应的输入输出的傅里叶变换有$Y(s) = X(s)H(s)$,对于$H(s)$来说,既有幅度的信息,也有相位的信息,即我们可以将系统函数写成相量的形式,$ \lvert H(s) \rvert \arg(H(s)) $。同理,除了连续时间以外,对于离散时间的系统函数同样可以写成幅度与相位之间的组合形式,即$Y(e^{j\omega}) = X(e^{j\omega})H(e^{j\omega})$。

于是根据幅度与相位的关系,我们可以得到以下两个式子:

$$ \lvert Y(j\omega) \rvert = \lvert X(j\omega) \rvert \lvert H(j\omega) \rvert , \arg(Y(j\omega)) = \arg(X(j\omega)) + \arg(H(j\omega)) $$

可以指出的是,当系统函数表现为某个增益和线性相位时,对应的输出就是输入的一个时延。若系统函数是一个非线性的相位,常见的就是相位是与$\omega$相关的函数,这种情况下输出不仅是输入的一个时延,输出自身的序列也会发生改变,较为常见的便是群时延。群时延准确来说就是$\arg(H(j\omega)) = -\phi-\omega \alpha$的一个系统函数,具有的是非线性的相位特性,其中的$\alpha$不是固定不变的时延$t_{0}$,而是一个与$\omega$的取值有关,不同的频率对应有不同的时延,与我们前面所讲一个信号可以表示为一系列成谐波关系的复指数信号集相对应,我们不同谐波通过系统后的时延也不相同,导致输出变形。

伯德图表示系统函数

对于系统函数,我们可以通过伯德图分别画出其幅度响应特征曲线和相位响应特征曲线。需要注意的是,连续时间的系统函数是非周期的,而离散时间的系统函数是周期函数。

我们一般对系统函数取log,分别表征其幅度与相位。

Bode plot

将系统函数取log并乘上20后,当取某一个$\omega$值时,我们可以得到-3dB,那么我们称此时的频率为转折频率。

Chapter 08

AM 调制

AM调制,即幅度调制,就是将调制信号的波形(幅度信息)调制到载波信号上,现在我们假设有一个调制信号和一个载波信号$ mod = Amp * \sin(2\pi f_{m}t) , carrier = Amp * \sin(2\pi f_{c}t) $。通过下面的公式进行AM调制即:

$$ AM_{signal} = (A + mod) * carrier = (A + Amp*\sin(2\pi f_{m}t)) * \sin(2\pi f_{c}t) $$

其中,比值$\frac{max{mod}}{A} = \frac{Amp}{A}$称为调制深度,当比值为1时,调制深度为$100%$;当比值为0.5时,调制深度为$50%$,由此类推。信号的波形如图:

AM mod

那么我们接收到了这样的一个信号我们应该如何解调出我们想要的信号呢?方法一,相干解调。具体公式推导如下:

$$ y(t) = AM_{signal} * carrier = (A + Amp\sin(2\pi f_{m}t)) * \sin(2\pi f_{c}t) * \sin(2\pi f_{c}t) $$
$$ = (A + Amp
\sin(2\pi f_{m}t)) * \frac{1}{2}(1 - \cos(2\pi 2f_{c}t)) $$
$$ = \frac{1}{2}(A + Amp*\sin(2\pi f_{m}t)) - \frac{A}{2}\cos(2\pi 2f_{c}t) - \frac{Amp}{2}\sin(2\pi f_{m}t)\cos(2\pi 2f_{c}t) $$

可以观察发现,后两项的频率显著高于前两项,于是我们将相乘后的信号通过低通滤波器滤去高频信号,就可以得到我们想要的信号。只需要再去除里面的直流分量,同时提供一个幅度为2的增益,这样就可以得到我们调制的信号。

方法二,包络检波。详见下图:

AM Demod

为了防止概念过于抽象,这里提供MATLAB的仿真代码,可以较为形象的理解AM调制与解调的过程。

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
clc;
clear;
Fs = 4e6; % 采样频率,根据采样定理,采样频率要大于最高频率的两倍
Fc = 2e5; % 载波频率
Fm = 4e3; % 调制信号频率
Am = 1; % 载波幅度 -> 叠加在调制信号的直流偏置
ma = 1; % 调幅指数

% 创建时间轴
L = 8e3; % 取样点数
Ts = 1 / Fs; % 采样周期
t = (1 : L ) * Ts;

% 生成AM信号
% 创建载波信号 正弦载波
carr_w = Am * sin(2*pi*Fc*t);
figure;
plot(t, carr_w);
title('carr_w');
% 创建调制信号(这里使用一个简单的正弦波作为调制信号)
modu_s = Am*sin(2*pi*Fm*t); % Am * ma is the Amp of modu_s
figure;
plot(t, modu_s);
title('modu_s');

% 进行调幅
AM_signal = ((ma + modu_s) .* sin(2*pi*Fc*t));
% AM_signal = (modu_s .* sin(2*pi*Fc*t));
% if Am is not enough to enlarge modu_s to all over 0 -> over-modulation
[ST_I,f_I] = my_fft(AM_signal,Fs); % 观察已调信号st的频谱
% 解调AM信号
AM_mid = AM_signal .* carr_w;
output = lowpass(AM_mid, Fm*2, Fs);
figure;
plot(t, output);
title('demodu_s with DC');
out_fix = output-mean(output); % 去除直流分量

% 绘制解调后的波形
figure;
plot(t, AM_signal);
title('AM调制波');
figure;
plot(t, 2*out_fix);
hold on
plot(t,modu_s,'r-');
hold on
plot(t, output,'r--');
legend('解调信号','调制信号','未去除直流分量的解调信号')
% 计算调制指数
Amax = max((output(L/8:7*L/8)));
Amin = min((output(L/8:7*L/8)));
ma = (Amax - Amin) / (Amax + Amin);
fprintf('调制指数 ma = %.2f\n', ma);
% 观察频谱 不提供FFT函数 可以直接使用MATLAB自带的FFT函数操作
[ST_O,f_O] = my_fft(out_fix,Fs);
figure;
plot(f_O,abs(ST_O));
xlabel('频率(Hz)');
ylabel('幅度');
title('解调信号频谱图');
hold on
plot(f_I,abs(ST_I));
xlabel('频率(Hz)');
ylabel('幅度');
title('已调信号频谱图');
legend('解调信号','AM信号');
[~, max_index] = max(ST_O);
fre=abs(f_O(max_index));
fprintf('基带频率 fre = %.2f\n',fre );

FM 调制 和 PM 调制

首先我们先给出FM调制的表达式:

$$ FM_{signal}(t) = A\cos((\omega_{c}+k_{f}x(t))t + \theta_{c}) $$

这个表明FM调制,就是将调制信号调制到载波信号上,调制后的信号的频率由调制信号控制。与之极其相似的是PM调制的表达式,详见如下:

$$PM_{signal}(t) = A \cos(2\pi f_c t + \theta_{c} + 2\pi k_f x(t)) $$

很显然,一个是调制信号控制调制后信号的频率,一个是调制信号控制调制后信号的相位,即$x(t)$出现的位置不一样。但是由于相位等价于频率的积分$\theta = \int \omega(t) dt$,所以两者之间有时候很难区分。如果说将FM调制的式子展开,就能够发现与PM调制表达式一致,只是用于控制相位的不是调制信号,而是调制信号与时间t的乘积——$k_{f}x(t) * t$。

两种不同调制方式的效果图如下:

FM PM

对应的MATLAB仿真代码如下:

  • 首先是FM调制,其中还包含了雷达通信使用的线性调制。

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    % FM调制解调过程
    clc;clear;
    % 基本参数
    fm = 1e2; % 基带信号频率 -> modulation signal
    T = 5; % 信号时长
    fs = 2e4; % 采样频率 奈奎斯特采样定理为最大频率的两倍,这里取20倍为了绘制更多的细节,让时域信号更平滑
    dt=1/fs; % 时间采样间隔,采样频率的倒数
    N=T/dt; % 采样点个数,总时长除以采样间隔
    t = (0 : N-1) * dt; % 采样点的时间序列,作为横坐标

    % *********Modulated Signal in Time domain*******
    Am = 1; % 基带信号幅度
    modu_s = Am*cos(2*pi*fm*t); % 基带信号
    figure; % 绘制第一幅图
    plot(t,modu_s); % 时间t为横坐标,基带信号mt为纵坐标绘图,线宽为2
    xlabel('Time'); % 横坐标标注
    ylabel('Amp'); % 纵坐标标注
    title('Base signal'); % 图标题标注
    axis([0 0.1 -1.1 1.1]); % 横纵坐标范围设置
    % 绘制一条从(0,0)到(0.1,0)的蓝色实线,线宽为2
    line([0,0.1],[0,0],'color','b','Linewidth',2);

    % *****Modulated Signal in Frequency domain*****
    [mf, msf] = T2F(t, modu_s);
    figure;
    plot(mf, abs(msf));
    title('Modu_s in Freq domain');
    xlabel('Frequency Hz');
    ylabel('Amp H');
    axis([-250 250 0 3]);

    % *****Carrier Signal in Time domain*******
    fc = 1e3;
    A = 1;
    carrier_wave = A * cos(2 * pi * fc * t);
    figure;
    plot(t, carrier_wave);
    title('carrier wave');
    xlabel('time');
    ylabel('Amp');
    axis([0 0.01 -1.1 1.1]);
    line([0,0.01],[0,0],'color','b','Linewidth',2);

    % ******carrier signal in Frequency domain******
    [cf, csf] = T2F(t, carrier_wave);
    figure;
    plot(cf, abs(csf));
    title('carrier signal in freq');
    xlabel('f Hz');
    ylabel('Amp H');
    axis([-1200 1200 0 3]);

    % FM
    Ksfm = 4e3; % influence
    SFM = A * cos(2*pi*fc*t + (Ksfm*Am)/(2*pi*fm).*sin(2*pi*fm*t) + pi);
    figure;
    plot(t, SFM, 'LineWidth', 1, 'color', 'r');
    xlabel('Time');
    ylabel('Amp');
    title('Frequency Modulation');
    axis([0 0.1 -1.2 1.2])

    % Linear Frequency modulate
    Ksfm1 = 1e5;
    SFM1 = A * cos(2*pi*fc*t + pi*Ksfm1*t.^2);
    figure;
    plot(t, real(SFM1), 'LineWidth', 1, 'color', 'r');
    xlabel('Time');
    ylabel('Amp');
    title('Frequency Modulation');
    axis([0.03 0.08 -1.2 1.2])

    for i=1:N-1
    diff_SFM(i) = (SFM(i + 1) - SFM(i)) / dt;
    end
    diff_SFM = abs(hilbert(diff_SFM));
    figure;
    plot((1:N-1) * dt, diff_SFM);
    title('envelope with DC');
    xlabel('Time');
    ylabel('Amp');
    axis([0 0.1 1000 11000]);
    line([0, 0.1], [0, 0], 'color', 'b', 'linewidth', 2);

    demodu_s = (diff_SFM / A - 2*pi*fc)/Ksfm;
    figure;
    plot((1:N-1) * dt, demodu_s);
    hold on
    plot(t, modu_s, 'r-', 'color', 'b');
    title('envelope and raw');
    xlabel('Time');
    ylabel('Amp');
    axis([0 0.1 -1.2 1.2]);
    line([0, 0.1], [0, 0], 'color', 'b', 'linewidth', 2);
  • 其次是相位调制和解调,你会发现解调的效果不好这是因为相位承载了信号大部分的信息,相位调制本质上将信号的相位信息破坏了,所以解调的效果一般。

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
53
% PM调制解调
% Demonstrate simple Phase Demodulation using Hilbert transform

clear; clc;
fc = 210; % carrier frequency
fm = 10; % frequency of modulating signal
alpha = 1; % amplitude of modulating signal
theta = pi/4; % phase offset of modulating signal
beta = pi/5; % constant carrier phase offset
receiverKnowsCarrier= 'False';
% Set True if receiver knows carrier frequency & phase offset

fs = 8*fc; % sampling frequency
duration = 0.5; % duration of the signal
t = 0:1/fs:duration-1/fs; % time base

%Phase Modulation
m_t = alpha*sin(2*pi*fm*t + theta); % modulating signal
phi_t = 2*pi*fc*t + beta + m_t;
x = cos(phi_t); % modulated signal

figure;
plot(t,m_t); % plot modulating signal
title('Modulating signal');
xlabel('t'); ylabel('m(t)');
figure;
plot(t,x); % plot modulated signal
title('Modulated signal');
xlabel('t');ylabel('x(t)');
axis([0 0.3 -1.1 1.1]);

% %Add AWGN noise to the transmitted signal
% nMean = 0; nSigma = 0.1; %noise mean and sigma
% n = nMean + nSigma*randn(size(t)); %awgn noise
% r = x + n; %noisy received signal

% Demodulation of the noisy Phase Modulated signal
z = hilbert(x); % form the analytical signal from the received vector
inst_phase = unwrap(angle(z)); % instaneous phase

%If receiver knows the carrier freq/phase perfectly
if strcmpi(receiverKnowsCarrier,'True')
offsetTerm = 2*pi*fc*t+beta;
%else, estimate the subtraction term
else
p = polyfit(t,inst_phase,1); % linearly fit the instaneous phase
%re-evaluate the offset term using the fitted values
estimated = polyval(p,t); offsetTerm = estimated;
end
demodulated = inst_phase - offsetTerm;
figure(); plot(t,demodulated); % demodulated signal
title('Demodulated signal'); xlabel('n'); ylabel('m(t)');
axis([0 0.5 -inf inf])

除此之外还有很多不同的调制方式,比如数字信号调制技术。一旦涉及到了数字信号,就需要考虑到信号编码的方式,这样传递的数据才会更加丰富。

以上就是第八章的大致内容,作者也根据相应的调制内容提供了MATLAB的仿真代码,希望大家能够感受到通信之美。