簡體   English   中英

信號的FFT濾波

[英]FFT Filtering of signal

我有一個信號,我想提取14 Hz至14.4hz之間的頻率。 我使用一些類似Butterworth的帶通濾波器,但答案是不可接受的。 現在,我想知道如何使用FFT濾波器來獲取頻率。 我在matlab中編寫以下代碼:

clc;
clear all;
load('SignalData2');
[n,c] = size(mydata2);
mydata1 = mydata2(1:n,1);
% my sample rate is 39500 or datalenth/4
fs = n/4;      % Sampling rate [Hz]
Ts = 1/fs;       % Sampling period [s]
fNy = fs / 2;    % Nyquist frequency [Hz]
noSamples = n;   % Number of samples
f = 0 : fs/noSamples : fs - fs/noSamples; % Frequency vector
figure;
subplot(2,2,1);
plot(mydata1);
x_fft = abs(fft(mydata1));
subplot(2,2,2);
plot(f,x_fft);
xlim([1 150]);
bw=0.2;      %Bandwisth
fc=pi*14.2;     %Center Frequency
L = n;       % sample number;
%Compute Hamming window
for nn=1:L
    hamm(nn)=(0.54-0.46*cos(2*pi*nn/L));
end
%Compute Filter
hsuup=(-(L-1)/2:(L-1)/2);
hideal1=hamm.*(2*(fc+bw)*(sin(2*(fc+bw)*hsuup/fs)./(2*(2*fc+bw)*hsuup/fs)));
hideal2=hamm.*(2*(fc-bw)*(sin(2*(fc-bw)*hsuup/fs)./(2*(2*fc+bw)*hsuup/fs)));
h_bpf=(hideal1-hideal2);
comp_sig_fft=fft(mydata1)'/L;
h_bpf_fft=fft(h_bpf) /L;
s100_fft=comp_sig_fft.*h_bpf_fft;
band_passed_signal=real(ifft(s100_fft));
subplot(2,2,3);
plot(band_passed_signal);
% 
x_fft = abs(fft(band_passed_signal));
subplot(2,2,4);
plot(f,x_fft);
xlim([1 150]);

我在此鏈接上上傳信號文件: http : //wikisend.com/download/428686/SignalData2.mat

但濾波器信號是NaN。 有解決這個問題的主意嗎? 結果圖像: http : //i58.tinypic.com/11ukn61.jpg

fft(h_bpf)的結果為NaN因為輸入h_bpf有一個NaN值。 當您計算hideal1hideal2時,該值由類似於sin(x)/x的表達式引入,其中x = 0

> find(isnan(hideal1))

ans =

       78443

如果需要進行此類計算,請嘗試使用sinc函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM