Giới hạn để định hình tiếng ồn có thể?


9

Tôi muốn thực hiện định hình nhiễu trong ứng dụng 100kHz, 16 bit, để chuyển tất cả nhiễu lượng tử hóa sang băng tần 25khz-50kHz, với độ nhiễu tối thiểu trong dải DC-25kHz.

Tôi đã thiết lập mathicala để tạo hạt nhân bộ lọc lỗi 31 mẫu thông qua học tăng cường, hoạt động tốt: Sau khi học một chút, tôi có thể tăng cường khoảng ~ 16dB cho nhiễu tần số cao với cùng mức giảm trong dải tần số thấp ( đường trung tâm là mức nhiễu âm không bị che chắn). Điều này phù hợp với định lý tạo hình nhiễu "Gerzon-Craven".

kết quả phổ nhiễu sau khi học

Bây giờ đến vấn đề của tôi:

Tôi không thể quản lý để định hình tiếng ồn thậm chí nhiều hơn sau khi học rộng rãi, mặc dù định lý Gerzon-Craven không cấm nó. Ví dụ, nó nên có thể để đạt được 40 giảm dB trong dải thấp và 40 tăng cường dB trong dải cao.

Vì vậy, có một giới hạn cơ bản khác mà tôi đang chạy vào?

Tôi đã cố gắng xem xét các định lý nhiễu / lấy mẫu / thông tin của Shannon nhưng sau một thời gian, tôi chỉ tìm được một giới hạn duy nhất từ ​​nó: định lý Gerzon-Craven, dường như là kết quả trực tiếp của định lý Shannon.

Bất kỳ trợ giúp được đánh giá cao.

EDIT: thêm thông tin

Off đầu tiên, các bộ lọc kernel mà tạo ra hình tiếng ồn trên, Lưu ý rằng gần đây nhất mẫu là trên ngay phía. Các giá trị số của BarChart được làm tròn thành 0,01: {-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} (Không chính xác là thanh char nhưng tạo ra đường cong tương tự )

Lọc kernel, mẫu gần đây nhất trên RIGHT.

Một lưu ý khác về việc thực hiện phản hồi lỗi:

Tôi đã thử hai cách thực hiện khác nhau của phản hồi lỗi. Đầu tiên tôi so sánh mẫu đầu ra được làm tròn với giá trị mong muốn và sử dụng độ lệch này là lỗi. Thứ hai tôi so sánh mẫu đầu ra được làm tròn với (phản hồi đầu vào + lỗi). Mặc dù cả hai phương pháp đều tạo ra các hạt nhân khá khác nhau, cả hai dường như chững lại ở cùng một cường độ định hình tiếng ồn. Các dữ liệu được đăng ở đây sử dụng thực hiện thứ hai.

Đây là mã được sử dụng để tính toán các mẫu sóng số hóa. bước là bước để làm tròn. wave là dạng sóng không được số hóa (thường chỉ là số không khi không có tín hiệu nào được áp dụng).

TestWave[kernel_?VectorQ] := 
 Module[{k = kernel, nf, dith, signals, twave, deltas},
  nf = Length@k;
  dith = RandomVariate[TriangularDistribution[{-1, 1}*step], l];
  signals = deltas = Table[0, {l}];
  twave = wave;
  Do[
   twave[[i]] -= k.PadLeft[deltas[[;; i - 1]], nf];
   signals[[i]] = Round[twave[[i]] + dith[[i]], step];
   deltas[[i]] = signals[[i]] - twave[[i]];
   , {i, l}];
  signals
  ]

Phương pháp gia cố:

"Điểm số" được tính bằng cách nhìn vào phổ công suất nhiễu. Mục tiêu là giảm thiểu công suất nhiễu trong dải DC-25kHz. Tôi không xử phạt nhiễu trong dải tần số cao, do đó, nhiễu cao tùy ý sẽ không làm giảm điểm. Tôi đang giới thiệu tiếng ồn trong trọng lượng hạt nhân để tìm hiểu. Có lẽ, do đó, tôi ở trong một địa phương tối thiểu (rất rộng và sâu), nhưng tôi cho rằng điều này cực kỳ khó xảy ra.

So sánh với thiết kế bộ lọc tiêu chuẩn:

Mathematica cho phép tạo các bộ lọc lặp. Chúng có thể có độ tương phản tốt hơn nhiều so với 36 dB khi đáp ứng tần số của chúng được vẽ; lên đến 80-100 dB. Các giá trị số: {0,024, -0.061, -0.048, 0.38, -0.36, -0.808, 2.09, -0.331, -4.796, 6.142, 3.918, -17.773, 11.245, 30.613, -87.072, 113.676, -87.072, 30.613 , -17.773, 3.918, 6.142, -4.796, -0.331, 2.09, -0.808, -0.36, 0.38, -0.048, -0.061, 0.024}

nhập mô tả hình ảnh ở đây

Tuy nhiên, khi áp dụng những cái trong định hình nhiễu thực tế, chúng (a) được kẹp với cùng độ tương phản ~ 40dB, (b) hoạt động kém hơn so với bộ lọc đã học thực sự không làm giảm nhiễu.

