下面是一个简单的Matlab代码,它生成一个正弦信号,用户指定没有周期。如何更改此设置,使每个周期具有不同的瞬时频率?例如,如果我有10个周期,那么总共应该有10个随机频率,每个周期的频率不同。
f1 = 120;
fs = f1/60; % sampling frequency depends on f1
no_of_cycles = 10;
f = no_of_cycles/60; % Frequency of sinusoid
duration = 1; % duration of the sinusoidal signal in minutes
A = 1;
t = 1/fs:1/fs:duration*no_of_cycles*1/f; % time index
y1 = A*sin(2*pi*f*t); % simulated sinusoidal signal
答案 0 :(得分:1)
假设我们有一个频率向量,例如
frequencies = [1,2,3,4,5];
然后我们希望将length(frequencies)
绘图放在彼此的顶部,每个绘图的频率不同。为了使图形相互叠加,您可以在hold on
命令之后使用命令plot
。
此外,我们必须跟踪时间,因为我想您希望下一个正弦曲线继续,前一个曲线停止。为此,我使用变量curTime
和endTime
来表示信号开始和结束的时间。现在我们有类似的东西:
frequencies = [1,2,3,4,5];
curTime = 0;
for i = 1:length(frequencies)
endTime = curTime + 2*pi/frequencies(i);
t = curTime:0.1:endTime;
plot(t,sin(frequencies(i)*t))
curTime = endTime;
hold on
end
然而,当我们偶然发生频率时,结束的正弦曲线的y值与开始的正弦曲线的y值不同。正如我想的那样,你希望它是连续的,我们需要加入它们,通过改变“下一条”正弦曲线,据说通过改变$ s $ $ f($ em> t + s)$。由于你对整个周期感兴趣,我们可以选择$ s $,这样$ f t + s = 0 $。然后我们结束:
frequencies = [1,2,3,4,5];
curTime = 0;
h = 0.01;
for i = 1:length(frequencies)
endTime = curTime + 2*pi/frequencies(i);
t = curTime:h:endTime;
shift = frequencies(i)*t(1);
plot(t,sin(frequencies(i)*t-shift))
curTime = endTime;
hold on
end