我正在尝试在频率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论坛上遇到的所有文件的问题
答案 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 topic或this page。