The temperature correction inflates the signal-to-noise ratio of the LEDs: the noise is not divided by the reduction factor

Đang mở Phù hợp với người mới
#175 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
data

Hướng nghiên cứu

Bắt đầu với ExtinctionCoefficients.apply_temperature_correction và theo dõi cách hàm này cập nhật cường độ tham chiếu và cột nhiễu; sau đó kiểm tra calc_and_set_coefficients và calc_and_set_coefficients_mp để xem SNR được hình thành như thế nào. Thêm một bài kiểm thử sử dụng cùng dữ liệu đã trích xuất khi có và không có hiệu chỉnh nhiệt độ, đồng thời xác nhận SNR truyền vào calc_coefficients_of_img không thay đổi.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

ExtinctionCoefficients.apply_temperature_correction divides the reference property by the reduction factor of every value, but leaves its noise column as it was extracted:

corrected_intensities = self.calculated_img_data[self.reference_property] / factors
self.calculated_img_data = self.calculated_img_data.assign(
    **{self.reference_property: corrected_intensities})

The signal-to-noise ratio that weights the LEDs in the linear solver is then formed from the corrected intensity and the uncorrected noise (calc_and_set_coefficients and calc_and_set_coefficients_mp):

snr = single_img_array / single_img_data[self.noise_property].to_numpy()

So with a temperature correction every SNR comes out too high by 1/factor. The correction rescales the signal, it does not add any: the SNR of a measured value is I/σ before and after it. The weight min(1, SNR / snr_full_weight) is meant to be the inverse standard deviation of the optical depth -ln(I_e/I_0), and the correction does not change that either.

Effect

Only LEDs below snr_full_weight are affected, because the weight is capped at 1. With a reduction factor of 0.8 and the default snr_full_weight = 10:

true SNR weight now correct weight
8 1.0 0.8
4 0.5 0.4
1 0.125 0.1

The min_layer_weight cut-off is computed from the same weights, so layers are set to NaN later than they should be. The error grows with the reduction, i.e. with the LED temperature, which is highest where the smoke is densest and the LEDs approach the noise floor, so it hits exactly the LEDs the weighting exists for.

Runs without a temperature correction, and runs of a reference property without a noise column, are not affected.

Fix

Divide noise_sum_col_val by the same factors in apply_temperature_correction whenever self.noise_property is loaded. The moving average runs before the correction for both columns, so they stay consistent.

A test: for the same extracted data, the SNR passed to calc_coefficients_of_img should be the same with and without a temperature correction.

Ngôn ngữ chính
Python
Star
7
Fork
4
Merge trung bình
3 giờ 58 phút
Pull request đã merge (30 ngày)
35

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của FireDynamics/LEDSmokeAnalysis

Tất cả issue của FireDynamics/LEDSmokeAnalysis

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.