những gì là làm mịn trong điều khoản rất cơ bản


17

Làm mịn là gì và làm thế nào tôi có thể làm điều đó?

Tôi có một mảng trong Matlab là phổ cường độ của tín hiệu giọng nói (cường độ 128 điểm của FFT). Làm thế nào để tôi làm mịn điều này bằng cách sử dụng một trung bình di chuyển? Từ những gì tôi hiểu, tôi nên lấy kích thước cửa sổ của một số phần tử nhất định, lấy trung bình và điều này trở thành phần tử thứ 1 mới. Sau đó dịch chuyển cửa sổ sang phải theo một yếu tố, lấy trung bình trở thành yếu tố thứ 2, v.v. Đó thực sự là cách nó hoạt động? Tôi không chắc chắn bản thân mình vì nếu tôi làm điều đó, trong kết quả cuối cùng của tôi, tôi sẽ có ít hơn 128 yếu tố. Vì vậy, làm thế nào nó hoạt động và làm thế nào để giúp làm mịn các điểm dữ liệu? Hoặc có cách nào khác để tôi có thể làm mịn dữ liệu?

EDIT: liên kết đến câu hỏi tiếp theo


cho một quang phổ có thể bạn muốn cùng nhau trung bình (trong chiều thời gian) nhiều Phổ chứ không phải là một trung bình chạy dọc theo trục tần số của một quang phổ đơn
endolith

@endolith cả hai đều là kỹ thuật hợp lệ. Tính trung bình trong miền tần số (đôi khi được gọi là Biểu đồ Danielle) giống như cửa sổ trong miền thời gian. Tính trung bình cho nhiều biểu đồ ("quang phổ") là một nỗ lực bắt chước tính trung bình theo yêu cầu của Biểu đồ thực (đây được gọi là Biểu đồ Welch). Ngoài ra, như một vấn đề về ngữ nghĩa, tôi sẽ lập luận rằng "làm mịn" là lọc thông thấp không có nguyên nhân. Xem lọc Kalman và làm mịn Kalman, lọc Wiener v Làm mịn Wiener, v.v ... Có một sự khác biệt không cần thiết và nó phụ thuộc vào việc thực hiện.
Bryan

Câu trả lời:


23

Làm mịn có thể được thực hiện theo nhiều cách, nhưng trong điều kiện rất cơ bản và chung chung, điều đó có nghĩa là bạn thậm chí phát ra tín hiệu, bằng cách trộn các yếu tố của nó với hàng xóm của chúng. Bạn làm mờ / làm mờ tín hiệu một chút để loại bỏ nhiễu. Ví dụ, một kỹ thuật làm mịn rất đơn giản sẽ là, để tính toán lại mọi yếu tố tín hiệu f(t)thành 0,8 của giá trị ban đầu, cộng với 0,1 của mỗi lân cận của nó:

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

Lưu ý cách các yếu tố nhân, hoặc trọng số, cộng với một. Vì vậy, nếu tín hiệu khá ổn định, việc làm mịn sẽ không thay đổi nhiều. Nhưng nếu tín hiệu có sự thay đổi giật đột ngột, thì sự đóng góp từ các nước láng giềng sẽ giúp loại bỏ tiếng ồn đó một chút.

Các trọng số bạn sử dụng trong hàm tính toán lại này có thể được gọi là hạt nhân . Hàm Gaussian một chiều hoặc bất kỳ hạt nhân cơ bản nào khác sẽ làm trong trường hợp của bạn.

Một ví dụ tuyệt vời về một loại làm mịn đặc biệt:

Trên: tín hiệu không
phẳng Dưới: tín hiệu được làm mịn

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

Ví dụ về một vài hạt nhân:

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


Vì vậy, đây là một trung bình di chuyển có trọng số? Đây có phải là có kích thước cửa sổ là 3? Còn phần tử thứ 1 và phần cuối thì sao? Và làm thế nào điều này sẽ được sửa đổi nếu tôi có một mảng gồm 128 phần tử và tôi muốn sử dụng một cửa sổ gồm 16 hoặc 32 phần tử?

@ user13267: Có, bạn có thể nói hạt nhân làm mịn là trung bình di chuyển có trọng số. Nếu bạn sử dụng hạt nhân thống nhất (xem hình ảnh thứ hai), thì đó chỉ là một đường trung bình đơn giản. Bạn nói đúng về kích thước cửa sổ. Để xử lý các cạnh, có ba cách tiếp cận cơ bản: 1) không đệm dữ liệu của bạn, 2) lặp lại giá trị cuối cùng, 3) phản ánh tín hiệu. Trong mọi trường hợp, bạn tạo một số dữ liệu giả vờ để hạt nhân của bạn không rơi vào hư vô.
Junuxx

sẽ không có phần đệm được tính là rơi vào hư vô? Vào cuối quá trình trung bình di chuyển, tập dữ liệu "trung bình" mới của tôi sẽ có cùng số lượng dữ liệu như ban đầu không? sau đó nếu tôi không đệm nó ở đầu hoặc cuối, hoặc lặp lại dữ liệu cuối cùng, liệu nó có làm sai lệch giá trị trung bình ở các cạnh của mảng không? Và làm thế nào để phản ánh tín hiệu giúp về số lượng các điều khoản dữ liệu? Có bất kỳ hướng dẫn đơn giản nào cho việc này ở bất cứ đâu cho thấy quá trình diễn ra như thế nào, giả sử, 32 điểm dữ liệu và kích thước cửa sổ là 4 hoặc 5?

