вот скриптик для наглядности
Код
close all
clear
clc
IR = [-0.0099 0.0787 0.1166 0.1647 0.1946 ...
0.1946 0.1647 0.1166 0.0787 -0.0099];
% fvtool(IR) - удобный вариант для просмотра ИХ
Fs = 120e6;
F0 = 0e6; % исходная частота
step = 1e6;
freq_num = 10;
N = 1e4;
A = 2^15 - 1;
F_vect = F0 : step : F0 + step * (freq_num - 1);
signal_matr = zeros(freq_num, N);
for i = 1:freq_num
% формируем исходные сигналы и
signal_matr(i, :) = round(A*cos(2*pi*(F_vect(i)/Fs)*(1:N)));
% смотрим их спектр, нажимая пробел
% fft_plot(signal_matr(i, :), Fs, 'db')
% pause
end;
res_sig = sum(signal_matr);
% fft_plot(res_sig, Fs, 'db')
filter_out = upfirdn(res_sig, IR, 1, 1);
% filter_out = filter(res_sig, 1, IR);
fft_plot(filter_out, Fs, 'db') % видно затухание по мере удаления от постоянной составляющей
%и оно совпадает с fvtool
Код
function [] = fft_plot(signal, Fs, mode)
N = length(signal);
win = hanning(length(signal));
signal = signal.*win.';
if mod(N,2) == 1
f = ((0:N-1) - floor(N/2))/N*Fs;
else
f = ((0:N-1) - N/2)/N*Fs;
end;
Y = fftshift(fft(signal,length(signal)));
Y_ampl = 2*abs(Y)./N;
Y_db = 20*log10(abs(Y));
if (strcmp(mode, 'db'))
plot(f, Y_db - max(Y_db))
% plot(f, Y_db)
set(gca,'XLim',[min(f), max(f)])
xlabel('Frequency (Hz)')
ylabel('dB')
title('20*log10(|Y|)')
else
plot(f, Y_ampl)
set(gca,'XLim',[min(f), max(f)])
xlabel('Frequency (Hz)')
title('Amplitude')
end;
end
В этой же папке надо поместить эту функцию.