Matlab中chirp函数生成信号时长超出设定值问题咨询
问题原因及解决方案
1. chirp函数参数顺序调用错误
Matlab中chirp函数的标准调用语法为:y = chirp(t, f0, t1, f1)
各参数含义:
t:时间向量f0:t=0时刻的初始频率,单位Hzt1:参考时间点,单位秒f1:t=t1时刻的目标频率,单位Hz
你当前的代码写为y = chirp(c,0,150,duration),相当于把150Hz的目标频率放到了t1的位置,把1.5s的参考时间放到了f1的位置,会生成不符合预期的扫频信号,但这不是时长错误的核心原因。
修正后的参数调用应为:y = chirp(c, 0, duration, 150)
即1.5秒时扫频到150Hz,符合你的需求。
2. 采样率不匹配是时长错误的核心原因
你生成信号的采样率为11025Hz,如果你播放音频时没有指定对应的采样率,Matlab默认会使用其他采样率进行播放。按你得到的1.65秒时长反推:1.5s * 11025Hz / 1.65s ≈ 10000Hz,刚好符合部分场景下的默认播放采样率误差范围。
播放时指定对应采样率即可正常播放1.5秒的音频:sound(y, 11025)
额外优化建议
生成时间向量时更推荐使用如下写法,避免浮点数步长带来的边界误差:c = linspace(0, duration, round(duration * 11025));
可以保证时间向量的点数完全符合采样率和时长的乘积,不会出现边界点的微小误差。
内容的提问来源于stack exchange,提问作者Thorben C.
相关产品推荐
相关产品推荐

