Phối màu cơ bản mà không tạo tiếng ồn
Lượng tử hóa hoà sắc cơ bản mà không tạo hình nhiễu hoạt động như thế này:
Hình 1. Sơ đồ hệ thống lượng tử hóa hoà sắc cơ bản. Nhiễu là tam giác không có nghĩa là tam giác có giá trị tuyệt đối lớn nhất là 1. Làm tròn là số nguyên gần nhất. Lỗi dư là sự khác biệt giữa đầu ra và đầu vào và chỉ được tính để phân tích.
11214
Với lỗi dư phụ gia độc lập, chúng ta sẽ có một mô hình đơn giản hơn của hệ thống:
Hình 2. Tính gần đúng của lượng tử phối màu cơ bản. Lỗi dư là tiếng ồn trắng.
Trong mô hình gần đúng, đầu ra chỉ đơn giản là đầu vào cộng với lỗi dư nhiễu trắng độc lập.
Phối màu với tiếng ồn định hình
Tôi không thể đọc Mathicala rất tốt vì vậy thay vì hệ thống của bạn, tôi sẽ phân tích hệ thống từ Lipshitz et al. "Định hình tiếng ồn tối thiểu có thể nghe được " J. Audio Eng. Sóc., Tập 39, số 11, tháng 11 năm 1991:
Hình 3. Lipshitz et al. Sơ đồ hệ thống năm 1991 (được điều chỉnh từ Hình 1). Bộ lọc (in nghiêng trong văn bản) bao gồm trong đó một độ trễ mẫu để nó có thể được sử dụng làm bộ lọc phản hồi lỗi. Tiếng ồn là hòa sắc tam giác.
Nếu lỗi dư không phụ thuộc vào giá trị hiện tại và quá khứ của tín hiệu A, chúng ta có một hệ thống đơn giản hơn:
Hình 4. Một mô hình gần đúng của Lipshitz et al. Hệ thống năm 1991. Bộ lọc giống như trong Hình 3 và bao gồm trong đó một độ trễ mẫu. Nó không còn được sử dụng như một bộ lọc phản hồi. Lỗi dư là tiếng ồn trắng.
Trong câu trả lời này, tôi sẽ làm việc với mô hình gần đúng được phân tích dễ dàng hơn (Hình 4). Trong bản gốc Lipshitz et al. Hệ thống năm 1991, Bộ lọc có dạng bộ lọc đáp ứng xung vô hạn (IIR) chung bao gồm cả bộ lọc IIR và bộ lọc đáp ứng xung hữu hạn (FIR). Sau đây, chúng tôi sẽ giả định rằng Bộ lọc là bộ lọc FIR, vì tôi tin rằng dựa trên các thử nghiệm của tôi với các hệ số của bạn, đó là những gì bạn có trong hệ thống của mình. Chức năng chuyển của Bộ lọc là:
HF i l t e r( z) = - b1z- 1- b2z- 2- b3z- 3- Càng
z- 1
H( z) = 1 - HF i l t e r( z) = 1 + b1z- 1+ b2z- 2+ b3z- 3+ ... .
Sầu , - b3, - b2, - b11 , b1, b2, b3, ...b0= 1horzcat
trong tập lệnh Octave bên dưới) và cuối cùng danh sách được đảo ngược (bởi flip
):
pkg load signal
b = [-0.16, 0.51, -0.74, 0.52, -0.04, -0.25, 0.22, -0.11, -0.02, 0.31, -0.56, 0.45, -0.13, 0.04, -0.14, 0.12, -0.06, 0.19, -0.22, -0.15, 0.4, 0.01, -0.41, -0.1, 0.84, -0.42, -0.81, 0.91, 0.75, -2.37, 2.29];
c = flip(horzcat(-b, 1));
freqz(c)
zplane(c)
Kịch bản vẽ đồ thị đáp ứng tần số cường độ và vị trí 0 của bộ lọc định hình nhiễu hoàn toàn:
Hình 5. Đáp ứng tần số cường độ của bộ lọc định hình nhiễu hoàn toàn.
×∘
Tôi nghĩ rằng vấn đề tìm hệ số bộ lọc có thể được cải cách thành vấn đề thiết kế bộ lọc pha tối thiểu với hệ số hàng đầu là 1. Nếu có những hạn chế cố hữu đối với đáp ứng tần số của các bộ lọc đó, thì những hạn chế này được chuyển sang các giới hạn tương đương trong việc định hình tiếng ồn sử dụng các bộ lọc như vậy.
Chuyển đổi từ thiết kế toàn cực sang FIR pha tối thiểu
Một quy trình thiết kế khác nhau nhưng theo nhiều cách, các bộ lọc tương đương được mô tả trong Stojanović et al. , "Thiết kế bộ lọc kỹ thuật số đệ quy toàn cực dựa trên đa thức siêu âm", Radioengineering, tập 23, số 3, tháng 9 năm 2014. Họ tính toán các hệ số mẫu số của hàm truyền của bộ lọc thông thấp toàn cực IIR. Những người luôn có hệ số mẫu số hàng đầu là 1 và có tất cả các cực bên trong vòng tròn đơn vị, một yêu cầu của bộ lọc IIR ổn định. Nếu các hệ số đó được sử dụng làm hệ số của bộ lọc định hình nhiễu pha FIR tối thiểu, chúng sẽ cung cấp đáp ứng tần số thông cao đảo ngược so với bộ lọc IIR thông thấp (hệ số mẫu số hàm truyền trở thành hệ số tử số). Trong ký hiệu của bạn, một tập hợp các hệ số từ bài viết {-0.0076120, 0.0960380, -0.5454670, 1.8298040, -3.9884220, 5.8308660, -5.6495140, 3.3816780}
đó, có thể được kiểm tra cho ứng dụng định hình nhiễu mặc dù nó không chính xác với đặc điểm kỹ thuật:
Hình 7. Đáp ứng tần số cường độ của bộ lọc FIR sử dụng các hệ số từ Stojanović et al. 2014.
Hình 8. Biểu đồ cực không của bộ lọc FIR sử dụng các hệ số từ Stojanović et al. 2014.
Hàm truyền toàn cực là:
H( z) = 11 + a1z- 1+ một2z- 2+ một3z- 3+ ...
mộtb
Để thiết kế bộ lọc toàn cực và để chuyển đổi bộ lọc đó thành bộ lọc FIR pha tối thiểu, bạn sẽ không thể sử dụng các phương pháp thiết kế bộ lọc IIR bắt đầu từ bộ lọc nguyên mẫu tương tự và ánh xạ các cực và số không vào miền kỹ thuật số bằng cách sử dụng phép biến đổi song tuyến . Điều đó bao gồm cheby1
, cheby2
và ellip
trong SciPy của Octave và Python. Các phương thức này sẽ cung cấp cho các số 0 cách xa gốc tọa độ z, vì vậy bộ lọc sẽ không thuộc loại cực bắt buộc.
Trả lời cho câu hỏi lý thuyết
Nếu bạn không quan tâm sẽ có bao nhiêu tiếng ồn ở tần số cao hơn một phần tư tần số lấy mẫu, thì Lipshitz et al. 1991 giải quyết câu hỏi của bạn trực tiếp:
Đối với các hàm trọng số như vậy, bằng 0 trên một phần của dải, không có giới hạn về mặt lý thuyết nào đối với việc giảm công suất tạp âm có thể đạt được từ mạch của Hình 1. Ví dụ, đây sẽ là trường hợp nếu người ta cho rằng tai có độ nhạy bằng 0, giả sử, 20 kHz và Tần số Nyquist và chọn chức năng cân để phản ánh thực tế này.
Hình 1. cho thấy một máy tạo nhiễu có cấu trúc bộ lọc IIR chung có cả cực và số không, khác với cấu trúc FIR mà bạn có tại thời điểm này, nhưng những gì họ nói cũng áp dụng cho điều đó, bởi vì đáp ứng xung của bộ lọc FIR có thể là được thực hiện tùy ý gần với đáp ứng xung của bất kỳ bộ lọc IIR ổn định nào.
Kịch bản Octave cho thiết kế bộ lọc
ν=0dip
pkg load signal
N = 14; #number of taps including leading tap with coefficient 1
att = 97.5; #dB attenuation of Dolph-Chebyshev window, must be positive
dip = 2; #spectrum lift-up multiplier, must be above 1
c = chebwin(N, att);
c = conv(c, c);
c /= sum(c);
c(N) += dip*10^(-att/10);
r = roots(c);
j = (abs(r(:)) <= 1);
r = r(j);
c = real(poly(r));
c .*= (-1).^(0:(N-1)); #if this complains, then root finding has probably failed
freqz(c)
zplane(c)
printf('%f, ', flip(-c(2:end))), printf('\n'); #tobalt's format
Nó bắt đầu với một cửa sổ Dolph-Ch Quashev như là các hệ số, tự nó kết hợp với nó để nhân đôi số 0 của hàm truyền, thêm vào một vòi ở giữa một số "nâng" đáp ứng tần số (coi vòi giữa là 0) rằng nó ở mọi nơi đều dương, tìm các số 0, loại bỏ các số 0 nằm ngoài vòng tròn đơn vị, chuyển các số 0 trở lại hệ số (hệ số dẫn đầu poly
luôn luôn là 1) và lật dấu của mọi hệ số thứ hai để làm cho bộ lọc vượt qua . Kết quả từ (một phiên bản cũ hơn nhưng gần như tương đương) kịch bản có triển vọng:
Hình 9. Đáp ứng tần số cường độ của bộ lọc từ (một phiên bản cũ hơn nhưng gần như tương đương) của tập lệnh trên.
Hình 10. Biểu đồ cực không của bộ lọc từ (một phiên bản cũ hơn nhưng gần như tương đương) của tập lệnh trên.
Các hệ số từ (một phiên bản cũ hơn nhưng gần như tương đương) của tập lệnh trên trong ký hiệu của bạn : {0.357662, -2.588396, 9.931419, -26.205448, 52.450624, -83.531276, 108.508775, -116.272581, 102.875781, -74.473956, 43.140431, -19.131434, 5.923468}
. Các số này lớn có thể dẫn đến các vấn đề về số.
Octave thực hiện định hình tiếng ồn
Cuối cùng, tôi đã tự mình thực hiện việc định hình tiếng ồn trong Octave và không gặp vấn đề như bạn đã làm. Dựa trên thảo luận của chúng tôi trong các nhận xét, tôi nghĩ rằng hạn chế trong quá trình thực hiện của bạn là phổ nhiễu được đánh giá bằng cửa sổ hình chữ nhật hay còn gọi là "không có cửa sổ", làm đổ phổ tần số cao đến tần số thấp.
pkg load signal
N = length(c);
M = 16384; #signal length
input = zeros(M, 1);#sin(0.01*(1:M))*127;
er = zeros(M, 1);
output = zeros(M, 1);
for i = 1:M
A = input(i) + er(i);
output(i) = round(A + rand() - rand());
for j = 2:N
if (i + j - 1 <= M)
er(i + j - 1) += (output(i) - A)*c(j);
endif
endfor
endfor
pwelch(output, max(nuttallwin(1024), 0), 'semilogy');
Hình 11. Phân tích phổ nhiễu lượng tử hóa từ việc thực hiện Octave ở trên về định hình nhiễu cho tín hiệu đầu vào bằng 0 không đổi. Trục hoành: Tần số chuẩn hóa. Đen: không có tiếng ồn định hình ( c = [1];
), đỏ: bộ lọc ban đầu của bạn, màu xanh lam: bộ lọc từ phần "Tập lệnh Octave cho thiết kế bộ lọc".
Hình 12. Đầu ra miền thời gian từ việc triển khai Octave ở trên cho việc định hình nhiễu cho tín hiệu đầu vào bằng 0 không đổi. Trục ngang: số mẫu, trục dọc: giá trị mẫu. Màu đỏ: bộ lọc ban đầu của bạn, màu xanh lam: bộ lọc từ phần "Tập lệnh Octave cho thiết kế bộ lọc".
Bộ lọc định hình nhiễu cực hơn (màu xanh) dẫn đến các giá trị mẫu đầu ra được lượng tử hóa rất lớn ngay cả đối với đầu vào bằng không.