Là tín hiệu truyền qua cao giống như tín hiệu trừ đi tín hiệu truyền qua thấp?


14

Câu hỏi của tôi là, nếu tôi muốn truyền tín hiệu cao, nó có giống như truyền tín hiệu thấp và trừ tín hiệu khỏi tín hiệu không? Về mặt lý thuyết có giống nhau không? Có thực tế giống nhau không?

Tôi đã tìm kiếm (cả trên google và dsp.stackexchange) và tôi tìm thấy câu trả lời mâu thuẫn. Tôi đã chơi với một tín hiệu và đây là kết quả. Tôi không thể hiểu nhiều về nó. Đây là tín hiệu với tần suất lấy mẫu cứ sau bốn giây. Tôi đã thiết kế bộ lọc thông thấp kỹ thuật số với dải chuyển tiếp từ 0,8 mHz đến 1 mHz và lọc tín hiệu. Sau đó tôi cũng thiết kế một bộ lọc thông cao có cùng dải chuyển tiếp và lọc tín hiệu. Đây là kết quả.

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

Bức ảnh đầu tiên này cho thấy tín hiệu gốc có màu đen và tín hiệu truyền thấp màu xanh lam. Họ gần như nằm trên nhau nhưng không hoàn toàn. Đường cong màu đỏ là tín hiệu trừ đi tín hiệu truyền cao nằm ngay trên đầu tín hiệu.

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

Hình ảnh thứ hai này chỉ là hình ảnh đầu tiên được phóng to để hiển thị những gì đang xảy ra. Ở đây chúng ta thấy rằng rõ ràng hai không giống nhau. Câu hỏi của tôi là tại sao? Đây có phải là một cái gì đó về cách tôi đã thực hiện hai bộ lọc hay nó là một cái gì đó độc lập về mặt lý thuyết với việc thực hiện của tôi? Tôi không biết nhiều về thiết kế bộ lọc nhưng tôi biết rằng nó nổi tiếng là phản trực giác. Dưới đây là mã MATLAB đầy đủ để tái tạo tất cả điều này. Tôi đang sử dụng lệnh lọcfilt để loại bỏ sự chậm trễ pha. Nhưng một điều khác cần chỉ ra ở đây là các bộ lọc không được chuẩn hóa. Khi tôi tính tổng (Hd.Numerator), tôi nhận được 0,9930 cho đường chuyền thấp và 0,007 cho đường chuyền cao. Tôi không thấy làm thế nào để giải thích cho điều này. Có nên thu nhỏ đầu ra bằng cách nào đó bởi vì các hệ số không cộng với một? Điều này có thể có một cái gì đó để làm với điều này?

close all
clear all
clc

data = dlmread('data.txt');

Fs    = 0.25;    % Sampling Frequency
N     = 2674;    % Order
Fpass = 0.8/1000;  % Passband Frequency
Fstop = 1/1000;   % Stopband Frequency
Wpass = 1;       % Passband Weight
Wstop = 1;       % Stopband Weight
dens  = 20;      % Density Factor

% Calculate the coefficients using the FIRPM function.
b  = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], {dens});
Hd = dsp.FIRFilter('Numerator', b);
sum(Hd.Numerator)
datalowpassed = filtfilt(Hd.Numerator,1,data);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Fs    = 0.25;    % Sampling Frequency
N     = 2674;    % Order
Fstop = 0.8/1000;  % Stopband Frequency
Fpass = 1/1000;   % Passband Frequency
Wstop = 1;       % Stopband Weight
Wpass = 1;       % Passband Weight
dens  = 20;      % Density Factor

% Calculate the coefficients using the FIRPM function.
b  = firpm(N, [0 Fstop Fpass Fs/2]/(Fs/2), [0 0 1 1], [Wstop Wpass], {dens});
Hd = dsp.FIRFilter('Numerator', b);
sum(Hd.Numerator)
datahighpassed = filtfilt(Hd.Numerator,1,data);

figure
subplot(2,1,1)
plot(data,'-ko')
hold on
plot(datalowpassed,'-bo')
plot(data-datahighpassed,'-ro')
legend('Original Signal','Low-Passed','Signal - High-Passed')
subplot(2,1,2)
plot(data-datalowpassed,'-bo')
hold on
plot(datahighpassed,'-ro')
legend('Signal - Low-Passed','High-Passed')

1
Thứ tự bộ lọc của bạn là rất cao. Rất có thể là bạn gặp phải các vấn đề về số trong quá trình thiết kế. Kiểm tra các bộ lọc được thiết kế bằng cách tính toán và vẽ đồ thị cường độ của FFT. Hơn nữa, hãy xem câu trả lời của tôi dưới đây để biết cách sử dụng phép trừ để tạo bộ lọc thông cao từ bộ lọc thông thấp.
Matt L.

