我正在尝试绘制一个正弦波,其中振幅随时间增加,并且频率随着时间的推移而增加。我画了一个正常的正弦波,如下图所示,但我无法改变幅度和频率。任何想法?
t = [ 0 : 1 : 40 ]; % Time Samples
f = 500; % Input Signal Frequency
fs = 8000; % Sampling Frequency
x = sin(2*pi*f/fs*t); % Generate Sine Wave
figure(1);
stem(t,x,'r'); % View the samples
figure(2);
stem(t*1/fs*1000,x,'r'); % View the samples
hold on;
plot(t*1/fs*1000,x); %
答案 0 :(得分:9)
我相信你所说的是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
而开始逐渐增加。随着时间的增加,频率也随之增加。
您可以使用不同的频率来获得不同的结果,但这应该足以让您入门。
祝你好运!