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
使用计算得出的西格玛时,过滤器数据图与原始图相比太多不同。任何问题或我的理解?为了检查,我添加了matlab函数和数据文件。 –
一些事情:** 1)**如果参数是列向量,**'fliplr'不会颠倒序列。你可以使用'gauss(r + 1:-1:2)',它可以工作,不管你是否有行或列向量而不是'fliplr(gauss(2:r + 1))'。 ** 2)**如果您要比较时间信号,您应该绘制'y_gauss'而不是'abs(y_gauss)'。 ** 3)**如果增加“r”一点,你的频率泄漏会稍微减少一点。 – SleuthEye
过滤时间图与信号匹配,如点2中指出的错误(使用abs())。建议3 - >通过改变r,sigma会影响吗?换句话说,西格马和r是相关的? –