你知道这段代码有什么问题吗?我正在用 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
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
谢谢。