如何在Octave中实现30Hz-8000Hz对数扫频的数值映射?
在Octave中实现任意范围对数扫频的时间-频率映射与绘图
核心思路
对数扫频的频率随时间呈指数增长,而非线性变化,你需要用指数公式把0-10s的采样时间映射到30Hz到8000Hz的对数频率范围,公式为:
f(t) = f_start * (f_end / f_start)^(t / t_total)
其中:
f_start= 30Hz(起始频率)f_end= 8000Hz(终止频率)t_total= 10s(总扫频时间)t= 单个采样点的时间(0到10s区间内)
具体实现步骤
假设你的采样时间数组为t,振幅数据为amplitude,按以下步骤操作:
生成对应频率数组
套用公式计算每个时间点对应的频率,使用点运算符.^确保数组元素级别的指数运算:f_start = 30; f_end = 8000; t_total = 10; % 若未生成时间数组,可按振幅数据长度生成等间隔时间:t = linspace(0, 10, length(amplitude)); f = f_start * (f_end / f_start) .^ (t / t_total);绘制对数频率轴的振幅图
直接用semilogx函数绘制对数x轴的图像,操作更简便:semilogx(f, amplitude, '-b'); % 蓝色实线绘制曲线 xlabel('频率 (Hz)'); ylabel('振幅'); title('电路对数扫频响应'); grid on; % 开启网格,便于读取对数刻度如果已经用
plot绘制了线性图,也可以手动修改x轴为对数刻度:plot(f, amplitude); set(gca, 'XScale', 'log'); % 将当前坐标轴的x轴设置为对数刻度
映射正确性验证
可以通过几个关键点确认结果:
- 当
t=0时,f=30Hz,匹配起始频率 - 当
t=10时,f=8000Hz,匹配终止频率 - 当
t=5s时,f=30*(8000/30)^0.5 ≈ 489.9Hz,这是对数刻度的中间点,符合对数扫频的特性
内容的提问来源于stack exchange,提问作者TedAnderson
相关产品推荐
相关产品推荐

