Реализация фильтра на MATLAB Мих


Мне нужно реализовать фильтр Матлаб(Б,А,х) функции в Java. Прежде чем я сделаю это, я хотел бы переписать эту функцию в МатЛАБ до перевода в Java. До сих пор, выписывая все коэффициенты работает очень хорошо. Смотрите ниже:

x = load('data.csv');
windowSize = 10; 
b = (1/windowSize)*ones(1,windowSize); % b coefficient - a is unused 
i = 1;
for n = length(b) : length(x) % yes I know I am losing my first 10 samples
    y(i,:) = [ b(1)*x(n) + b(2)*x(n-1) + b(3)*x(n-2) + b(4)*x(n-3) + ... 
        b(5)*x(n-4) + b(6)*x(n-5) + b(7)*x(n-6) + b(8)*x(n-7) + ...
        b(9)*x(n-8) + b(10)*x(n-9) ];
    i = i+1; % used for indexing calculated results into new array
end

Однако, я хочу, чтобы петля содержимое автоматически обновляться, когда я изменять размер окна. В приведенном выше примере, если я увеличить windowsize с коэффициентом два, то придется дважды писать, как много кратных B и X в для петли. Что это страшное решение моей проблемы. Посоветуйте, пожалуйста.



257
3
задан 23 февраля 2018 в 01:02 Источник Поделиться
Комментарии
1 ответ

Так что это решение работает:

x = load('data.csv');
windowSize = 10;
b = (1/windowSize)*ones(1,windowSize);
i = 1;

for n = windowSize: length(x)
m = 0;
tempSum = 0;
for j = 1 : windowSize
temp = b(j)*x(n-m);
tempSum = tempSum + temp;
m = m + 1;
end
y(i,:) = [tempSum]
i = i+1;
end

Ниже результаты:

windowsize10

windowsize30

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

Результаты сравнивались с использованием Matlabs с = setdiff(г,гг) функция и не нашел никакой разницы между предлагаемым решением и фильтр Matlabs(Б,А,х) функции.

0
ответ дан 24 февраля 2018 в 04:02 Источник Поделиться