2
Nếu bạn muốn tập dữ liệu được làm mịn của bạn có cùng độ dài với tập dữ liệu gốc, bạn phải "tạo" dữ liệu ở các điểm cuối. Bất kỳ lựa chọn nào bạn thực hiện cho cách tạo dữ liệu đó sẽ thiên vị trung bình theo một cách nào đó. Xử lý dữ liệu ngoài giới hạn như một tấm gương của bộ dữ liệu thực (nghĩa là giả sử rằng mẫu N + 1 giống với N-1, N + 2 = N-2, v.v.) sẽ giữ lại các đặc tính phổ tần số của phần cuối của tín hiệu, trong khi giả sử lặp lại 0 hoặc không khác 0 sẽ làm cho có vẻ như tất cả các tần số đang tắt ở cuối.
Russell Borogove

8

Ngoài câu trả lời hay của Junuxx tôi muốn bỏ một vài ghi chú.

  • Làm mịn có liên quan đến lọc (không may là bài viết Wikipedia khá mơ hồ ) - bạn nên chọn mượt mà hơn dựa trên các thuộc tính của nó.

  • Một trong những mục yêu thích của tôi là bộ lọc trung vị . Đây là một ví dụ về bộ lọc phi tuyến tính. Nó có một số tính chất thú vị, nó bảo tồn "các cạnh" và khá mạnh mẽ dưới tiếng ồn lớn.

  • Nếu bạn có một mô hình thì tín hiệu của bạn hoạt động như thế nào thì bộ lọc Kalman đáng để xem. Sự làm mịn của nó thực sự là một ước tính khả năng tối đa của tín hiệu Bayes dựa trên các quan sát.


4

Làm mịn ngụ ý sử dụng thông tin từ các mẫu lân cận để thay đổi mối quan hệ giữa các mẫu lân cận. Đối với các vectơ hữu hạn, ở cuối, không có thông tin lân cận về một phía. Lựa chọn của bạn là: không làm mịn / lọc các đầu, chấp nhận một vectơ được làm mịn ngắn hơn, tạo dữ liệu và làm mịn với điều đó (phụ thuộc vào độ chính xác / hữu ích của bất kỳ dự đoán nào từ đầu) hoặc có thể sử dụng các hạt làm mịn không đối xứng khác nhau tại kết thúc (cuối cùng rút ngắn nội dung thông tin trong tín hiệu).


3

Bạn có thể tìm thấy toàn bộ mã MATLAB để làm mịn bộ lọc trung bình di chuyển cho các độ dài vòi khác nhau. www.gaussianwaves.com/2010/11/moving-alusive-filter-ma-filter-2/


1

Những người khác đã đề cập đến cách bạn làm mịn, tôi muốn đề cập đến lý do tại sao làm mịn.

Nếu bạn đặt chồng lên tín hiệu của mình một cách chính xác, nó sẽ thay đổi tương đối ít từ mẫu này sang mẫu tiếp theo (mẫu = mốc thời gian, pixel, v.v.) và nó được dự kiến ​​sẽ có vẻ ngoài mượt mà tổng thể. Nói cách khác, tín hiệu của bạn chứa một vài tần số cao, tức là các thành phần tín hiệu thay đổi ở tốc độ tương tự như tốc độ lấy mẫu của bạn.

Tuy nhiên, các phép đo thường bị hỏng bởi tiếng ồn. Trong một xấp xỉ đầu tiên, chúng ta thường xem xét nhiễu theo phân phối Gaussian với giá trị trung bình bằng 0 và độ lệch chuẩn nhất định được thêm vào phía trên tín hiệu.

Để giảm nhiễu trong tín hiệu của chúng tôi, chúng tôi thường đưa ra bốn giả định sau: nhiễu là ngẫu nhiên, không tương quan giữa các mẫu, có giá trị trung bình bằng 0 và tín hiệu được ghép quá mức. Với các giả định này, chúng ta có thể sử dụng bộ lọc trung bình trượt.

Hãy xem xét, ví dụ, ba mẫu liên tiếp. Do tín hiệu bị quá mức, tín hiệu cơ bản có thể được coi là thay đổi tuyến tính, điều đó có nghĩa là trung bình của tín hiệu trên ba mẫu sẽ bằng tín hiệu thực ở mẫu giữa. Ngược lại, tiếng ồn có nghĩa là không và không tương quan, có nghĩa là trung bình của nó có xu hướng bằng không. Do đó, chúng ta có thể áp dụng bộ lọc trung bình trượt ba mẫu, trong đó chúng ta thay thế từng mẫu bằng mức trung bình giữa chính nó và hai hàng xóm lân cận.

Tất nhiên, chúng ta tạo ra cửa sổ càng lớn thì nhiễu sẽ càng trung bình bằng 0, nhưng giả định của chúng ta về tính tuyến tính của tín hiệu thực sự càng ít. Vì vậy, chúng ta phải đánh đổi. Một cách để cố gắng đạt được kết quả tốt nhất của cả hai thế giới là sử dụng mức trung bình có trọng số, trong đó chúng tôi đưa ra các mẫu có trọng lượng nhỏ hơn, để chúng tôi trung bình hiệu ứng nhiễu từ các phạm vi lớn hơn, trong khi không làm tăng tín hiệu thật sự khi nó lệch khỏi tuyến tính của chúng tôi giả thiết.

Làm thế nào bạn nên đặt trọng lượng phụ thuộc vào nhiễu, tín hiệu và hiệu quả tính toán, và tất nhiên, sự đánh đổi giữa việc loại bỏ nhiễu và cắt tín hiệu.

Lưu ý rằng đã có rất nhiều công việc được thực hiện trong vài năm qua để cho phép chúng tôi thư giãn một số trong bốn giả định, ví dụ như bằng cách thiết kế các sơ đồ làm mịn với các cửa sổ lọc thay đổi (khuếch tán dị hướng) hoặc các sơ đồ không thực sự sử dụng cửa sổ ở tất cả (phương tiện không nhắm mục tiêu).

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.