我相信你说的是amplitude modulation (AM) 和frequency modulation (FM)。基本上,AM 是指改变正弦信号的幅度,并使用与时间相关的函数来改变它。 FM 是类似的,只是频率变化而不是幅度变化。
给定一个时变信号A(t),AM通常表示为:
小注:上面实际上是double sideband suppressed carrier (DSB-SC) modulation,但如果你想在你的问题中实现你想要的,我们实际上需要这样做。此外,信号通常使用cos 而不是sin,以确保传输时的零相移。但是,因为您的原始代码使用sin,所以我也将使用它。
我把这个免责声明放在这里,以防任何通信理论家想尝试纠正我:)
同理,FM通常表示为:
A(t) 是所谓的消息或调制信号,因为它正在改变正弦波的幅度或频率。正弦曲线本身就是所谓的载波信号。使用 AM 和 FM 的原因是由于通信理论。在模拟通信系统中,为了将信号从一个点传输到另一个点,需要将消息频移或调制到频谱中的更高范围,以适应信号的频率响应。信号在其中传播的通道或介质。
因此,您只需将A(t) 指定为您想要的任何信号,只要您的t 值的使用方式与您的正弦曲线相同。例如,假设您希望幅度或频率线性增加。在这种情况下,A(t) = t。请记住,您需要指定正弦曲线f_c 的频率、数据的采样周期或采样频率以及定义信号的时间范围。我们将数据的采样频率称为f。另请记住,如果您希望正确显示曲线,这需要足够高。如果您将其设置得太低,则会发生的情况是您将跳过信号的基本波峰和波谷,并且图表看起来会很差。
因此,对于 AM,您的代码可能如下所示:
f = 24; %// Hz
f_c = 8; %// Hz
T = 1 / f; %// Sampling period from f
t = 0 : T : 5; %// Determine time values from 0 to 5 in steps of the sampling period
A = t; %// Define message
%// Define carrier signal
carrier = sin(2*pi*f_c*t);
%// Define AM signal
out = A.*carrier;
%// Plot carrier signal and modulated signal
figure;
plot(t, carrier, 'r', t, out, 'b');
grid;
上面的代码会将载波和调制信号绘制在一起。
这是我得到的:
如您所见,幅度随着时间的增加而变高。您还可以看到,载波信号被消息信号A(t) = t限制。我已将原始载波信号放在图中作为辅助。您当然可以看到,由于消息信号,载波的幅度越来越大。
同样,如果你想做FM,大部分代码都是一样的。唯一不同的是消息信号将在载波信号本身内部。因此:
f = 100; %// Hz
f_c = 1; %// Hz
T = 1 / f; %// Sampling period from f
t = 0 : T : 5; %// Determine time values from 0 to 5 in steps of the sampling period
A = t; %// Define message
%// Define FM signal
out = sin(2*pi*(f_c + A).*t);
%// Plot modulated signal
figure;
plot(t, out, 'b');
grid;
请记住,我更改了 f_c 和 f 以便您正确查看更改。我也没有绘制载波信号,所以你不会分心,你可以更清楚地看到结果。
这是我得到的:
您可以看到频率开始相当低,然后由于消息信号A(t) = t 而开始逐渐增加。随着时间的增加,频率也会增加。
您可以使用不同的频率来获得不同的结果,但这应该足以让您入门。
祝你好运!