màu xanh da trời: bộ lọc đã học, màu vàng: bộ lọc cân bằng ngoài hộp, KHÔNG bị dịch chuyển ... nó thực sự tồi tệ hơn


2
+1, câu hỏi rất thú vị. Bạn đã thử tăng thứ tự của bộ lọc trên 31 vòi chưa? Mức triệt tiêu 40dB nghe hơi cao đối với FIR 31.
A_A

1
@Olli, tôi không tin là tôi hiểu hoàn toàn. Tôi có thể đăng hạt nhân bộ lọc nếu đó là điều bạn quan tâm. Nói cách khác, có các trọng số dao động buộc lỗi thay thế -> chuyển nó sang tần số cao.
tobalt

2
@tobalt từ thiết kế bộ lọc "cổ điển", đó là kết quả dự kiến ​​rằng các bộ lọc dài hơn dốc hơn và / hoặc có độ suy giảm nhiều hơn trong dải dừng và / hoặc có ít gợn hơn trong dải thông. Bây giờ, tôi đoán là phương pháp củng cố của bạn thưởng cho độ dốc nhiều hơn suy hao sau một số điểm; phương pháp mà bạn sử dụng để củng cố là gì?
Marcus Müller

1
Bạn có thể muốn xem phần Thiết kế bộ lọc của Mathicala. Có lẽ bạn chỉ cần xác định các thông số kỹ thuật của bộ lọc và sử dụng một trong các kỹ thuật hiện có để trả về bộ lọc thỏa mãn chúng.
A_A

1
Sau đó, đó chắc chắn là (tùy chọn lặp) thiết kế bộ lọc. Nhận thông số kỹ thuật bộ lọc của bạn (chính xác như bạn đã đăng chúng ở đây) và cố gắng tạo bộ lọc thông qua chức năng này (đơn giản nhất của loại này) và xem những gì nó đi kèm. Sẽ thật tuyệt khi thấy các hệ số mà chức năng đưa ra so với các hệ số mà việc học lại thông tin trở lại. Ngoài ra, lưu ý loại thứ tự bộ lọc mà nó đưa ra, tôi đoán nó sẽ cao hơn 31. Có phải nó phải "thích nghi" với tín hiệu không?
A_A

Câu trả lời:


12

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ệ thống Lipshitz et al 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à:

HFilter(z)=b1z1b2z2b3z3

z1

H(z)=1HFilter(z)=1+b1z1+b2z2+b3z3+.

,b3,b2,b11,b1,b2,b3,b0=1horzcattrong 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:

Âm mưu Freqz
Hình 5. Đáp ứng tần số cường độ của bộ lọc định hình nhiễu hoàn toàn.

Âm mưu
×

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:

Phản hồi thường xuyên
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.

Âm mưu cực không
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+a1z1+a2z2+a3z3+

ab

Để 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, cheby2elliptrong 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 polyluô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:

Đáp ứng tần số cườ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.

Âm mưu cực không
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');

nhập mô tả hình ảnh ở đây
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".

Miền thời gian thử nghiệm thay thế
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.


1
@MattL. Lúc đầu tôi đã nghĩ sai rằng tobalt có bộ lọc toàn cực. Tôi viết lại câu trả lời của mình khi tôi nhận ra đó là bộ lọc FIR với hệ số đầu tiên 1. Ngoài ra Gerzon-Craven được báo cáo rằng bộ lọc cần phải là pha tối thiểu để tối ưu và các hệ số tối ưu hóa của tobalt cũng cho bộ lọc pha tối thiểu. Những yêu cầu này tương đương với những gì hệ số của bộ lọc toàn cực IIR có nên tôi đề xuất phương pháp thiết kế mượn từ đó. Một IIR tiêu chuẩn cũng sẽ là một lựa chọn.
Olli Niemitalo

1
Tôi đã tách lỗi: Việc triển khai của tôi tạo ra dạng sóng (theo thời gian) giống như của bạn. Tuy nhiên, chức năng abs [Fourier [wave]] dường như chạy vào một số tràn / tràn bên trong, bởi vì phổ trở lại trông khác nhau (tầng cao hơn)
tobalt

1
@Olli Niemitalo Ok có vẻ như FFT trong quãng tám sử dụng cửa sổ tự động có thể? Sau khi áp dụng cửa sổ Hann cho dạng sóng, tôi có thể nhận được các FFT "chính xác". Tôi sẽ kiểm tra ngắn gọn tính toàn vẹn của phương pháp này và cuối cùng tiếp tục học hỏi và đăng kết quả. Cảm ơn tất cả những nỗ lực của bạn. Tôi đã đánh dấu bài viết của bạn là câu trả lời.
tobalt

1
@ robertbristow-johnson Tôi nghĩ nó hoàn toàn phù hợp. Tôi đã loại bỏ một phương trình trong đó H (z) dành cho bộ lọc đệ quy với 1 là tử số. Nhưng đó là bộ lọc FIR trong trường hợp của tobalt. Tôi nghi ngờ bạn có thể nghĩ rằng nó trở thành một bộ lọc đệ quy vì có một vòng phản hồi. Nhưng lượng tử hóa hoà sắc là trong vòng lặp thực hiện việc cắt đường dẫn từ đầu ra của bộ lọc sang phần dư.
Olli Niemitalo

1
ab
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.