Как фильтровать сигналы высокой частоты? - PullRequest
0 голосов
/ 11 октября 2019

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

A1 = 7;
A2 = 10;
A3 = 2;
f1 = 934;
f2 = 232;
f3 = 844;
th1 = 5*pi/4;
th2 = pi/4;
th3 = 5*pi/8;
M = 21;
T = 0.7823;
T1 = 0.0331;
T2 = 0.08;
fd = 6395;
K = 3;

Td = 1/fd; % diskretizavimo periodas
N = fix(T/Td); %modeliuojamo signalo reiksmiu skaicius
t = (0:N-1)*Td;

y = A1*sin(2*pi*f1*t + th1)+A2*sin(2*pi*f2*t + th2);

df = 1/T;
Nf=fd/df;


frib=(f1+f2)/2;
Wn = frib/fd;

b = fir1(M, Wn, 'high');
N2=Nf/2; 
fasis = (0:Nf-1)*df;

filt_y = filter(b,1, y);
FILT_Y = abs(fft(filt_y, Nf));
figure(17)
subplot(2,1,1)
plot(t(1:T1*2/Td),filt_y(1:T1*2/Td));box('off'); axis tight;
set(gca, 'fontsize', 12); title('Filtruotas sinusu sumos signalas')
subplot(2,1,2)
stem(fasis(1:N2),FILT_Y(1:N2),'.');box('off'); axis tight;
set(gca, 'fontsize', 12); title('Filtruoto sinusu sumos signalo spektras')

frib это частота среза

А это мои диаграммы: enter image description here

Подскажите, пожалуйста, что я могу сделать, чтобы на второй диаграмме был виден только один (около 1000 частот)? Я не знаю, что я мог сделать больше

1 Ответ

2 голосов
/ 11 октября 2019

Если вы видите компоненты Фурье вашего сигнала до и после, вы можете ясно увидеть, как сильно уменьшается первая основная частота:

noFILT_Y = abs(fft(y, Nf));

subplot(2,1,2)
stem(fasis(1:N2),FILT_Y(1:N2),'.');box('off'); axis tight;
subplot(2,1,1)
stem(fasis(1:N2),noFILT_Y(1:N2),'.');box('off'); axis tight;

enter image description here

Но если вы будете следовать предложению @ irreducible:

Wn = frib/(fd/2);

enter image description here

...