在Matlab中生成具有时间相关频率的正弦信号

时间:2017-06-02 10:33:12

标签: matlab signals numeric

我想在Matlab中生成一个具有时间相关频率y(t)的正弦信号f(t)

我已经尝试使用Matlab的正弦函数来实现这一点:

h = 0.0001;
npoints = 150/h;
for i = 1:1:npoints
   f(i) = 2 - 0.01*i*h;
   y(i) = 0.5*sin(2*3.1415*f(i)*i*h)+0.5;
end

频率随时间下降,h是时间步长。

我的问题:

信号y(t)看起来并不像我预期的那样。在不同的时间出现振幅的波动(请看下面的图)。

enter image description here

有谁知道为什么会发生这种情况以及如何正确生成这个正弦信号?

3 个答案:

答案 0 :(得分:1)

怎么样

y(i) = 0.5*real(exp(1i*2*pi*f(i)*i*h))+0.5;

您将获得下面的情节 enter image description here

如果你只需要从2Hz到0.5Hz的chirp信号,以下应该可以完成这项工作

f_start = 2; % start frequency
f_end = 0.5; % end frequency
endtime = 150; % seconds
timestep = 0.0001;
times = timestep:timestep:endtime;
y = chirp(times,f_start,endtime,f_end);

如果你绘制它就得到了

figure(2);plot(times,y);

enter image description here

您可以使用下面的

手动完成相同操作
f_start = 2; % start frequency
f_end = 0.5; % end frequency
timestep = 0.0001;
T = 150;
rate_of_change = (f_start - f_end)/T;
times = timestep:timestep:T;
y = sin(2*pi*(f_start*times - times.^2*rate_of_change/2));

阅读Chirp信号的following维基百科页面可能会有用。

答案 1 :(得分:1)

在100,你有sin(2*pi*N),即0。稍微改变一下,对2.0123-...说,它就到了顶部。

对于一般可能出乎意料的形状,请考虑最后使用的是什么函数(=在公式中替换f)。您会看到y = ...sin(Ai-B*i^2)...形式的内容,其最小值为100。

这里最简单的解决方案是简单地将频率偏移一点,并使用f(i) = 3.1 - ...之类的东西,其最小值超出您考虑的范围。

答案 2 :(得分:0)

看起来实际上没有“频率上升”,但在x轴上的100值处,整个信号偏移180度。请记住,振幅仍然达到0并且不会变小(例如从0.25到0.75)

这是因为 i 值变得如此之高,以至于f(i)的值会改变符号

另一个指标是频率在转变后开始再次增加,而不是逐渐变得更低。

为什么从f(i)中的值2开始?

很抱歉在这里要求澄清,但我不能将其作为评论发布。