Чи сигнал високого пропускання такий же, як сигнал мінус низькопропущений сигнал?


14

Моє запитання полягає в тому, якщо я хочу високошвидкісний сигнал, чи він такий же, як низькопрохідний сигнал і віднімання його від сигналу? Це теоретично те саме? Це практично те саме?

Я шукав (і в Google, і в dsp.stackexchange) і знаходжу суперечливі відповіді. Я грав зі сигналом і ось результати. Я не можу багато чого в цьому зрозуміти. Ось сигнал із частотою вибірки один раз на чотири секунди. Я розробив цифровий фільтр низьких частот з діапазоном переходу від 0,8 мГц до 1 мГц і фільтрував сигнал. Потім я також сконструював високочастотний фільтр з тією ж перехідною смугою і відфільтрував сигнал. Ось результати.

введіть тут опис зображення

На цьому першому малюнку зображено вихідний сигнал чорного кольору та низькопрохідний сигнал синього кольору. Вони майже один на одного, але не зовсім. Червона крива - це сигнал мінус високочастотний сигнал, який знаходиться вгорі сигналу.

введіть тут опис зображення

Це друге зображення - це лише перше збільшення, яке показує, що відбувається. Тут ми бачимо, що однозначно два не однакові. Моє питання чому? Це щось про те, як я реалізував два фільтри, чи це щось теоретично незалежне від моєї реалізації? Я не знаю багато про розробку фільтрів, але я знаю, що це, як відомо, не інтуїтивно зрозуміло. Ось повний код MATLAB для відтворення всього цього. Я використовую команду filtfilt для усунення затримок фаз. Але тут слід зазначити ще одне, що фільтри не нормалізуються. Коли я отримую суму (Hd.Numerator), я отримую 0,9930 за низький та 0,007 за високий прохід. Я не бачу, як це пояснити. Чи слід якось масштабувати вихід, оскільки коефіцієнти не складаються до одиниці? Чи може це масштабування мати щось спільне з цим?

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
Ваше замовлення фільтрів надзвичайно велике. Цілком ймовірно, що у процесі проектування у вас виникнуть чисельні проблеми. Перевірте розроблені фільтри, обчисливши та накресливши величину FFT. Далі дивіться мою відповідь нижче про те, як використовувати віднімання для створення високочастотного фільтра з фільтра низьких частот.
Метт Л.

Ви можете зробити сигнал високої частоти таким чином, але порядок відкоту завжди в першому порядку: sound.westhost.com/articles/derived-xovers.htm Якщо ви спочатку затримаєте сигнал груповою затримкою LPF перед відніманням , Ви можете отримати 3-е замовлення
ендоліт

Відповіді:


8

Як правило, ви не можете просто відняти низькочастотну відфільтровану версію сигналу від початкової, щоб отримати високопрохідний відфільтрований сигнал. Причина така. Те, що ви насправді робите, це впровадити систему з частотною характеристикою

(1)Н(ω)=1-НLП(ω)

НLП(ω)НLП(ω)

(2)|Н(ω)|=|1-|НLП(ω)||

але це, як правило, не так, коли (1) задоволено.

НLП(ω)

НLП(ω)=|НLП(ω)|еjϕ(ω)

ϕ(ω)

(3)ННП(ω)=еjϕ(ω)-НLП(ω)=еjϕ(ω)(1-|НLП(ω)|)

еjϕ(ω) перед тим, як відняти з нього низькочастотну відфільтровану версію сигналу.

На практиці це дуже просто, якщо низькочастотний фільтр має лінійний фазовий відгук, оскільки тоді термін фази задається значенням

(4)еjϕ(ω)=е-jωτ

τнτ=н/2

Отже, що вам потрібно зробити, це:

  • розробити лінійний фазовий фільтр низьких частот FIR з рівним порядком
  • filter()хLП[н]
  • τ=н/2хг[н]
  • хНП[н]=хг[н]-хLП[н]

Ось дуже проста ілюстрація в Matlab / Octave

h_lp = fir1 (100, .3); % низькопрохідний дизайн
h_hp = [нулі (50,1); 1; нулі (50,1)] - h_lp; % високопрохідного проектування відніманням
[H_lp, w] = freqz (h_lp, 1,1024);
[H_hp, w] = freqz (h_hp, 1,1024);
ділянка (w / 2 / pi, 20 * log10 (abs (H_lp)), w / 2 / pi, 20 * log10 (abs (H_hp)))
сітка, вісь ([0, .5, -100,5])

введіть тут опис зображення

Редагувати:

filtfiltfiltfiltн=100), ви отримуєте те, що ви очікували. На малюнку нижче ви бачите розділ даних синім кольором, вихід фільтрів низьких частот зеленим кольором та результат віднімання виходу фільтра високих частот з вихідних даних червоним кольором. Зелені та червоні криві практично однакові.

x = load ('data.txt'); % даних, які підлягають фільтруванню
h_lp = fir1 (100, .3); % Імпульсної реакції LP
h_hp = fir1 (100, .3, 'високий'); % Імпульсної реакції HP
y = filtfilt (h_lp, 1, x); % застосувати фільтр низьких частот
yh = filtfilt (h_hp, 1, x); % застосувати фільтр високих частот
yd = x - yh; % низький прохід за різницею з високочастотним фільтром
n = 1: довжина (x);
сюжет (n, x, n, y, 'g.', n, yd, 'r')
вісь ([3500,4000,140,150])

введіть тут опис зображення


Якщо ви намагаєтесь сконструювати фільтр високих частот таким чином, вам слід бути обережними зі специфікаціями фільтра низьких частот. Ослаблення смуги зупинки у фільтрі низьких частот зазвичай є досить високим для досягнення малого пульсації смуги пропускання у високому проході, але пульсація смуги пропускання у фільтрі LP часто не забезпечує достатнього ослаблення смуги зупинки у фільтрі HP.
Девід

Дякуємо за детальну відповідь. Це прояснило кілька речей.
Фіксована точка

3

Щодо масштабування:

10

На додаток до відмінної відповіді Метта Л. можна лише зазначити, що те, що він використовує, називається допоміжними фільтрами за величиною , що є загальним випадком для лінійнофазних фільтрів FIR, тобто

|НLП|+|ННП|=1

Під час створення фільтрів з двох паралельних секцій всебічного обходу та додавання / віднімання виходів фільтри низьких частот / великі частоти замість цього будуть додатковою потужністю , тобто

|НLП|2+|ННП|2=1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.