Math 在正弦波中找到每个周期的起点(时间)

Math 在正弦波中找到每个周期的起点(时间),math,waveform,sine-wave,Math,Waveform,Sine Wave,我打算在5秒内实现正弦波从8Hz逐渐变为2Hz: 此波形是在冷编辑中生成的。我给它的起始频率是8Hz,结束频率是2Hz,持续时间是5秒。在给定的时间内,正弦波从一个频率逐渐变化到另一个频率 我的问题是,如何使用FOR循环准确地找到每个循环的开始时间(用红点突出显示) 伪代码: time = 5 //Duration freq1 = 8 //Start frequency freq2 = 2 //End frequency cycles = ( (freq1 + freq2) / 2

我打算在
5
秒内实现正弦波从
8Hz
逐渐变为
2Hz

此波形是在冷编辑中生成的。我给它的起始频率是
8Hz
,结束频率是
2Hz
,持续时间是
5
秒。在给定的时间内,正弦波从一个频率逐渐变化到另一个频率

我的问题是,如何使用FOR循环准确地找到每个循环的开始时间(用红点突出显示)

伪代码:

time   = 5 //Duration
freq1  = 8 //Start frequency
freq2  = 2 //End frequency

cycles = ( (freq1 + freq2) / 2 ) * time //Total number of cycles

for(i = 0; i < cycles; i++) {
    /* Formula to find start time of each cycle */
}
time=5//持续时间
频率1=8//启动频率
频率2=2//结束频率
周期=((频率1+频率2)/2)*时间//周期总数
对于(i=0;i
这是对这个问题的逆向思考,它会导致程序中的疯狂。更不用说单个波将不会是正弦波,因为频率正在改变(它们将略微失真),这是您用发电机无法实现的,而且结束信号在5秒后零点停止的可能性非常小。改为使用可变频率的连续正弦波:

  • 首先计算实际频率

    线性插值就足够了(除非您需要不同的更改)

    其中:

    f0=8 [Hz] start frequency
    f1=2 [Hz] stop frequency
    T =5 [s]  change time
    t =<0,T> is actual time in [s]
    
    此处示例输出(
    n=图像宽度
    ):

    如果还需要周期数,则在
    角度
    切割
    的同时在
    循环中添加计数器增量,同时也存在零点(但如果采样器太小或需要高精度,则需要插值实际零位置)


  • @DavidTansey符号变化将检测到所有过零,其中只有一半是
    相位=0
    ,但我认为问题在于生成这样的信号,而不是找到过零。这只是一个新手尝试通过产生单独的正弦波来达到这个目的,这是错误的。令人惊讶的详细答案和绝对正确(没有双关语的意图)。明亮的
    f0=8 [Hz] start frequency
    f1=2 [Hz] stop frequency
    T =5 [s]  change time
    t =<0,T> is actual time in [s]
    
    dt=T/double(n-1);