csc(余割)周期信号绘图问题:高频信号未按预期重复
问题根源:时间轴与角频率的概念混淆
你的问题出在时间变量的定义和角频率的计算逻辑混乱,导致余割信号的周期数完全不符合预期。咱们一步步拆解:
错误点分析
时间变量的错位
你原本用linspace(0, 2*pi*len_of_sig, fs*len_of_sig)生成的t是相位(弧度值),而非实际的时间(秒)。虽然之后转成t2 = t/(2*pi)得到了时间轴,但计算余割信号时,你用的是相位t而非时间t2,这直接让角频率的计算偏离了预期逻辑。频率与角频率的混淆
你期望2秒内得到100个余割周期,这意味着信号的频率f=50Hz(100个周期÷2秒=50Hz),对应的角频率应该是ω=2πf=100π rad/s。如果是想生成100Hz的信号(2秒内200个周期),角频率则是200π rad/s。但你代码里用的100*t,这里的t是相位,完全不是基于时间轴的角频率计算逻辑。
修正后的代码
clear, clc fs = 8000; len_of_sig = 2; % 信号时长(秒) % 定义正确的时间轴(秒) t_time = linspace(0, len_of_sig, fs*len_of_sig); % 生成1Hz的余割信号(角频率ω=2π*1) omega_a = 2*pi*1; y_a = 0.01*csc(omega_a * t_time); y_a(y_a >= 1) = 1; y_a(y_a <= -1) = -1; % 生成50Hz的余割信号(2秒内100个周期,角频率ω=2π*50=100π) omega_b = 2*pi*50; % 如果要100Hz(2秒200个周期),改成2*pi*100即可 y_b = 0.01*csc(omega_b * t_time); y_b(y_b >= 1) = 1; y_b(y_b <= -1) = -1; % 绘图 subplot(2,1,1); plot(t_time, y_a); title('1Hz 余割信号(2秒)'); ylabel('幅度'); subplot(2,1,2); plot(t_time, y_b); title('50Hz 余割信号(2秒内100个周期)'); xlabel('时间(秒)'); ylabel('幅度');
关键改动说明
- 直接定义
t_time为0到2秒的时间轴,彻底避免相位和时间的混淆。 - 明确使用角频率公式ω=2πf计算相位,确保周期数符合预期:
若要2秒内生成N个周期,频率f=N/len_of_sig,对应的角频率ω=2π*(N/len_of_sig)。比如你要100个周期,就是ω=2π*(100/2)=100π。 - 保留了你原有的幅度限幅逻辑,避免余割函数奇点导致的无限大值影响绘图效果。
内容的提问来源于stack exchange,提问作者Rick T
相关产品推荐
相关产品推荐

