在傅立叶中对我的信号在傅立叶中应用带通

时间:2018-08-21 07:51:46

标签: matlab fft bandpass-filter

我正在尝试在频率0附近应用带通,但不走运。我很乐意获得帮助

x=scan11(1,:)*1e-3/3e8; y=scan11(2,:);
plot(x,y)  % my function

[XX,ff]=trans_fourier(y,mean(diff(x)));
plot(ff,abs(XX))  % gives the Fourier transform

我想选择0附近的频率。让我们假设-1e13到1e13,然后进行ifft并绘制此滤波器之后的信号。

我应该如何开始这样做?命令

YY=bandpass(y,[-1e13 1e13],1/mean(diff(x)))

不幸的是,这里没有帮助。

由于我无法在此处上传文件,这也是我在matlab论坛上遇到的所有文件的问题

matlab link

1 个答案:

答案 0 :(得分:2)

我不确定trans_fourier函数的内容到底是什么,但是在“普通matlab函数”中,您可以按照以下内容尝试尝试。

Nt = 1024;                     % Number of samples
Fs = 10;                       % Sampling frequency (samples / second)
t = (0:Nt-1)/Fs;               % Time array
x = sin(t/10);                 % Low-frequency signal
x = x + 0.25*randn(1,Nt);      % add some noise

X = fftshift(fft(x));          % FFT of signal with 0 Hz centered
fr = (-Nt/2 : Nt/2-1)/(Nt/Fs); % Frequency axis

% Filter: squared cosine (edit as desired)
fsl = 10;                      % Length of filter slope, in samples
filt = zeros(size(X));
filt(Nt/2+1+(-fsl:fsl)) = cos( linspace(-pi/2,pi/2,2*fsl+1) ).^2;

x_filt = real(ifft(ifftshift( filt.*X ))); % Filtered x

figure();
subplot(2,2,1); plot(t,x);             ax=axis;  title('original signal');
subplot(2,2,4); plot(t,x_filt);        axis(ax); title('Low-pass filtered signal');
subplot(2,2,2); plot(fr,abs(X));       ax=axis;  title('original amplitude spectrum');
subplot(2,2,3); plot(fr,abs(X).*filt); axis(ax); title('Filtered amplitude spectrum');

我不确定您所说的确切含义

  

让我们假设-1e13到1e13

,但请记住,提取单个傅立叶分量(基本上将频谱的所有值设置为零,除了您感兴趣的那个值之外)都可以用作砖墙过滤器,如果您采取以下措施,将会得到相当大的伪像逆变换。如果您有兴趣,请参考this topicthis page