2011-08-09 35 views
12

Có một số quy trình có thể xác định/loại bỏ một DC offset không xác định từ tín hiệu thời gian rời rạc không định kỳ không?Xóa DC Offset không xác định khỏi tín hiệu thời gian rời rạc không định kỳ

Tín hiệu được đề cập có tỷ lệ mẫu là 25Hz và có âm hưởng lợi từ 0,25 đến 3 Hz.

Tôi đã thử sử dụng bộ lọc highpass kết quả hỗn hợp, trước tiên tôi đã sử dụng trình theo dõi thứ 10 với Fc = 0Hz, điều này đã làm tốt việc loại bỏ bù trừ nhưng nó bị suy yếu nghiêm trọng. tiếp theo, tôi đã sử dụng một trật tự 168 với một stopband ở 0Hz và passband ở 0.25Hz, sự dịch chuyển pha quá nghiêm trọng và hình dạng tín hiệu quá méo mó, biến dạng có thể bị giảm nếu băng thông bị giảm xuống 0.1Hz nhưng sẽ chỉ tăng thêm sự dịch chuyển giai đoạn mà tôi cần phải giữ ở mức tối thiểu.

Trước và sau khi áp dụng x - LPF (x), theo đề nghị của Paul R

enter image description here

Trả lời

10

Tôi khuyên bạn nên sử dụng bộ lọc notch ở DC và sử dụng filtfilt để làm cho nó không pha.

a = [1 , -0.98]; b = [1,-1]; 

y = filtfilt(b,a,x); 

Giá trị thứ hai gần hơn là a được giảm xuống còn -1 thì độ hẹp của bạn càng thấp.

+0

Tôi cần thực hiện một số thử nghiệm khác, nhưng điều này dường như cho kết quả thực sự tốt đẹp! – volting

+0

Sử dụng 'freqz (xcorr (b, b), xcorr (a, a))' để kiểm tra đáp ứng tần số của bộ lọc bạn. 'Xcorr' là các đối tác Z-transform của 'filtfilt'. Hãy thử các giá trị khác nhau của 'a (2)' để xem độ rộng/hẹp của bạn. – Phonon

+1

'filtfilt' không cung cấp pha tuyến tính, nhưng không pha, có nghĩa là bất kỳ độ trễ nào được bộ lọc đưa ra là 'bù lại', vì vậy đầu ra không bị trì hoãn (so với đầu vào). Giai đoạn tuyến tính là cái gì khác. –

3

Thay vì thực hiện một bộ lọc thông cao trực tiếp (có thể được khá khó khăn đối với tần số rất thấp - bạn kết thúc với một số lượng lớn các hệ số và các vấn đề khác nhau với độ ổn định và gợn sóng passband…), bạn có thể muốn xem xét việc thực hiện một bộ lọc thông thấp sẽ cung cấp cho bạn ước tính giá trị bù DC. , tức là thay vì:

y = HPF(x) 

làm điều này:

y = x - LPF(x) 

Các bộ lọc thông thấp có thể có lẽ chỉ được khá một bộ lọc đơn giản với một số lượng tương đối nhỏ các cụm. Ưu điểm lớn của việc thực hiện này là các thành phần tần số cao hơn của bạn không nên có bất kỳ đồ tạo tác không mong muốn nào do pha, gợn, vv, vì tất cả những gì bạn đang làm là trừ đi một giá trị DC gần như cố định từ các mẫu. Một nhược điểm tiềm năng duy nhất là nếu bù DC lớn, bạn có thể có thời gian giải quyết ban đầu khá lâu trước khi ước tính độ lệch DC là chính xác (mặc dù điều này cũng đúng với bất kỳ việc thực hiện nào khác chẳng hạn như một đường truyền cao trực tiếp. Page 5 bộ lọc tất nhiên). Nếu bạn có bất kỳ một thông tin ưu tiên nào về giá trị bù trừ (ví dụ: nếu nó không thay đổi nhiều từ khi chạy để chạy và bạn biết giá trị từ lần chạy trước) thì bạn có thể sử dụng để tối ưu hóa thời gian giải quyết, bằng cách khởi tạo biến trạng thái LPF thành một giá trị phù hợp thay vì 0.

