如何解决在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;
现在,我将滤波器转换为抑制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);
我知道,该情节没有显示任何内容。下面有错误。 我认为过滤器未正确过滤。您有解决的主意吗?
还有错误:
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
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 举报,一经查实,本站将立刻删除。