Nhiễu trắng Gaussian trung bình thực, không phụ thuộc vào tín hiệu sạch và phương sai đã biết được thêm vào tạo ra tín hiệu nhiễuBiến đổi Fourier rời rạc (DFT) của tín hiệu nhiễu được tính bằng:
Đây chỉ là bối cảnh và chúng tôi sẽ xác định phương sai nhiễu trong miền tần số, vì vậy việc chuẩn hóa (hoặc thiếu chúng) là không quan trọng. Nhiễu trắng Gaussian trong miền thời gian là nhiễu trắng Gaussian trong miền tần số, xem câu hỏi: " Thống kê biến đổi Fourier rời rạc của nhiễu Gaussian trắng là gì? ". Vì vậy, chúng ta có thể viết:
Trong đó và là DFT của tín hiệu và nhiễu sạch và thùng tạp âm theo phân phối Gaussian đối xứng phức tạp tròn đối xứng . Mỗi phần thực và phần ảo của độc lập tuân theo phân phối phương sai Gaussian . Chúng tôi xác định tỷ lệ tín hiệu / nhiễu (SNR) của bin là:
Sau đó, một nỗ lực để giảm nhiễu được thực hiện bằng phép trừ phổ, theo đó độ lớn của mỗi thùng được giảm độc lập trong khi vẫn giữ lại pha ban đầu (trừ khi giá trị bin giảm về 0 khi giảm cường độ). Việc giảm tạo thành ước tính của hình vuông của giá trị tuyệt đối của mỗi thùng của DFT của tín hiệu sạch:
trong đó là phương sai đã biết của tiếng ồn trong mỗi thùng DFT. Để đơn giản, chúng tôi không xem xét hoặc cho ngay cả , đó là những trường hợp đặc biệt cho thựcỞ SNR thấp, công thức trong (2) đôi khi có thể dẫn đến âmChúng tôi có thể loại bỏ vấn đề này bằng cách kẹp ước tính về 0 từ bên dưới, xác định lại:
Hình 1. Ước tính Monte Carlo với cỡ mẫu là trong số: Solid: mức tăng tổng sai số vuông khi ước tínhby so với ước tính nó với
dashed: mức tăng của tổng lỗi vuông khi ước tính bằng so với ước tính với chấm: tăng tổng lỗi vuông khi ước tính theo so với ước tính vớiĐịnh nghĩa của từ (3) được sử dụng.
Câu hỏi: Có ước tính khác vềhoặc cải thiện (2) và (3) mà không phụ thuộc vào phân phối của ?
Tôi nghĩ vấn đề này tương đương với việc ước tính bình phương của tham số của phân phối Rice (Hình 2) với tham số đã biết được đưa ra một quan sát duy nhất.
Hình 2. Phân phối gạo là phân phối khoảng cách đến điểm xuất phát từ một điểm theo phân phối chuẩn đối xứng tròn bivariate với giá trị tuyệt đối của trung bình phương sai và phương sai thành phần
Tôi tìm thấy một số tài liệu có vẻ phù hợp:
- Jan Sijbers, Arnold J. den Dekker, Paul Scheunders và Dirk Van Dyck, "Ước tính khả năng tối đa của các thông số phân phối Rician" , Giao dịch của IEEE về hình ảnh y tế (Tập: 17, Số phát hành: 3, Tháng 6 năm 1998) ( doi , pdf ).
Kịch bản Python A cho các đường cong ước tính
Kịch bản này có thể được mở rộng để vẽ đồ thị đường cong ước tính trong các câu trả lời.
import numpy as np
from mpmath import mp
import matplotlib.pyplot as plt
def plot_est(ms, est_as):
fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(1, 1, 1)
if len(np.shape(est_as)) == 2:
for i in range(np.shape(est_as)[0]):
plt.plot(ms, est_as[i])
else:
plt.plot(ms, est_as)
plt.axis([ms[0], ms[-1], ms[0], ms[-1]])
if ms[-1]-ms[0] < 5:
ax.set_xticks(np.arange(np.int(ms[0]), np.int(ms[-1]) + 1, 1))
ax.set_yticks(np.arange(np.int(ms[0]), np.int(ms[-1]) + 1, 1))
plt.grid(True)
plt.xlabel('$m$')
h = plt.ylabel('$\hat a$')
h.set_rotation(0)
plt.show()
Tập lệnh Python B cho Hình 1
Kịch bản này có thể được mở rộng cho các đường cong đạt được lỗi trong các câu trả lời.
import math
import numpy as np
import matplotlib.pyplot as plt
def est_a_sub_fast(m):
if m > 1:
return np.sqrt(m*m - 1)
else:
return 0
def est_gain_SSE_a(est_a, a, N):
SSE = 0
SSE_ref = 0
for k in range(N): #Noise std. dev = 1, |X_k| = a
m = abs(complex(np.random.normal(a, np.sqrt(2)/2), np.random.normal(0, np.sqrt(2)/2)))
SSE += (a - est_a(m))**2
SSE_ref += (a - m)**2
return SSE/SSE_ref
def est_gain_SSE_a2(est_a, a, N):
SSE = 0
SSE_ref = 0
for k in range(N): #Noise std. dev = 1, |X_k| = a
m = abs(complex(np.random.normal(a, np.sqrt(2)/2), np.random.normal(0, np.sqrt(2)/2)))
SSE += (a**2 - est_a(m)**2)**2
SSE_ref += (a**2 - m**2)**2
return SSE/SSE_ref
def est_gain_SSE_complex(est_a, a, N):
SSE = 0
SSE_ref = 0
for k in range(N): #Noise std. dev = 1, X_k = a
Y = complex(np.random.normal(a, np.sqrt(2)/2), np.random.normal(0, np.sqrt(2)/2))
SSE += abs(a - est_a(abs(Y))*Y/abs(Y))**2
SSE_ref += abs(a - Y)**2
return SSE/SSE_ref
def plot_gains_SSE(as_dB, gains_SSE_a, gains_SSE_a2, gains_SSE_complex, color_number = 0):
colors = plt.rcParams['axes.prop_cycle'].by_key()['color']
fig = plt.figure(figsize=(7,4))
ax = fig.add_subplot(1, 1, 1)
if len(np.shape(gains_SSE_a)) == 2:
for i in range(np.shape(gains_SSE_a)[0]):
plt.plot(as_dB, gains_SSE_a[i], color=colors[i], )
plt.plot(as_dB, gains_SSE_a2[i], color=colors[i], linestyle='--')
plt.plot(as_dB, gains_SSE_complex[i], color=colors[i], linestyle=':')
else:
plt.plot(as_dB, gains_SSE_a, color=colors[color_number])
plt.plot(as_dB, gains_SSE_a2, color=colors[color_number], linestyle='--')
plt.plot(as_dB, gains_SSE_complex, color=colors[color_number], linestyle=':')
plt.grid(True)
plt.axis([as_dB[0], as_dB[-1], 0, 2])
plt.xlabel('SNR (dB)')
plt.ylabel('SSE gain')
plt.show()
as_dB = range(-40, 41)
as_ = [10**(a_dB/20) for a_dB in as_dB]
gains_SSE_a_sub = [est_gain_SSE_a(est_a_sub_fast, a, 10**5) for a in as_]
gains_SSE_a2_sub = [est_gain_SSE_a2(est_a_sub_fast, a, 10**5) for a in as_]
gains_SSE_complex_sub = [est_gain_SSE_complex(est_a_sub_fast, a, 10**5) for a in as_]
plot_gains_SSE(as_dB, gains_SSE_a_sub, gains_SSE_a2_sub, gains_SSE_complex_sub, 1)