2

Я хочу имитировать интерполятор в MATLAB с использованием upsampling, за которым следует фильтр нижних частот. Сначала у меня был опробованный мой сигнал, введя 0.Применение фильтра нижних частот

Upsampled signal

Теперь я хочу, чтобы применить фильтр нижних частот для интерполяции. Я разработал следующий фильтр:

Filter design

Фильтр точно 1/8 от нормированной частоты, потому что мне нужно декодируют позже. (Это специфическая Excersise для повышения частоты дискретизации Interpolate и декодирует в этом порядке.)

Однако, если применить этот фильтр, чтобы мои данные с помощью функции генерируется filter(myfilter, data) следующий сигнал: filtered signal

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

Может ли кто-нибудь дать мне указание, что может быть неправильным? Я использую следующий код:

clear all; close all; 

% Settings parameters 
fs=10e6; 
N=10; 
c=3/fs; 
k=3; 
M=8; 

% Settings time and signal 
t=0:fs^-1:N*fs^-1; 
x=exp(-(t.^2)./(2.*c.^2)); % Gaussian signal 

% Upsampling 
tu=0:(fs*M)^-1:N*fs^-1; 
xu=zeros(1,size(tu,2)); 
sample_range=1:M:size(xu,2); 
for i=1:size(x,2); 
    xu(sample_range(i))=x(i); 
end; 

%% Direct Method 

xf=filter(lpf5mhz,xu); 

ответ

3

Как было предложено hotpaw2's answer, фильтру нижних частот требуется некоторое время для увеличения до значений входного сигнала. Это особенно заметно при сигнале с такими резкими шагами, как ваш (сигнал неявно включает в себя большой шаг в первом примере, поскольку предыдущие образцы считаются нулями по вызову filter). Кроме того, с вашими параметрами дизайна задержка фильтра больше, чем максимальный временной диапазон, показанный на вашем графике вывода (1e-6), и, соответственно, выход остается очень малым для показанного диапазона времени.

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

enter image description here

Учитывая сигнал с более гладким переход, такие как гауссов импульс, который был достаточно временной задержкой:

delay = 10/fs; 
x=exp(-((t-delay).^2)./(2.*c.^2)); % Gaussian signal 

фильтр может лучше рампу до значения сигнала:

enter image description here

Следующая вещь, которую вы можете заметить, что отфильтрованный выход имеет 1/M амплитуды как нефильтрованного сигнала.Для того, чтобы получить интерполированный сигнал с тем же амплитудами, как нефильтрованный сигнал вам придется масштабировать выходной фильтр с:

xf=M*filter(lpf5mhz,1,xu); 

enter image description here

Наконец, сигнал задерживается на операции фильтрации. Таким образом, для целей сравнения вы можете график время сдвинуты версии:

filter_delay = (1/(M*fs))*(length(lpf5mhz)-1)/2; 
plot(tu-(1/(M*fs))*(length(b)-1)/2, xf); 

enter image description here

1

фильтр низких частот только помогает интерполировать сигналы, которые намного больше, чем длина импульсного отклика фильтра нижних частот. В противном случае на выходе может преобладать переходный режим фильтра.

Смежные вопросы