我想在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)
看起来并不像我预期的那样。在不同的时间出现振幅的波动(请看下面的图)。
有谁知道为什么会发生这种情况以及如何正确生成这个正弦信号?
答案 0 :(得分:1)
怎么样
y(i) = 0.5*real(exp(1i*2*pi*f(i)*i*h))+0.5;
如果你只需要从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);
您可以使用下面的
手动完成相同操作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开始?
很抱歉在这里要求澄清,但我不能将其作为评论发布。