微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Octave中设计一个低通滤波器Butterwoth原型

如何解决在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):

Result of standardized filter (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);

结果是:

result

滤波信号的FFT:

enter image description here

我知道,该情节没有显示任何内容。下面有错误。 我认为过滤器未正确过滤。您有解决的主意吗?

还有错误

 ﬐਀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

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。