13

Tôi đang làm việc trên một phần mềm cần thực hiện sự xáo trộn của một tập dữ liệu. Dưới đây là một mẫu của các đầu vào tôi sẽ nhận, sáp nhập với cốt truyện nhẹ nhàng của mỗi dải điểm ảnh dọc: alt textXác định "sự xáo trộn" của tập hợp dữ liệu - Python

Nó rất dễ dàng để thấy rằng lề trái là thực sự Wiggly (tức là có một tấn cực tiểu/maxima) và tôi muốn tạo một tập hợp các điểm quan trọng của hình ảnh. Tôi đã áp dụng một hàm làm mịn Gaussian cho dữ liệu ~ 10 lần, nhưng nó có vẻ khá dễ dàng để bắt đầu.

Bất kỳ ý tưởng nào?

Đây là mã ban đầu của tôi, nhưng nó không tạo ra kết quả rất tốt đẹp (cho wiggliness):

def local_maximum(list, center, delta): 
    maximum = [0, 0] 

    for i in range(delta): 
    if list[center + i] > maximum[1]: maximum = [center + i, list[center + i]] 
    if list[center - i] > maximum[1]: maximum = [center - i, list[center - i]] 

    return maximum 

def count_maxima(list, start, end, delta, threshold = 10): 
     count = 0 

    for i in range(start + delta, end - delta): 
    if abs(list[i] - local_maximum(list, i, delta)[1]) < threshold: count += 1 

    return count 

def wiggliness(list, start, end, delta, threshold = 10): 
    return float(abs(start - end) * delta)/float(count_maxima(list, start, end, delta, threshold)) 
+10

Bạn có thể đăng liên kết đến định nghĩa chính xác về sự xáo trộn không? –

+0

Thống kê bạn đang tìm cách mô tả tính năng tần số hoặc tính năng biên độ? – SingleNegationElimination

+1

Nếu bạn đang hỏi về một cách để mô tả tính năng xáo trộn thay vì một cách để thực hiện đặc tính đó theo chương trình, bạn có thể có nhiều may mắn hơn trên http://stats.stackexchange.com/. – katrielalex

Trả lời

5

Hãy xem lowpass/HighPass/notch/bộ lọc bandpass, biến đổi Fourier, hoặc wavelets. Ý tưởng cơ bản là có rất nhiều cách khác nhau để tìm ra nội dung tần số của tín hiệu được lượng tử hóa theo các khoảng thời gian khác nhau.

Nếu chúng ta có thể tìm ra sự xáo trộn, điều đó sẽ hữu ích. Tôi sẽ nói rằng lề trái nhất là wiggly b/c nó có nội dung tần số cao hơn, mà bạn có thể hình dung bằng cách sử dụng một biến đổi fourier.

Nếu bạn sử dụng bộ lọc highpass của tín hiệu màu đỏ đó, bạn sẽ chỉ nhận được nội dung tần số cao và sau đó bạn có thể đo biên độ và làm ngưỡng để xác định độ rung. Nhưng tôi đoán sự lúng túng chỉ cần thêm hình thức đằng sau nó.

+0

Cảm ơn! Tôi sẽ xem chúng. Tôi vẫn đang cố gắng tìm hiểu ý nghĩa của tất cả thuật ngữ này;) – Blender

1

Đối với những thứ như thế này, gọn gàng làm mọi thứ dễ dàng hơn nhiều, vì nó cung cấp các chức năng hữu ích để thao tác dữ liệu vectơ, ví dụ: thêm một vô hướng cho mỗi phần tử, tính giá trị trung bình, v.v.

Ví dụ: bạn có thể thử với tốc độ không vượt qua của dữ liệu ban đầu-wiggliness1 hoặc sự khác biệt đầu tiên-wiggliness2 (tùy thuộc vào những gì wiggliness được cho là, chính xác-nếu xu hướng toàn cầu được bỏ qua, bạn có lẽ nên sử dụng dữ liệu khác biệt). Đối với x, bạn sẽ lấy slice hoặc cửa sổ quan tâm từ dữ liệu gốc, nhận được một loại đo lường sự xáo trộn cục bộ. Nếu bạn sử dụng dữ liệu gốc, sau khi loại bỏ độ lệch, bạn cũng có thể muốn đặt tất cả các giá trị nhỏ hơn một số ngưỡng thành 0 để bỏ qua các đường cong biên độ thấp.

import numpy as np 

def wiggliness1(x): 
    #remove bias: 
    x=x-np.average(x) 
    #calculate zero crossing rate: 
    np.sum(np.abs(np.sign(np.diff(x)))) 


def wiggliness(x): 
    #calculate zero crossing rate of the first difference: 
    return np.sum(np.abs(np.sign(np.diff(np.sign(np.diff(x)))))) 
+0

Cảm ơn, tôi chưa bao giờ nghĩ về điều đó. Tôi nghĩ rằng tôi sẽ sử dụng nó, vì thuật toán làm mịn của tôi loại bỏ một số điểm quan trọng ... – Blender

Các vấn đề liên quan