Фильтр нижних частот плохо интерполирует

У меня вопрос по фильтру нижних частот. Я хочу интерполировать и повышать дискретизацию сигнала, однако, когда я использую фильтр нижних частот, он лишь частично интерполирует образцы:

Интерполяция

Код моего фильтра выглядит так:

function Hd = lpf5mhz3
%LPF5MHZ3 Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 8.6 and the Signal Processing Toolbox 7.1.
% Generated on: 27-Nov-2015 14:28:27

% Equiripple Lowpass filter designed using the FIRPM function.

% All frequency values are in Hz.
Fs = 10000000;  % Sampling Frequency

N     = 20;       % Order
Fpass = 1200000;  % Passband Frequency
Fstop = 1250000;  % 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 = dfilt.dffir(b);

% [EOF]

Ожидаемый результат можно увидеть в моем предыдущем вопросе: Применение фильтра нижних частот

Кто-нибудь знает, как это решить?


person Glenn    schedule 27.11.2015    source источник


Ответы (1)


Давайте сначала посмотрим на ваш нефильтрованный сигнал с повышенной частотой дискретизации xu (из вашего предыдущего вопроса) в частотной области, чтобы лучше понять, что происходит. :

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

Как видите, есть 8 повторений исходного низкочастотного сигнала (часто называемых изображениями) в точках Fs/8, 2*Fs/8, ..., 7*Fs/8. Эти изображения включают в себя как положительные, так и отрицательные частотные компоненты, поэтому изображение вокруг Fs/8 простирается примерно от Fs/16 до 3*Fs/16.

Соответственно, расчетная частота среза вашего фильтра должна быть около Fs/(2*M) = Fs/16 или

Fpass = 1200000/2;  % Passband Frequency
Fstop = 1250000/2;  % Stopband Frequency

Результирующая амплитудно-частотная характеристика фильтра, разработанного с использованием:

N  = 20;
b  = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], ...
           {dens});    

можно увидеть с помощью freqz(b,1):

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

Как вы могли заметить, фильтр обеспечивает очень небольшое затухание в полосе задерживания. Таким образом, изображения, о которых я упоминал ранее, по-прежнему будут вносить довольно значительный вклад в отфильтрованный вывод. Увеличение количества коэффициентов немного поможет, но вы, вероятно, обнаружите, что вам нужно много коэффициентов (порядка 500-1000), чтобы получить приличное затухание в полосе задерживания и резкий переход группа.

Для сравнения, коэффициенты фильтра, созданные с помощью fir1(60, 0.125) (используемые в моем предыдущем ответе), обеспечивают гораздо лучшее затухание там, где изображения являются самый сильный в частотной области, но также имеет гораздо более широкую полосу перехода и использует больше коэффициентов фильтра. Результирующий отфильтрованный сигнал по частоте имеет вид:

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

Таким образом, вопрос сводится к компромиссу между количеством коэффициентов (которые влияют на вычислительные требования и задержку фильтра), шириной полосы перехода и затуханием в полосе задерживания. Чтобы правильно ответить, нам нужно знать, каковы требования вашего конкретного приложения.

Если вы пытаетесь интерполировать сигналы с той же полосой пропускания, что и половинный гауссовский импульс, который вы использовали в качестве входных данных (таким образом, не требуется столь резкой полосы перехода, как указанные вами 50000 Гц), и количество коэффициентов является основной задачей, вы можете найти следующий план работает немного лучше (хотя он все же будет иметь некоторые значительные артефакты) для того же количества коэффициентов (т.е. 21):

Fpass =  550000/2;
Fstop = 1250000/2;
Wpass = 1;
Wstop = 22;
N  = 20;
b  = firpm(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop], ...
           {dens});    

Конечно, увеличение количества коэффициентов (а также ослабление требований к полосе перехода, как это сделано выше) еще больше уменьшит ошибку интерполяционного фильтра. В качестве альтернативы, использование многоступенчатых фильтров (например, повышающая дискретизация в 2 раза, затем фильтрация, три раза в каскаде) также может уменьшить ошибку интерполяции с тем же общим числом коэффициентов и пропускной способностью перехода.

person SleuthEye    schedule 04.12.2015