You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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('幅度');

关键改动说明

  1. 直接定义t_time为0到2秒的时间轴,彻底避免相位和时间的混淆。
  2. 明确使用角频率公式ω=2πf计算相位,确保周期数符合预期:
    若要2秒内生成N个周期,频率f=N/len_of_sig,对应的角频率ω=2π*(N/len_of_sig)。比如你要100个周期,就是ω=2π*(100/2)=100π。
  3. 保留了你原有的幅度限幅逻辑,避免余割函数奇点导致的无限大值影响绘图效果。

内容的提问来源于stack exchange,提问作者Rick T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:12:26