在Matlab中使用模拟滤波器进行滤波时遇到问题?

时间:2018-06-03 04:09:36

标签: matlab filter simulation lowpass-filter

我一直在尝试创建一个最终用于锁相环的相位检测器。我正在实现的相位检测器是由多路复用器和低通滤波器组成的简单类型。该项目用于模拟模拟锁相环。

我遇到的麻烦实际上是通过低通滤波器对信号进行滤波。我将在下面附上我的测试代码,但简而言之,我使用Matlab的黄油功能创建了一个模拟的butterworth低通滤波器,截止频率为2MHz。我正在输入两个分量的正弦波,一个是1MHz,另一个是3MHz。我期望消除3MHz的组件。

我使用zp2tf将黄油函数中的零和极点转换为传递函数形式,然后对这些系数使用滤波函数。但是,输出信号存在两个问题:

1)我无法解释信号的增益。 butter函数返回一个增益,该增益用于zp2tf函数。但是,当我将滤波后的输出除以此增益时,得到的幅度无法接近原始幅度。

2)根本没有输出,或者刻度太偏斜,似乎没有输出。如果我放大输出,我可以偶尔看到一些正弦行为随着时间的推移而增长。它似乎随着时间的增加而增加,导致输出无意义。这是我对这个问题的最好猜测,尽管它可能是完全不同的东西。

我的测试代码是:

%FILTERING TESTS
%GENERATE SINUSOID
fc = 1E6; %carrier freqyency, to be used in FM demodulator
fs = 100*fc; %fm sample rate, arbitrarily chosen for smoothness.
t = (0:1/fs:0.00001); %length of time to simulate
%create sinusoidal signals
x = sin(2*pi*1E6*t) + 2*sin(2*pi*3E6*t);
%generate butterworth analog lowpass filter
n = 2; %lpf order
cut = 2E6; %cutoff freq
[zeros, poles, gain] = butter(n,2*pi*cut, 's'); %generate LPF zeros, poles, and filter gain.
[b,a] = zp2tf(zeros, poles, gain); %convert to transfer function form of b, a coefficients
figure(1)
freqs(b,a,1000)
%attempt to filter
output = filter(poles,zeros,x);
%correct filter gain
output2 = output/gain;
%plots
figure(2)
plot(x)
figure(3)
plot(output2)

0 个答案:

没有答案