2017-01-08 101 views
1

我是新來的信號處理,並希望應用低通濾波器使用fft。 我發現this post它回答我的問題。在使用它的時候,我有一個問題: 假設我的截止頻率是3500Hz,採樣率是25600Hz,sigma在產生高斯曲線時將使用什麼值,如eigenchris'answer以下代碼給出的?高斯函數sigma變量的選擇

gauss = zeros(size(Y));  
sigma = 8;       % just a guess for a range of 20 

gauss(1:r+1) = exp(-(1:r+1).^ 2/(2 * sigma^2)); % +ve frequencies 
gauss(end-r+1:end) = fliplr(gauss(2:r+1));   % -ve frequencies 
y_gauss = ifft(Y.*gauss,1024); 

下面是我使用功能的代碼:

clf; clc; 
Fs = 25600; 
file = '01cKhaitan181015M4_Opp_LeftS1H8_a.dat'; 
signal = dlmread(file); % read file from specified location 
signal = signal - mean(signal); 

N  = size(signal, 1); 
time = 1000*(0 : N-1)/Fs; % in msec 
freq = (-Fs/2 : Fs/N : Fs/2-Fs/N)'; 

Y = fft(signal, 1024); 

r = 141; % range of frequencies we want to preserve 

gauss = zeros(size(Y)); 
sigma = 119.75; 
gauss(1:r+1) = exp(-(1:r+1).^ 2/(2 * sigma^2)); % +ve frequencies 
gauss(end-r+1:end) = fliplr(gauss(2:r+1));   % -ve frequencies 
y_gauss = ifft(Y.*gauss,1024); 

hold on; 
plot(time, signal, 'k'); plot(time, abs(y_gauss), 'c'); 
legend('signal', 'gaussian', 'Location', 'southwest') 
hold off; 

下面是數據文件的鏈接

https://www.dropbox.com/s/edb8g43j4a54jvq/01cKhaitan181015M4_Opp_LeftS1H8_a.dat?dl=0

回答

0

截止頻率被定義爲頻率,其中衰減是0.5或〜6dB。您已經知道所需的截止頻率爲3500Hz。下一步將與獲得相應的索引:

cutoff_frequency = 3500; 
sampling_rate = 25600; 
cutoff_index = 1 + cutoff_frequency/sampling_rate * length(Y); 

那個cutoff_index你想收到預期的0.5衰減。求解sigma這將產生在cutoff_index 0.5衰減的高斯公式:

%% Derivation of sigma value 
% 0.5 = exp(-cutoff_index^2/(2 * sigma^2)); 
% log(0.5) = -cutoff_index^2/(2 * sigma^2)); 
% sigma^2 = -cutoff_index^2/(2 * log(0.5)); 
% sigma^2 = cutoff_index^2/(2 * log(2)); 

產生:

sigma = cutoff_index/sqrt(2 * log(2)); 

因此,例如,如果length(Y)是1024,你會得到

sigma = (3500/25600 * 1024)/sqrt(2 * log(2)); % approx. 119.75 
+0

使用計算得出的西格瑪時,過濾器數據圖與原始圖相比太多不同。任何問題或我的理解?爲了檢查,我添加了matlab函數和數據文件。 –

+0

一些事情:** 1)**如果參數是列向量,**'fliplr'不會顛倒序列。你可以使用'gauss(r + 1:-1:2)',它可以工作,不管你是否有行或列向量而不是'fliplr(gauss(2:r + 1))'。 ** 2)**如果您要比較時間信號,您應該繪製'y_gauss'而不是'abs(y_gauss)'。 ** 3)**如果增加「r」一點,你的頻率泄漏會稍微減少一點。 – SleuthEye

+0

過濾時間圖與信號匹配,如點2中指出的錯誤(使用abs())。建議3 - >通過改變r,sigma會影響嗎?換句話說,西格馬和r是相關的? –