【问题标题】:How to filter high freq signals?如何过滤高频信号?
【发布时间】:2020-02-08 20:48:50
【问题描述】:

所以我有一项任务要让大学在 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 是截止频率

这些是我的图表:

你能告诉我我该怎么做才能使第二张图中只有一个可见(接近 1000 频率)?我不知道我还能做什么

【问题讨论】:

  • 更改:Wn = frib/fd;Wn = frib/(fd/2);Wn 必须介于 0 和 1 之间,通过使用 fs 而不是 fs/2 进行标准化(在您的情况下为 fd)Wn 将介于 0 和0.5
  • AnderBiguri 回答了您的问题,包括建议和图表,只是想在fir1 的帮助下添加引用:...其中 1 对应于奈奎斯特频率...这意味着您的 @987654328 @ 正确归一化后的 583 是 0.1823。考虑到归一化 f2 是 0.07,您会看到错误归一化的 firb 导致 0.09 意味着 f2 它非常接近您的截止频率,因此该点的衰减非常弱。

标签: matlab filtering frequency


【解决方案1】:

如果您在前后看到信号的傅立叶分量,您可以清楚地看到第一个主频率是如何大幅降低的:

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;

但是如果你遵循@irreducible 的建议:

Wn = frib/(fd/2);

【讨论】:

  • 他对Wn 的归一化是错误的,所以衰减低于预期
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2017-07-23
  • 2012-12-18
相关资源
最近更新 更多