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

Все что касается фильтрации
kaa
Сообщения: 40
Зарегистрирован: 17 мар 2019, 20:03

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

Сообщение kaa »

Добрый день.

Задача интерполировать сигнал, повысив частоту дискретизации в 2 раза.
Матлаб имеет функцию dsp.FIRHalfbandInterpolator.
Используем ее.

Код: Выделить всё

clear; close all; clc;

%% Алгоритм 

Fs = 6400;
order = 100;

halfbandInterpolator = dsp.FIRHalfbandInterpolator('SampleRate',Fs, ...
    'Specification','Filter order and transition width', ...
    'FilterOrder',order,'TransitionWidth', Fs/4);

fvtool(halfbandInterpolator,'Fs',2*Fs,'Color','white');

num = coeffs(halfbandInterpolator);

T =0.1;
t1 = 0 : 1/Fs : T - 1/Fs;
t2 = 0 : 1/2/Fs : T - 1/2/Fs;

sig = sin(2*pi*51 * t1);
refSig = sin(2*pi*51 * t2);
zeroAddSig = reshape([sig; zeros(1,length(sig))], [1 2*length(sig)]);

filteredSig = filter(num.Numerator, 1, zeroAddSig);

%% Результаты

delay = order/2;
figure();
stem(t1(1:end-delay), sig(1:end-delay), '*');
hold on; stem(t2(1:end-delay), zeroAddSig(1:end-delay), 'o');
hold on; stem(t2(1:end-delay), filteredSig(delay+1:end), '.');

legend('Исходный сигнал', 'Сигнад разбавленный 0', 'Отфильтрованный сигнал');

figure();
plot(abs(refSig(1:end-delay) - filteredSig(delay+1:end)), '.');
ylabel('Error');
Получаем, вроде бы, хороший результат.
resSig.png
resError.png
resError.png (9.44 КБ) 3980 просмотров
Встает вопрос целесообразности выбора тех или иных параметров.
Например, порядок фильтра.
Какими ограничениями необходимо задаться для его "оптимального" выбора?
А ширина переходной полосы?
Вроде бы, чем шире переходная полоса, тем меньше искажения в полосе пропускания, т.е. необходимо ее расширять пока не упремся в наивысшую гармонику сигнала?

Хотелось бы еще узнать об оптимальной реализации такого фильтра (каждый 2й коэффициент фильтра ноль).
Возможно, есть некий шаблон, например на C, функции фильтрации ?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Интерполяция 2x

Сообщение Бахурин Сергей »

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

Ширина переходной полосы зависит от порядка. При уменьшении порядка расширяется как в сторону копии спектра, так и в область нижних частот. Именно поэтому полосовой сигнал будет дополнительно искажаться.

Оптимальной реализации на все случаи жизни нет. Но общий подход в том, что фильтр имеет каждый второй коэффициент нулевой плюс коэффициенты симметричны. Т.е. фильтр порядка N требует всего N/4 умножений с накоплением.

Сишная функция фильтрации есть в dspl

kaa
Сообщения: 40
Зарегистрирован: 17 мар 2019, 20:03

Re: Интерполяция 2x

Сообщение kaa »

Спасибо!

Я правильно понимаю, что учитывая чередование нулей в сигнале, каждая вторая итерация будет иметь N/4 умножений с накоплением, а итоговая вычислительная сложность будет N/8 на итерацию в среднем?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Интерполяция 2x

Сообщение Бахурин Сергей »

Да при интерполяции N/8

Ответить