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,
CASE
WHEN 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,
CASE
WHEN 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 智能體對數據進行預測與異常檢測,提供實時的商業洞察。