波形比对算法迁移成功
This commit is contained in:
@@ -25,10 +25,10 @@ public class AnalysisServiceStreamTest {
|
|||||||
private ICompareWaveService compareWaveServiceImpl;
|
private ICompareWaveService compareWaveServiceImpl;
|
||||||
|
|
||||||
// 测试文件路径 - 请根据实际情况修改
|
// 测试文件路径 - 请根据实际情况修改
|
||||||
private static final String SOURCE_CFG_PATH = "F:\\hatch\\wavecompare\\wave\\PQMonitor_PQM1_000001_20200430_113404_845.cfg";
|
private static final String SOURCE_CFG_PATH = "C:\\Users\\hongawen\\Desktop\\Event\\192.168.1.239\\PQ_PQLD1_000251_20250904_145126_769.cfg";
|
||||||
private static final String SOURCE_DAT_PATH = "F:\\hatch\\wavecompare\\wave\\PQMonitor_PQM1_000001_20200430_113404_845.dat";
|
private static final String SOURCE_DAT_PATH = "C:\\Users\\hongawen\\Desktop\\Event\\192.168.1.239\\PQ_PQLD1_000251_20250904_145126_769.dat";
|
||||||
private static final String TARGET_CFG_PATH = "F:\\hatch\\wavecompare\\wave\\PQMonitor_PQM1_000001_20200430_113407_075.cfg";
|
private static final String TARGET_CFG_PATH = "C:\\Users\\hongawen\\Desktop\\Event\\192.168.1.238\\PQ_PQLD2_000099_20250904_145126_750.cfg";
|
||||||
private static final String TARGET_DAT_PATH = "F:\\hatch\\wavecompare\\wave\\PQMonitor_PQM1_000001_20200430_113407_075.dat";
|
private static final String TARGET_DAT_PATH = "C:\\Users\\hongawen\\Desktop\\Event\\192.168.1.238\\PQ_PQLD2_000099_20250904_145126_750.dat";
|
||||||
|
|
||||||
// 输出路径
|
// 输出路径
|
||||||
private static final String OUTPUT_PATH = "./test-output/";
|
private static final String OUTPUT_PATH = "./test-output/";
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ public class WaveformAligner {
|
|||||||
* 计算可进行计算的200ms窗口数量
|
* 计算可进行计算的200ms窗口数量
|
||||||
* 每个窗口需要10个周波的数据用于电能质量分析
|
* 每个窗口需要10个周波的数据用于电能质量分析
|
||||||
*/
|
*/
|
||||||
int windowSamples = (int) (data1.getSmpRate() * 10);
|
int windowSamples = (int) (data1.getFactSmpRate() * 10);
|
||||||
int availableWindows1 = (data1.getSmpNum() - startCalPos1) / windowSamples;
|
int availableWindows1 = (data1.getSmpNum() - startCalPos1) / windowSamples;
|
||||||
int availableWindows2 = (data2.getSmpNum() - startCalPos2) / windowSamples;
|
int availableWindows2 = (data2.getSmpNum() - startCalPos2) / windowSamples;
|
||||||
int maxWindows = Math.min(availableWindows1, availableWindows2);
|
int maxWindows = Math.min(availableWindows1, availableWindows2);
|
||||||
@@ -344,7 +344,7 @@ public class WaveformAligner {
|
|||||||
* 寻找从负值到正值的过零点
|
* 寻找从负值到正值的过零点
|
||||||
* 注意:使用严格不等号(< 和 >),避免0值影响判断
|
* 注意:使用严格不等号(< 和 >),避免0值影响判断
|
||||||
*/
|
*/
|
||||||
if (voltageData[i] < 0 && voltageData[i + 1] > 0) {
|
if (voltageData[i] <= 0 && voltageData[i + 1] >= 0) {
|
||||||
// 返回过零点后的第一个正值位置
|
// 返回过零点后的第一个正值位置
|
||||||
return i + 1;
|
return i + 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public class ComtradeReader {
|
|||||||
lineFreq = 50.0f;
|
lineFreq = 50.0f;
|
||||||
}
|
}
|
||||||
float samplesPerCycle = (float)cfgInfo.getSampleRate() / lineFreq;
|
float samplesPerCycle = (float)cfgInfo.getSampleRate() / lineFreq;
|
||||||
|
dataBuf.setFactSmpRate(samplesPerCycle);
|
||||||
// 验证采样率限制要求
|
// 验证采样率限制要求
|
||||||
if (samplesPerCycle < 128) {
|
if (samplesPerCycle < 128) {
|
||||||
log.error("采样率过低:每周波采样点数={},最小要求128", samplesPerCycle);
|
log.error("采样率过低:每周波采样点数={},最小要求128", samplesPerCycle);
|
||||||
|
|||||||
@@ -43,7 +43,10 @@ public class DataPq {
|
|||||||
/** 实际采样点数 */
|
/** 实际采样点数 */
|
||||||
private int smpNum;
|
private int smpNum;
|
||||||
|
|
||||||
/** 采样率 (Hz) */
|
/** 实际采样率 */
|
||||||
|
private float factSmpRate;
|
||||||
|
|
||||||
|
/** 改良后的采样率 */
|
||||||
private float smpRate;
|
private float smpRate;
|
||||||
|
|
||||||
/** 系统频率 (Hz) */
|
/** 系统频率 (Hz) */
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class CompareWaveServiceImpl implements ICompareWaveService {
|
|||||||
* @param sourceDatStream 源DAT文件流
|
* @param sourceDatStream 源DAT文件流
|
||||||
* @param targetCfgStream 目标CFG文件流
|
* @param targetCfgStream 目标CFG文件流
|
||||||
* @param targetDatStream 目标DAT文件流
|
* @param targetDatStream 目标DAT文件流
|
||||||
* @param lineConfig 接线方式 0=星型接线, 1=V型接线
|
* @param lineConfig 接线方式 0=星型接线, 1=V型接线
|
||||||
* @return 解析后的数据结果
|
* @return 解析后的数据结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@@ -119,7 +119,7 @@ public class CompareWaveServiceImpl implements ICompareWaveService {
|
|||||||
/**
|
/**
|
||||||
* 应用配置参数(带接线方式和额定值)
|
* 应用配置参数(带接线方式和额定值)
|
||||||
*
|
*
|
||||||
* @param dataBuf 数据缓冲区
|
* @param dataBuf 数据缓冲区
|
||||||
* @param lineConfig 接线方式(0: 星型接线, 1: V型接线)
|
* @param lineConfig 接线方式(0: 星型接线, 1: V型接线)
|
||||||
*/
|
*/
|
||||||
private void applyConfiguration(DataPq dataBuf, int lineConfig) {
|
private void applyConfiguration(DataPq dataBuf, int lineConfig) {
|
||||||
@@ -191,7 +191,7 @@ public class CompareWaveServiceImpl implements ICompareWaveService {
|
|||||||
// 如果没有设置对齐参数,使用默认值(兼容性)
|
// 如果没有设置对齐参数,使用默认值(兼容性)
|
||||||
if (startCalTime == null) {
|
if (startCalTime == null) {
|
||||||
startCalPos = 0;
|
startCalPos = 0;
|
||||||
calNum = Math.min(dataBuf.getSmpNum() / (int)(dataBuf.getSmpRate() * 10), 100);
|
calNum = Math.min(dataBuf.getSmpNum() / (int) (dataBuf.getSmpRate() * 10), 100);
|
||||||
startCalTime = new ClockStruct();
|
startCalTime = new ClockStruct();
|
||||||
startCalTime.setYear(2024);
|
startCalTime.setYear(2024);
|
||||||
startCalTime.setMonth(1);
|
startCalTime.setMonth(1);
|
||||||
@@ -203,7 +203,7 @@ public class CompareWaveServiceImpl implements ICompareWaveService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 计算周期:每200ms(10个周波)计算一次
|
// 计算周期:每200ms(10个周波)计算一次
|
||||||
int samplesPerWindow = (int)(dataBuf.getSmpRate() * 10); // 10个周波的采样点数
|
int samplesPerWindow = (int) (dataBuf.getSmpRate() * 10); // 10个周波的采样点数
|
||||||
|
|
||||||
log.info("使用对齐参数 - 起始位置: {}, 窗口数: {}, 每周波采样点数: {}",
|
log.info("使用对齐参数 - 起始位置: {}, 窗口数: {}, 每周波采样点数: {}",
|
||||||
startCalPos, calNum, dataBuf.getSmpRate());
|
startCalPos, calNum, dataBuf.getSmpRate());
|
||||||
@@ -265,12 +265,10 @@ public class CompareWaveServiceImpl implements ICompareWaveService {
|
|||||||
results.add(result);
|
results.add(result);
|
||||||
|
|
||||||
// 日志输出部分结果用于调试
|
// 日志输出部分结果用于调试
|
||||||
if (window == 0) {
|
log.info("第" + window + "个窗口计算结果 - UA有效值: {}, UB有效值: {}, UC有效值: {}, 时间为:" + result.getClocktime().format(),
|
||||||
log.info("第一个窗口计算结果 - UA有效值: {}, UB有效值: {}, UC有效值: {}",
|
result.getRms()[0], result.getRms()[1], result.getRms()[2]);
|
||||||
result.getRms()[0], result.getRms()[1], result.getRms()[2]);
|
log.info("第" + window + "个窗口计算结果 - IA有效值: {}, IB有效值: {}, IC有效值: {}, 时间为:" + result.getClocktime().format(),
|
||||||
log.info("第一个窗口计算结果 - IA有效值: {}, IB有效值: {}, IC有效值: {}",
|
result.getRms()[3], result.getRms()[4], result.getRms()[5]);
|
||||||
result.getRms()[3], result.getRms()[4], result.getRms()[5]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
|
|||||||
Reference in New Issue
Block a user