Nhiệm vụ của mô-đun Xử lý tín hiệu đầu vào bao gồm:
Kiểm tra kết nối với các cổng COM trên máy tính, đọc dữ liệu từ cổng COM có kết nối với bộ chuyển đổi ADC.
Các tín hiệu điện đƣợc truyền tải từ bộ chuyển đổi ADC sang cổm COM của máy tính. Mô-đun Xử lý tín hiệu đầu vào thực
hiện thao tác đọc dữ liệu liên tục từ cổng COM của máy tính chuyển tới bộ giải mã.
Bộ giải mã sẽ thực hiện giải mã tín hiệu đầu vào, chuyển đổi từ tín hiệu tƣơng tự (analog) sang tín hiệu số (digital). Kết quả sau khi giải mã là các giá trị cƣờng độ dòng điện tức thời và hiệu điện thế tức thời: u(t), i(t).
Biểu diễn tín hiệu dƣới dạng đồ thị biến đổi cƣờng độ dòng điện tức thời và hiệu điện thế tức thời.
4.6.4.2. Thuật toán giải mã tín hiệu tương tự
Để giải mã đƣợc tín hiệu tƣơng tự truyền vào, chúng ta cần biết đƣợc cách thức truyền dữ liệu từ mạch ADC sang cổm COM của máy tính.
Theo quy ƣớc thiết kế, dữ liệu đƣợc truyền từ mạch ADC sang cổng COM của máy tính theo từng khung (frame). Mỗi khung gồm 5 byte dữ liệu có cấu trúc đƣợc quy ƣớc nhƣ sau:
Byte đầu tiên: Dùng để đánh dấu bắt đầu khung truyền 0xca. 4 byte tiếp theo:
2 byte chứa giá trị hiệu điện thế tức thời
2 byte chứa giá trị cƣờng độ dòng điện tức thời.
Giá trị SIGNAL_CONST là hằng số giá trị ban đầu khi không có dòng và áp. Đối với mạch ADC sử dụng trong hệ thống này thì SIGNAL_CONST = 420.
Thuật toán giải mã tín hiệu:
INPUT
Bộ chuyển đổi ADC đã kết nối với cổng COM, sẵn sàng truyền dữ liệu
OUTPUT
Cƣờng độ dòng điện tức thời IData
Hiệu điện thế tức thời UData
Thuật toán
Đọc dữ liệu từ cổng COM, nếu gặp byte đánh dấu bdata[0] = 0xca thì đọc tiếp 4 byte tiếp theo ngay sau nó: bdata[1], bdata[2], bdata[3], bdata[4].
Giá trị hiệu điện thế tức thời đƣợc tính theo công thức sau:
UData = ((_bdata[1] - 64) * 64) + _bdata[2] - SIGNAL_CONST
Giá trị cƣờng độ dòng điện tức thời đƣợc tính theo công thức sau:
IData =- ((_bdata[3] - 64) * 64) + _bdata[4]) - SIGNAL_CONST)
Tiếp tục xử lý 5 byte tiếp theo cho đến khi đọc hết tín hiệu.
4.6.5. Mô-đun Nhận dạng thiết bị
4.6.5.1. Chức năng
Sau khi tín hiệu tƣơng tự đã đƣợc giải mã thành tín hiệu số, dữ liệu sẽ đƣợc đẩy vào mô-đun Nhận dạng thiết bị. Do yêu cầu việc nhận dạng thiết bị phải đảm bảo tốc độ nhanh, gần nhƣ tức thời cho nên vấn đề đặt ra là sau khi giải mã đƣợc bao nhiêu mẫu (u,i) thì hệ thống bắt đầu thao tác nhận dạng. Trong Hệ thống theo dõi điện năng thông minh này, ngƣỡng
khi dữ liệu từ cổng COM của máy tính đƣợc giải mã từng 200 mẫu thì hệ thống mới thực hiện nhận dạng. Lý do cho việc lựa chọn con số 200 là để đảm bảo phần tín hiệu đƣợc đƣa vào nhận dạng đã bao gồm đủ 6 chu kỳ điện áp.
Bài toán nhận dạng đặt ra 2 vấn đề mà chúng ta phải giải quyết. Thứ nhất là tốc độ đọc dữ liệu và tốc độ nhận dạng. Do các tín hiệu điện liên tục đƣợc đẩy vào hệ thống nên tốc độ là một yếu tố tối quan trọng, cần đƣợc đánh giá kĩ trong quá trình triển khai. Thứ hai là độ chính xác của việc nhận dạng. Việc xây dựng các thuật toán có độ phức tạp cao, căn cứ vào nhiều yếu tố, đặc điểm khác nhau của tín hiệu đầu vào sẽ giúp cho kết quả nhận dạng có độ chính xác cao hơn. Tuy nhiên song song với nó là tốc độ sẽ bị ảnh hƣởng đáng kể. Vì vậy, tùy vào các bài toán cụ thể mà ngƣời thiết kế hệ thống phải cân nhắc lợi ích giữa hai yếu tố này để đạt đƣợc kết quả tốt nhất.
Trong hệ thống này, tác giả sử dụng thuật toán nhận dạng căn cứ vào cơ sở so sánh giữa 3 chu kỳ điện áp liên tiếp nhau trên tín hiệu điện để phát hiện ra sự thay đổi. 3 chu kỳ điện áp tƣơng đƣơng với 87 mẫu cƣờng độ & hiệu điện thế tức thời (u,i). Do vậy việc lựa chọn ngƣỡng xử lý maxReading = 200 là để đảm bảo đã có đủ dữ liệu của 6 chu kỳ điện áp liên tiếp nhau làm đầu vào cho mô-đun Nhận dạng thiết bị.
Các chức năng chính của mô-đun Nhận dạng thiết bị: Tìm chu kỳ điện áp T.
Xác định thời điểm có thiết bị thay đổi trạng thái. Xác định thiết bị nào đã thay đổi trạng thái. Tính công suất tiêu thụ của thiết bị.
4.6.5.2. Thuật toán tìm chu kỳ điện áp T
Để tính chu kỳ điện áp T của tín hiệu đầu vào T bằng cách tìm 2 điểm cực tiểu kế tiếp trên đƣờng cong biến thiên của cƣờng độ dòng điện. Đây chính là 2 điểm bắt đầu và kết thúc của một chu kỳ. Đơn vị của chu kỳ điện áp T là số lƣợng mẫu, nếu muốn đổi ra thời gian thì nhân với chu kỳ lấy mẫu. Thay vì tìm 2 điểm cực tiểu kế tiếp ta có thể đổi thành tìm 2 cực đại hoặc 2 điểm xấp xỉ 0 kế tiếp. Với những mẫu thu thập đƣợc tiếp theo sẽ không cần tính lại chu kỳ điện áp nữa, chúng ta xem nhƣ chu kỳ T là không thay đổi.
Để xác định cực đại hoặc cực tiểu trên đồ thị cƣờng độ dòng điện tức thời, ta sử dụng phƣơng pháp nội suy tuyến tính.
INPUT
Mảng bao gồm các mẫu của tín hiệu data[]
OUTPUT
Điểm cực tiểu thứ nhất beginningIndex
Điểm cực tiểu thứ hai endingIndex
Khoảng cách giữa 2 điểm cực tiểu này tính theo đơn vị số lƣợng mẫu
Thuật toán
Khởi tạo: beginningIndex = -1, endingIndex = -1
Làm trơn dữ liệu bằng phƣơng pháp nội suy tuyến tính: Với mọi i trong đó 0 <=i < signalSize:
Nếu i > 2 và i < signalSize - 3 thì:
Ngƣợc lại:
tempArray[i] = data[i]
Với 3 <=i <signalSize -1:
Nếu gặp một vị trí i mà tại đó giá trị của nó bé hơn 3 vị trí liền kề trƣớc và bé hơn 3 vị trí liền kề sau thì đó chính là cực tiểu đầu tiên cần tìm: beginningIndex = i
Thực hiện tƣơng tự bƣớc trên để tìm điểm cực tiểu thứ hai:
endingIndex
4.6.5.3. Tính công suất tiêu thụ của thiết bị
Giả sử trong thời gian t, tín hiệu điện đo đƣợc k mẫu cƣờng độ dòng điện tức thời aI[0..k-1] và k mẫu hiệu điện thế tức thời aU[0..k-1]. Khi đó công suất tiêu thụ trung bình của các thiết bị trong thời gian t đƣợc tính nhƣ sau:
INPUT
Mảng các mẫu cƣờng độ dòng điện tức thời aI Mảng các mẫu hiệu điện thế tức thời aU
OUTPUT
Công suất tiêu thụ của thiết bị trong thời gian lấy mẫu:
CalculatePowerP đƣợc tính nhƣ sau: for (i = 0; i < k; i++)
result += aU[i] * aI[i]; CalculatePowerP = result / k;
4.6.5.4. Thuật toán nhận dạng thiết bị
Đối với một tín hiệu đầu vào để xác định đƣợc thiết bị nào trong tập thiết bị {D1, D2,…, Dn} đang đƣợc bật, chúng ta cần thực hiện hai bƣớc sau:
Xác định thời điểm t mà tại đó có thiết bị có thể đã thay đổi trạng thái (bật lên hoặc tắt đi).
Tại thời điểm t ở trên, ta phải tìm xem thiết bị nào đang đƣợc bật. Giả sử tín hiệu gốc đƣợc chia nhỏ thành các tín hiệu con liên tiếp nhau. Mỗi tín hiệu con có độ dài là n = 3 chu kỳ điện áp T. Chúng ta sẽ so sánh các tín hiệu con liên tiếp nhau để xem xét liệu trong thời gian n = 3 chu kỳ điện áp T có thiết bị nào thay đổi trạng thái hay không.
Bài toán
Cho 2 tín hiệu signalA, signalB với các thông số nhƣ sau:
Tín hiệu A đƣợc lấy mẫu trong n chu kỳ thứ N của tín hiệu gốc. Tín hiệu B đƣợc lấy mẫu trong n=3 chu kỳ tiếp theo ngay sau A.
aI[k] là danh sách mẫu cƣờng độ dòng điện tức thời của tín hiệu A.
bI[k] là danh sách mẫu cƣờng độ dòng điện tức thời của tín hiệu B.
powerA là công suất tiêu thụ trung bình của các thiết bị trong thời gian lấy mẫu tín hiệu A.
powerB là công suất tiêu thụ trung bình của các thiết bị trong thời gian lấy mẫu tín hiệu B.
Hãy xác định xem trong thời gian n = 3 chu kỳ của tín hiệu B, có những thiết bị nào đã thay đổi trạng thái. Tính công suất tiêu thụ của các thiết bị trong n =3 chu kỳ này.
Thuật toán
Gọi Pthreshold là ngƣỡng độ lệch công suất.
Nếu |powerA-powerB| <= Pthreshold, ta coi nhƣ các thiết bị không có thay đổi trạng thái, công suất biến đổi không đáng kể. Hệ thống tiếp tục theo dõi và nhận dạng n chu kỳ tiếp theo.
Nếu |powerA-powerB| > Pthreshold thì có thể đã có thiết bị nào đó trong mạng lƣới đã thay đổi trạng thái. Hệ thống sẽ phân tích xem đó là những thiết bị nào.
Theo công thức ở 4.2.6 ta có mảng độ lệch dòng điện của 2 tín hiệu signalA, signalB là:
Idiff = bI[j] - aI[j] với 0 < j < k.
Tín hiệu C đƣợc xác định bởi Ic = Idiff và UC = UA = UB. Ta cần xác định xem tín hiệu C có thể đƣợc tạo thành bởi những thiết bị nào trong tập hợp {D1,..., Dn}.
Lần lƣợt duyệt tất cả các tập con phần tử của tập hợp {D1,..., Dn} trong đó 0 <= k <= n. Với mỗi tập con ta xét tất cả các trƣờng hợp thiết bị ở trạng thái bật hoặc tắt. Tập con nào có độ lệch tín hiệu so với tín hiệu C bé nhất là tập con chứa các thiết bị hiện tại đang đƣợc bật trong mạng lƣới.
4.6.5.5. Thuật toán đệ quy tìm các thiết bị đang ở trạng thái bật
Thuật toán đệ quy sẽ duyệt qua tất cả các tổ hợp thiết bị đã đƣợc nhận dạng và gán nhãn trong cơ sở dữ liệu. Với mỗi tổ hợp ta sẽ xử lý nhƣ
Tính tổng tín hiệu của các thiết bị đƣợc bật. Dùng mảng
curentBoolArray[] để lƣu trạng thái của từng thiết bị trong tổ hợp này. Cụ thể nếu giá trị curentBoolArray[i] = 1 thì thiết bị Di là đƣợc bật, nếu curentBoolArray[i] = 0 thì thiết bị đang đƣợc tắt đi.
Sau khi xác định đƣợc các thiết bị đƣợc bật trong tổ hợp này, ta xác định mẫu tín hiệu đƣợc tạo bởi các thiết bị này và tính công suất tổng tiêu thụ của các thiết bị trong thời gian lấy mẫu.
Tiếp theo, tính độ lệch tín hiệu DiffSignals giữa tín hiệu hiện tại và tín hiệu đƣợc tạo bởi tổ hợp trên.
Tiếp theo so sánh với ngƣỡng bestError, nếu độ lệch DiffSignals < bestError thì thực hiện gán bestError = DiffSignals. Lƣu lại danh sách các thiết bị đƣợc bật của tổ hợp này trong mảng trạng thái thiết bị: devicesBeingUsed[].
Tiếp tục duyệt các tổ hợp khác cho đến khi duyệt hết tất cả các tập con của tập các thiết bị {D1, D2,…, Dn} để tìm đƣợc giá trị
bestError nhỏ nhất.
4.6.5.6. Thuật toán tính độ lệch giữa hai tín hiệu
Với 2 tín hiệu đầu vào src1 và src2, ta có thuật toán tính độ lệch giữa hai tín hiệu đƣợc mô tả nhƣ sau:
INPUT
src1: mảng bao gồm các mẫu cƣờng độ dòng điện tức thời của tín hiệu 1.
src2: mảng bao gồm các mẫu cƣờng độ dòng điện tức thời của tín hiệu 2.
power1: công suất tiêu thụ của thiết bị trong thời gian đo đƣợc tín hiệu 1.
usignal: mảng bao gồm các mẫu hiệu điện thế tức thời của tín hiệu 2.
signalLength: là kích thƣớc của tín hiệu;
OUTPUT
Độ lệch của 2 tín hiệu src1, src2: DiffSignals(src1, src2)
Thuật toán
Tính độ lệch cƣờng độ dòng điện giữa 2 tín hiệu sử dụng phƣơng pháp bình phƣơng tối thiểu.
Với mọi i thỏa mãn 0 <= i < signalLength: error1 += (src1[i] - src2[i]) * (src1[i] - src2[i])
Độ lệch cƣờng độ dòng điện của hai tín hiệu: error1 = SQRT(error1)
Độ lệch công suất của src1 và src2:
error2 = ABS( CalculatePowerP(usignal,src2) - power1)
Trả về kết quả là độ lệch của 2 tín hiệu: DiffSignals = error1 + error2
4.6.5.7. Thuật toán tính tổng tín hiệu
Hàm tính tổng tín hiệu đƣợc dùng trong trƣờng hợp giả sử có một số thiết bị đƣợc bật lên, ta cần xác định tín hiệu điện đƣợc tạo thành. Tín hiệu tổng đƣợc tính bằng cách cộng các mẫu cƣờng độ dòng điện tức thời
4.6.6. Mô-đun Giám sát năng lƣợng tiêu thụ
Nhiệm vụ chính của mô-đun này là tính toán đƣợc lƣợng điện năng mà các thiết bị đã tiêu thụ trong thời gian lấy mẫu đo đạc.
Thuật toán
Đầu vào của bài toán là 2 tín hiệu signalk, signalk+1. Trong đó tín hiệu signalk biểu diễn 3 chu kỳ điện áp thứ k, signalk+1 biểu diễn 3 chu kỳ điện áp thứ k+1 của tín hiệu đầu vào.
Tính công suất tiêu thụ trong thời gian 3 chu kỳ điện áp thứ k: Pk.
Tính công suất tiêu thụ trong thời gian 3 chu kỳ điện áp thứ k+1: Pk+1. Sau khi đã xác định đƣợc thiết bị nào đang đƣợc bật trong 3 chu kỳ điện áp thứ k+1, ta lấy công suất tiêu thụ của các thiết bị trong thời gian này bằng tổng công suất của các thiết bị đang đƣợc bật.
4.6.7. Mô-đun Xử lý kết quả
Kết quả đầu ra của hệ thống đƣợc cập nhật theo thời gian 3 chu kỳ điện áp một lần. Mô-đun Xử lý kết quả thực hiện 3 nhiệm vụ chính là:
Biểu diễn cƣờng độ dòng điện và hiệu điện thế tức thời. Hiển thị danh sách các thiết bị đang đƣợc bật.
Hiển thị tổng công suất tiêu thụ của các thiết bị trong thời gian 3 chu kỳ.
4.6.8. Một số chức năng khác
4.6.8.1. Trích chọn mẫu tín hiệu của một thiết bị
Hệ thống hỗ trợ trích chọn mẫu tín hiệu của một thiết bị để phục vụ cho mục đích xây dựng cơ sở dữ liệu các thiết bị đã đƣợc nhận dạng. Nguyên tắc trích chọn mẫu tín hiệu:
Kết nối thiết bị vào hệ thống.
Sau khi tín hiệu đã ổn định, các chu kỳ biến thiên đồng đều thì bắt đầu trích chọn.
Chọn một mẫu bất kỳ bao gồm 3 chu kỳ điện áp liên tiếp nhau tƣơng ứng với 87 mẫu cƣờng độ dòng điện tức thời và công suất tiêu thụ của thiết bị trong thời gian lấy mẫu.
Ví dụ kết quả trích chọn mẫu của thiết bị bóng đèn:
lamp
1172.5632183908
-6 -8 -5 -3 -3 -3 1 1 0 0 7 7 6 5 8 7 6 5 6 4 2 1 3 -1 -5 -6 -5 -7 -9 -9 -4 -5 -6 -5 1 0 -2 -1 5 5 5 7 8 7 6 7 7 5 3 3 2 -1 -2 -2 -6 -8 -5 -4 -8 -8 -5 -3 -3 -1 2 2 0 4 7 7 6 9 10 7 6 6 6 3 2 3 2 -1 -4 -4 -6 -9 -5
4.6.8.2. Đọc dữ liệu tín hiệu từ tệp tin văn bản
Ngoài chức năng đọc dữ liệu trực tiếp từ cổng COM của máy tính, hệ thống còn hỗ trợ đọc dữ liệu mẫu tín hiệu từ các tệp tin văn bản đƣợc xây dựng theo đúng định dạng. Chức năng này hỗ trợ rất tốt cho việc theo dõi kết quả nhận dạng thiết bị, kiểm tra các lỗi nhận dạng sai.
4.6.9. Thiết kế cơ sở dữ liệu
Cơ sở dữ liệu có cấu trúc nhƣ dƣới đây:
87 2 lamp
-6 -8 -5 -3 -3 -3 1 1 0 0 7 7 6 5 8 7 6 5 6 4 2 1 3 -1 -5 -6 -5 -7 -9 -9 -4 -5 -6 -5 1 0 -2 -1 5 5 5 7 8 7 6 7 7 5 3 3 2 -1 -2 -2 -6 -8 -5 -4 -8 -8 -5 -3 -3 -1 2 2 0 4 7 7 6 9 10 7 6 6 6 3 2 3 2 -1 -4 -4 -6 -9 -5 adapter 1798.68965517241 4 3 4 11 12 12 12 12 12 10 8 7 3 -1 -1 1 -3 -7 -10 -11 -12 -14 -13 -10 -10 -9 -5 1 1 1 3