首页 > 解决方案 > 在 Octave 中设计一个低通滤波器 Butterwoth 原型

问题描述

你知道这段代码有什么问题吗?我正在用 Butterworth 原型构建一个过滤器,但我不知道我在哪里犯了错误。

Apass = 0.6;  % dB 
Astop = 16;   % dB
omega_pass = 1; 
Gstop = -16;
omega_stop = 5;
OMEGA = omega_stop/omega_pass;

n = ceil( log10( (10^(-Gstop/10) - 1)  / ( (10^(-Gpass/ 10) -1 ) )) / ( 2 * ( log10(OMEGA))) );

p = zeros([1 n]);
for k = 1:n
    p(k) = exp( ((i*pi)/(2*n)) * (2 * k + n - 1));
end;

标准化滤波器(1Hz)的结果: 标准化滤波器的结果 (1Hz)

现在我转换滤波器以抑制 130kHz+ 频率。

% 132000 Hz = 132kHz
p_lp = zeros([1 n]); %lp for LowPass, p for poles
for k = 1:n
    p_lp(k) = p(k) * (130000);
end;

pkg load signal;
z = []; % zeros
k = 1.6*10^10; % signal amplification
[num, den] = zp2tf(z, p_lp, k)
sys_lp = tf(num, den)
y_lp = filter(num, den, modulated);
[osX_lp, P1_lp] = computeFFT(y_lp, fs);

结果是: 结果

滤波信号的 FFT: 在此处输入图像描述

我知道,情节没有显示任何东西。下面有错误。我认为过滤器没有正确过滤。你有什么想法来解决它吗?

还有错误:

 ﬐਀warning: opengl_renderer: data values greater than float capacity.  (1) Scale data, or (2) Use gnuplot
>> warning: opengl_renderer: data values greater than float capacity.  (1) Scale data, or (2) Use gnuplot
warning: opengl_renderer: data values greater than float capacity.  (1) Scale data, or (2) Use gnuplot
warning: opengl_renderer: data values greater than float capacity.  (1) Scale data, or (2) Use gnuplot
warning: opengl_renderer: data values greater than float capacity.  (1) Scale data, or (2) Use gnuplot
warning: opengl_renderer: data values greater than float capacity.  (1) Scale data, or (2) Use gnuplot

computeFFT 是我的函数,它返回 x 轴和单面频谱

function [osX, P1] = computeFFT(data, freq)
    L = length(data);
    % fft
    transform = fft(data);
    osX = 4;
    P1 = 5;
    % two-sided spectrum
    P2 = abs(transform/L);
    osX = freq*(0:(length(P2)/2))/length(P2);
##    % single-sided spectrum
    P1 = P2(1:L/2+1);
    P1(2:end-1) = 2*P1(2:end-1);
endfunction

谢谢。

标签: matlabsignal-processingoctavebutterworth

解决方案


推荐阅读