Bạn có thể tạo tín hiệu đường cao tốc theo cách này, nhưng thứ tự của lần tắt luôn luôn là thứ tự đầu tiên: sound.westhost.com/articles/derured-xovers.htmlm Nếu trước tiên bạn trì hoãn tín hiệu bằng độ trễ nhóm của LPF trước khi trừ , bạn có thể nhận 3rd trật tự
endolith

Câu trả lời:


8

Nói chung, bạn không thể chỉ cần trừ một phiên bản tín hiệu được lọc thông thấp từ tín hiệu gốc để thu được tín hiệu được lọc thông cao. Lý do là như sau. Những gì bạn đang làm là thực hiện một hệ thống có đáp ứng tần số

(1)H(ω)= =1-HLP(ω)

HLP(ω)HLP(ω)

(2)|H(ω)|= =|1-|HLP(ω)||

nhưng điều này thường không phải là trường hợp khi (1) hài lòng.

HLP(ω)

HLP(ω)= =|HLP(ω)|ejφ(ω)

φ(ω)

(3)HHP(ω)= =ejφ(ω)-HLP(ω)= =ejφ(ω)(1-|HLP(ω)|)

ejφ(ω)

Trong thực tế, điều này rất đơn giản nếu bộ lọc thông thấp có đáp ứng pha tuyến tính , bởi vì sau đó thuật ngữ pha được đưa ra bởi

(4)ejφ(ω)= =e-jωτ

τnτ= =n/2

Vì vậy, những gì bạn phải làm là như sau:

  • thiết kế bộ lọc thông thấp FIR pha tuyến tính với thứ tự chẵn
  • filter()xLP[n]
  • τ= =n/2xd[n]
  • xHP[n]= =xd[n]-xLP[n]

Dưới đây là một minh họa rất đơn giản trong Matlab / Octave

h_lp = linh1 (100, .3); % thiết kế thông thấp
h_hp = [số không (50,1); 1; số không (50,1)] - h_lp; % thiết kế vượt qua bằng phép trừ
[H_lp, w] = freqz (h_lp, 1,1024);
[H_hp, w] = freqz (h_hp, 1,1024);
lô (w / 2 / pi, 20 * log10 (abs (H_lp)), w / 2 / pi, 20 * log10 (abs (H_hp)))
lưới, trục ([0, .5, -100,5])

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

BIÊN TẬP:

filtfiltfiltfiltn= =100), bạn nhận được những gì bạn mong đợi. Trong hình bên dưới, bạn thấy một phần dữ liệu có màu xanh lam, đầu ra của bộ lọc thông thấp có màu xanh lục và kết quả của phép trừ đầu ra của bộ lọc thông cao từ dữ liệu gốc có màu đỏ. Các đường cong màu xanh lá cây và đỏ hầu như giống hệt nhau.

x = tải ('data.txt'); % dữ liệu được lọc
h_lp = linh1 (100, .3); % LP đáp ứng xung
h_hp = Fir1 (100, .3, 'cao'); % HP đáp ứng xung
y = bộ lọc (h_lp, 1, x); % áp dụng bộ lọc thông thấp
yh = bộ lọc (h_hp, 1, x); % áp dụng bộ lọc thông cao
yd = x - yh; % vượt qua chênh lệch với bộ lọc thông cao
n = 1: chiều dài (x);
cốt truyện (n, x, n, y, 'g.', n, yd, 'r')
trục ([3500,4000,140,150])

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


Nếu bạn đang cố gắng thiết kế bộ lọc thông cao theo cách này, bạn phải cẩn thận với các thông số kỹ thuật của bộ lọc thông thấp. Độ suy giảm dải dừng trong bộ lọc thông thấp thường đủ cao để đạt được độ gợn của dải thông nhỏ ở đường cao, nhưng độ gợn của dải thông trong bộ lọc LP thường không đạt được mức suy giảm dải dừng trong bộ lọc HP.
David

Cảm ơn đã phản ứng chi tiết. Nó làm sáng tỏ một vài điều.
Điểm cố định

3

Về tỉ lệ:

10

Ngoài câu trả lời xuất sắc của Matt L., người ta có thể chỉ ra rằng những gì anh ta đang sử dụng được gọi là các bộ lọc bổ sung cường độ , là trường hợp phổ biến cho các bộ lọc FIR pha tuyến tính, nghĩa là,

|HLP|+|HHP|= =1

Khi tạo bộ lọc từ hai phần allpass song song và thêm / bớt các đầu ra, bộ lọc lowpass / highpass thay vào đó sẽ là phần bổ sung năng lượng , nghĩa là

|HLP|2+|HHP|2= =1

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.