【发布时间】:2015-12-11 11:40:51
【问题描述】:
我有一个 6ms 长的信号,其中三个频率分量以 60kHz 采样:
fs = 60000;
T = 0.006;
t = 0:1/fs:T;
x = 0.3*sin(2*pi*2000*t) + sin(2*pi*5000*t) + 0.4*sin(2*pi*8000*t);
我有一个带通滤波器,其脉冲响应是两个 sinc 函数之间的差异:
M = 151;
N = 303;
n = 0:(N-1);
h = (sin(0.5760*pi*(n-M))-sin(0.3665*pi*(n-M)))./pi./(n-M);
h(n==M) = 0.2094;
我设计了一个将输入与过滤器进行卷积的函数:
function y = fir_filter(h,x)
y = zeros(1,length(x)+length(h)-1);
for i = 1:length(x)
for j = 1:length(h)
y(i+j-1) = y(i+j-1) + x(i)*h(length(h)-j);
end
end
然后应用过滤器:
y = fir_filter(h,x);
这产生了奇怪的结果:
figure(21)
ax1 = subplot(311);
plot(x);
title('Input Signal');
ax2 = subplot(312);
plot(h);
title('FIR');
ax3 = subplot(313);
plot(y);
title('Output Signal');
linkaxes([ax1,ax2,ax3],'x')
ax2.XLim = [0,length(y)];
我尝试使用yy = filter(h,1,[x,zeros(1,length(h)-1)]); 和yyy = conv(h,x); 并得到相同的结果。
拜托,谁能解释我做错了什么?谢谢!
【问题讨论】:
-
剧情是什么?频率响应?你的问题是fft镜像?阅读dsp.stackexchange.com/questions/4825/why-is-the-fft-mirrored或phys.nsu.ru/cherk/fft.pdf
-
问题是我的输入与 FIR 滤波器的卷积产生了错误的结果。结果应该接近纯正弦曲线
-
可以添加代码来生成绘图吗?
-
好的,我编辑了帖子
-
您的代码对我不起作用,因为
fir_filter中的`h(length(h)-j)` 在j=length(h)时访问h(0)。只是出于好奇,为什么不conv?
标签: matlab filtering signal-processing