TDengine文檔 - 《TDengine v2.0 數據庫文檔》_#時序數據庫

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;

注意事項

  1. 輸入單位:SIN 函數的輸入參數必須是弧度制,如果輸入是角度,需使用 RADIANS 函數轉換。
  2. 精度問題:浮點運算存在精度限制,對於需要高精度的應用(如PMU),需要注意精度累積誤差。
  3. 週期性:正弦函數是周期函數,週期為 2π,即 SIN(x) = SIN(x + 2πn),其中 n 為整數。
  4. 取值範圍:SIN 函數的返回值範圍為 [-1, 1]。
  5. NULL 傳播:輸入為 NULL 時返回 NULL。
  6. 性能考慮: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 智能體對數據進行預測與異常檢測,提供實時的商業洞察。