TDengine 数据函数 SIN 用户手册

SIN 函数
语法
SIN(expr)
功能说明
获得指定字段的正弦值。
版本
v3.0.0.0
返回结果类型
DOUBLE
适用数据类型
数值类型。
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
- 如果
expr为 NULL,返回 NULL。 - 输入参数按弧度制计算。
- 只能与普通列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
- 若要将角度转换为弧度,可使用 RADIANS 函数,例如:
SIN(RADIANS(30))。
示例所用表与数据(可直接复制执行)
-- 建库与使用
CREATE DATABASE IF NOT EXISTS power;
USE power;-- 智能电表表结构(带相位信息)
CREATE STABLE meters (ts TIMESTAMP,current FLOAT,voltage INT,phase FLOAT,power DOUBLE
) TAGS (groupid INT,location VARCHAR(64)
);-- 子表
CREATE TABLE d1001 USING meters TAGS (1, 'California.SanFrancisco');
CREATE TABLE d1002 USING meters TAGS (2, 'California.LosAngeles');-- 写入数据(phase 列存储相位角度,单位:度)
INSERT INTO d1001 VALUES('2024-01-01 10:00:00.000', 10.3, 220, 0.0, 2266.0),('2024-01-01 10:01:00.000', 12.6, 221, 30.0, 2784.6),('2024-01-01 10:02:00.000', 8.5, 223, 60.0, 1895.5),('2024-01-01 10:03:00.000', 11.2, 222, 90.0, 2486.4);INSERT INTO d1002 VALUES('2024-01-01 10:00:00.000', 9.0, 219, 45.0, 1971.0),('2024-01-01 10:01:00.000', 14.0, 222, 120.0, 3108.0),('2024-01-01 10:02:00.000', 7.2, 220, 180.0, 1584.0),('2024-01-01 10:03:00.000', 10.5, 221, -30.0, 2320.5);
基础示例
示例 1: 常量正弦计算
-- sin(0) = 0
taos> SELECT SIN(0);sin(0) |
============================0.000000000000000 |-- sin(π/6) = 0.5
taos> SELECT SIN(PI()/6);sin(pi()/6) |
============================0.500000000000000 |-- sin(π/4) ≈ 0.707
taos> SELECT SIN(PI()/4);sin(pi()/4) |
============================0.707106781186548 |-- sin(π/2) = 1
taos> SELECT SIN(PI()/2);sin(pi()/2) |
============================1.000000000000000 |-- sin(π) ≈ 0
taos> SELECT SIN(PI());sin(pi()) |
============================0.000000000000000 |
示例 2: 角度转弧度计算
-- sin(30°) = 0.5
taos> SELECT SIN(RADIANS(30));sin(radians(30)) |
============================0.500000000000000 |-- sin(45°) ≈ 0.707
taos> SELECT SIN(RADIANS(45));sin(radians(45)) |
============================0.707106781186548 |-- sin(60°) ≈ 0.866
taos> SELECT SIN(RADIANS(60));sin(radians(60)) |
============================0.866025403784439 |-- sin(90°) = 1
taos> SELECT SIN(RADIANS(90));sin(radians(90)) |
============================1.000000000000000 |
示例 3: NULL 值处理
taos> SELECT SIN(NULL);sin(null) |
========================NULL |
示例 4: 负角度计算
-- sin(-30°) = -0.5
taos> SELECT SIN(RADIANS(-30));sin(radians(-30)) |
============================-0.500000000000000 |-- sin(-90°) = -1
taos> SELECT SIN(RADIANS(-90));sin(radians(-90)) |
============================-1.000000000000000 |
智能电表场景示例
示例 5: 交流电瞬时值计算
目的:根据相位角计算交流电压或电流的瞬时值,用于波形分析。
-- 计算电压瞬时值 v(t) = Vm * sin(ωt + φ)
-- 假设电压幅值为 311V (220V * √2)
SELECT ts,voltage,phase,311 * SIN(RADIANS(phase)) AS instantaneous_voltage
FROM d1001
ORDER BY ts;
应用价值:
- 分析交流电波形特征
- 检测电压畸变和谐波
- 评估电能质量
示例 6: 功率因数分解
目的:利用相位角的正弦值计算无功功率分量。
-- 计算有功功率和无功功率
-- P = S * cos(φ), Q = S * sin(φ)
SELECT ts,current,voltage,phase,current * voltage AS apparent_power,current * voltage * COS(RADIANS(phase)) AS active_power,current * voltage * SIN(RADIANS(phase)) AS reactive_power
FROM d1001
ORDER BY ts;
应用价值:
- 精确计算无功功率
- 优化无功补偿策略
- 降低线路损耗
示例 7: 三相电压不平衡度分析
目的:分析三相电压的正弦分量,评估三相不平衡程度。
-- 计算三相电压的虚部(正弦分量)
SELECT location,AVG(voltage * SIN(RADIANS(phase))) AS avg_voltage_imaginary,STDDEV(voltage * SIN(RADIANS(phase))) AS voltage_imag_deviation
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:04:00'
GROUP BY location;
应用价值:
- 检测三相不平衡
- 预防中性线过流
- 保护电气设备
示例 8: 谐波分量提取(修正版)
目的:通过正弦函数提取基波和谐波分量,用于谐波分析。
-- 提取基波的正弦分量
-- 使用相位角直接计算正弦分量
SELECT ts,current,current * SIN(RADIANS(phase)) AS current_sin_component,voltage * SIN(RADIANS(phase)) AS voltage_sin_component
FROM d1001
WHERE ts >= '2024-01-01 10:00:00'
ORDER BY ts
LIMIT 100;
应用价值:
- 识别谐波污染源
- 评估电能质量
- 设计滤波器
示例 9: 相量图绘制数据准备
目的:计算电压和电流的正弦分量,为绘制相量图提供数据。
-- 计算电压和电流的正弦分量(虚部)
SELECT ts,voltage * COS(RADIANS(phase)) AS voltage_real,voltage * SIN(RADIANS(phase)) AS voltage_imag,current * COS(RADIANS(phase)) AS current_real,current * SIN(RADIANS(phase)) AS current_imag
FROM d1001
ORDER BY ts;
应用价值:
- 可视化电压电流关系
- 分析功率传输特性
- 故障诊断
示例 10: 周期性负载建模
目的:利用正弦函数模拟周期性负载变化,用于负载预测。
-- 模拟一天24小时的周期性负载曲线
-- 使用时间戳的小时部分计算相位
SELECT ts,power AS actual_power,2000 + 1000 * SIN(RADIANS((CAST(ts AS BIGINT) % 86400000 / 3600000 - 6) * 15)) AS predicted_power
FROM d1001
ORDER BY ts;
应用价值:
- 负载预测和规划
- 优化发电调度
- 需求侧管理
示例 11: 电压暂降分析
目的:分析电压暂降事件中的相位变化,评估暂降严重程度。
-- 计算电压的正弦分量变化率
SELECT ts,voltage,phase,voltage * SIN(RADIANS(phase)) AS voltage_sine_component,ABS(voltage * SIN(RADIANS(phase))) / CASE WHEN ABS(voltage) > 0 THEN ABS(voltage) ELSE 1 END AS sine_ratio
FROM meters
WHERE voltage < 200 -- 电压偏低
ORDER BY ts;
应用价值:
- 量化电压暂降影响
- 评估敏感设备风险
- 优化电压调节策略
生产场景应用与目的
场景 A: 三相电功率分析
目的:在三相电力系统中,通过正弦和余弦函数分解有功功率和无功功率,优化电能传输效率。
示例:
-- 计算三相系统的总有功功率和总无功功率
SELECT location,SUM(current * voltage * COS(RADIANS(phase))) AS total_active_power,SUM(current * voltage * SIN(RADIANS(phase))) AS total_reactive_power,SUM(current * voltage * SIN(RADIANS(phase))) / SUM(current * voltage * COS(RADIANS(phase))) AS power_factor_tan
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:04:00'
GROUP BY location;
场景 B: 谐波污染评估
目的:利用正弦函数分析电流和电压的波形特征,识别谐波污染源并评估其对电网的影响。
示例:
-- 计算电流的正弦和余弦分量用于谐波分析
SELECT ts,current,current * SIN(RADIANS(phase)) AS current_imag,current * COS(RADIANS(phase)) AS current_real,SQRT(POW(current * SIN(RADIANS(phase)), 2) + POW(current * COS(RADIANS(phase)), 2)) AS current_magnitude
FROM d1001
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:01:00'
ORDER BY ts;
场景 C: 同步相量测量(PMU)
目的:在智能电网的同步相量测量单元(PMU)中,使用正弦和余弦函数将相量分解为实部和虚部。
示例:
-- 计算电压相量的实部和虚部
SELECT ts,voltage * COS(RADIANS(phase)) AS phasor_real,voltage * SIN(RADIANS(phase)) AS phasor_imag,SQRT(POW(voltage * COS(RADIANS(phase)), 2) + POW(voltage * SIN(RADIANS(phase)), 2)) AS phasor_magnitude,ATAN(voltage * SIN(RADIANS(phase)) / voltage * COS(RADIANS(phase))) AS phasor_angle
FROM meters
WHERE ts >= NOW - 5m
ORDER BY ts;
场景 D: 无功补偿优化
目的:通过计算无功功率分量(Q = V * I * sin(φ)),指导电容器组的投切,优化功率因数。
示例:
-- 计算需要补偿的无功功率
SELECT _wstart AS time_window,AVG(current * voltage * SIN(RADIANS(phase))) AS avg_reactive_power,CASEWHEN AVG(current * voltage * SIN(RADIANS(phase))) > 500 THEN '需要补偿'ELSE '无需补偿'END AS compensation_status
FROM meters
WHERE ts >= '2024-01-01 00:00:00'AND ts < '2024-01-02 00:00:00'
INTERVAL(15m);
场景 E: 电能质量监测
目的:通过监测相位角的正弦值变化,及时发现电压闪变、谐波畸变等电能质量问题。
示例:
-- 监测相位角正弦值的标准差,识别电能质量异常
SELECT location,STDDEV(SIN(RADIANS(phase))) AS phase_sin_stddev,CASEWHEN STDDEV(SIN(RADIANS(phase))) > 0.1 THEN '电能质量异常'ELSE '电能质量正常'END AS quality_status
FROM meters
WHERE ts >= NOW - 1h
GROUP BY location;
注意事项
-
输入单位:SIN 函数的输入参数必须是弧度制,如果输入是角度,需使用 RADIANS 函数转换。
-
精度问题:浮点运算存在精度限制,对于需要高精度的应用(如PMU),需要注意精度累积误差。
-
周期性:正弦函数是周期函数,周期为 2π,即
SIN(x) = SIN(x + 2πn),其中 n 为整数。 -
取值范围:SIN 函数的返回值范围为 [-1, 1]。
-
NULL 传播:输入为 NULL 时返回 NULL。
-
性能考虑:SIN 是逐行计算的标量函数,在大数据集上建议配合时间过滤和列裁剪。
数学关系
- 基本定义:对于直角三角形,
sin(θ) = 对边 / 斜边 - 周期性:
SIN(x + 2π) = SIN(x) - 奇函数性质:
SIN(-x) = -SIN(x) - 与余弦关系:
SIN²(x) + COS²(x) = 1 - 和差公式:
SIN(x + y) = SIN(x)COS(y) + COS(x)SIN(y)
关于 TDengine
TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。
它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。