+0

Tôi đã thử sử dụng LPF như bạn đã đề xuất nhưng không có hiệu ứng mong muốn, tôi đã thử nghiệm hàng chục LPF khác nhau, tốt nhất là một guassian dài hạn với Fc = 0.0001Hz và Alpha = 1.1. Vấn đề là tần số hài hòa của lãi suất thấp hơn bị bóp méo. Iv thêm một biểu đồ trước và sau cho câu hỏi của tôi – volting

+0

Bạn có thể vẽ đầu ra của LPF ngoài tín hiệu đầu vào và đầu ra không? Nó sẽ là thú vị để xem khi nào và bằng bao nhiêu nó thay đổi. Tôi vẫn nghĩ rằng ý tưởng cơ bản là âm thanh nhưng việc nhận được bộ lọc ngay cũng có thể phức tạp - tôi muốn có xu hướng thử thiết kế nó bằng tay. –

+0

Tôi đã thêm các ô. Như bạn có thể thấy LPF nắm bắt hầu hết tín hiệu tần số thấp mà tôi không muốn lọc ra. – volting

9

Giá trị DC có nghĩa là một số giá trị không đổi được thêm vào tín hiệu (tên bắt nguồn từ việc thêm điện áp DC vào tín hiệu AC tương tự) . Nếu thành phần DC thực sự không đổi (và không thay đổi thực sự chậm), thì bạn không phải thiết kế một số bộ lọc thông cao (và có khả năng không ổn định) cao - bạn có thể trừ trung bình tín hiệu của mình khỏi tín hiệu - đó là, tất nhiên, một bộ lọc cao vượt qua là tốt (trung bình là một loại của một vượt qua thấp, và '1 trừ trung bình' là apss cao) --- nhưng rất đơn giản. Mặt khác, nếu bạn có lý do để tin rằng thành phần DC không thực sự là một DC, mà đúng hơn là một AC có tần số rất thấp, thì bạn nên phân đoạn trung bình của tín hiệu của bạn chứ không phải tín hiệu nói chung, giống như sử dụng bộ lọc low-pass với đáp ứng xung ngắn hơn độ dài của tín hiệu. Trong trường hợp này, bạn phải thực hiện một số giả định về thành phần "DC".

+0

Vấn đề là tín hiệu bao gồm bù DC không đổi và hai thành phần tín hiệu quan tâm, một thành phần tần số thấp và một thành phần tần số cao được đặt chồng lên nhau trước đây. Cố gắng lọc DC làm biến dạng thành phần tần số thấp. – volting

+0

Nếu bạn trung bình trên nhiều chu kỳ của tín hiệu tần số thấp, đóng góp của nó vào mức trung bình là 0 vì các mẫu dương và âm hủy nhau, do đó không xảy ra biến dạng. Bạn có thể tải lên một tín hiệu làm ví dụ không? Nó sẽ giúp trả lời câu hỏi của bạn. –

+0

Tùy thuộc vào độ lệch tín hiệu tần số thấp, cường độ có thể không bao giờ âm và không theo cách định kỳ để đóng góp của nó có thể không bằng 0. Iv thêm một đồ thị vào câu hỏi của tôi để bạn có thể có được một ý tưởng về bản chất của tín hiệu. – volting

1

Như những người khác đã nói, để loại bỏ bù trừ DC, bạn có thể chỉ cần trừ giá trị trung bình.Tín hiệu của bạn không cần phải định kỳ, nhưng nó cần phải đủ dài để có được ước tính tốt về thành phần DC.

Nếu bạn vẫn muốn sử dụng phương pháp lọc, bạn có thể loại bỏ biến dạng nặng do trễ pha bằng cách sử dụng filtfilt. Chức năng này lọc bộ đếm thời gian của bạn một lần theo hướng chuyển tiếp và sau đó một lần theo hướng ngược lại, để biến dạng pha hủy bỏ.

1

Bạn có thể thiết kế bộ lọc FIR đối xứng làm bộ lọc thông thấp ước tính DC và sau đó trừ đầu ra khỏi tín hiệu đầu vào của bạn. Bộ lọc này có độ trễ nhóm không đổi.

Các vấn đề liên quan