помочь с использованием интерполяции Matlab FIR (2 строки кода) - PullRequest
1 голос
/ 01 ноября 2010

Может кто-нибудь помочь мне понять, где я иду не так внизу?Я использую mfilt.firinterp для интерполяции синусоиды с коэффициентом 4, используя фильтр с отсечкой 0,7 * (фс / 2).Синусоида имеет частоту 0,1 Гц, а у меня частота дискретизации 10 Гц.Фильтр нижних частот, используемый для интерполяции, поэтому имеет срез 3,5 Гц, и должен легко пропускать этот сигнал.Я, должно быть, делаю что-то не так.

Если я установлю обрезку на 0,25 * fs / 2, все будет хорошо.Но означает ли это, что сигналы с частотным содержанием чуть выше 0,25 * фс / 2 (например, 0,4 * фс / 2) не могут быть интерпретированы линейно (или, как можно этого добиться?).

Подождите минуту,я путаю старый фс и новый фс?Если fs = fs_new = 40 Гц, тогда я могу понять, что происходит.Если я установлю значение среза 0,25 * fs_new / 2, где fs_new = 40 Гц, то имеет смысл, что это верхняя частота среза 10 Гц (исходная частота дискретизации).Таким образом, Wn в fircls1 (95, Wn, 0,01, 0,0001) должно быть <= 0,25.Это звучит правильно? </p>

Заранее спасибо за любые комментарии.

% create input
told = (0:1:299)/10;             % time index for plotting xold
tnew = (0:1:1199)/40;            % time index for plotting xnew
xold = sin(2*pi*0.1*told + 1);   % fc=0.1Hz (Pc=10 sec); samplerate = fs = 10Hz

% create filter
num = fircls1(95, 0.7, 0.01, 0.0001);  % set filter cutoff to 0.7*(fs/2)=3.5Hz
Hm = mfilt.firinterp(4,num);

% apply filter
xnew = 4*filter(Hm, xold);

% plot results
plot(told, xold, 'bo', tnew, xnew, 'r+');
title('Input (blue) and filtered input (red) versus time index');

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Я понял, что неправильно понял ... Это была моя путаница в отношении параметра Wn при использовании fircls1 (n, Wn, ripple_passband, ripple_stopband).При использовании этой функции в сочетании с функцией Matlab mfilt.firinterp (l, num) Wn следует рассматривать как частоту среза, нормированную на НОВУЮ частоту дискретизации (а не частоту дискретизации OLD, таким образом, моя путаница).

Таким образом, при интерполяции по четыре (т.е. l = 4) с использованием mfilt.firinterp значение Wn должно быть 0,25 или менее, чтобы избежать наложения (если Wn> 0,25, то изображения перекрываются).

В приведенном выше примере я пытался использовать Wn = 0,7, но на самом деле то, что я действительно должен был использовать, было Wn = 0,7 * 0,25, что составляет <0,25.</p>

0 голосов
/ 04 ноября 2010

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

http://www.mathworks.com/matlabcentral/newsreader/

Извините и удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...