为什么Matlab里的滤波器不正常
玩Matlab的时候,用I,Q信号的方法对FM信号进行解调,得到的结果里有许多寄生信号,想把这些寄生信号滤除,就做了个滤波,但是发现这些寄生信号没有办法滤除。我的Matlab程序是这样的:
N=2000;
Tmax=20;
dt=Tmax/(N-1);
t=0:dt:Tmax;
fs=1/dt;
%载波
fc=3;clc
wc=2*pi*fc;
xc=cos(wc*t);
%FM调制
fm=0.2;%调制信号的频率
wm=2*pi*fm;
Am=1;
xm=Am*cos(wm*t); % 调制信号表达式
A=2;
kf=10;
%对调制信号 xm积分
xmi=cumsum(xm)*dt;
%频率调制方程
xfm=A*cos(wc*t+kf*xmi);
%FM 解调
theta=pi/3;
xc=cos(wc*t+theta);
xs=sin(wc*t+theta);
I=xfm.*xc;
Q=xfm.*xs;
d=-1*atan2(Q,I);
%输出信号
xd=unwrap(d);
=besself(5,0.75);
yd=filter(b, a, xd);
figure;
subplot(4,1,1);
plot(t, xm); title('原有调制信号');
xlabel('Time (s)'); ylabel('幅度');
subplot(4,1,2);
plot(t, xfm); title('FM 已调信号');
xlabel('Time (s)'); ylabel('幅度');
subplot(4,1,3);
plot(t, xd); title('未过滤的解调信号');
xlabel('Time (s)'); ylabel('幅度');
subplot(4,1,4);
plot(t, yd); title('过滤后的解调信号');
xlabel('Time (s)'); ylabel('幅度');
其中,滤波器的特性如下:
不知道问题出在什么地方? 滤波器的参数也调整过,但是没有预期的效果。请高手指教:handshake 不负责任地猜测,你是不是在
=besself(5,0.75);
和
yd=filter(b, a, xd);
之间缺了个把模拟滤波器参数转为离散滤波器参数的语句?差不多是个叫bilinear的函数。具体请参照MATLAB语法。
你要处理的数据xd是个向量而已,你连每格多少时间都没告诉filter,而b,a是模拟域的参数,和xd这个数字域的参数一起混搭,filter函数肯定乱来的。
量子隧道 发表于 2024-11-27 23:32
不负责任地猜测,你是不是在
=besself(5,0.75);
和
我试试找一下。:handshake dabfxz 发表于 2024-11-28 08:07
我试试找一下。
其实我也好奇楼主调好了没有。要是调好了的话,上个波形图共赏一下如何? 量子隧道 发表于 2024-11-28 18:08
其实我也好奇楼主调好了没有。要是调好了的话,上个波形图共赏一下如何?
还没有调好。因为“有朋友远方来”,这个东西先放一放。而且对“滤波器”还要补课,发现许多概念还未搞清楚。:L
有了结果一定报告给大家。:handshake 本帖最后由 iffi123 于 2024-11-28 19:41 编辑
就是求反正切 问题搞清楚了。是滤波器的参数设置不对。现在把上面的程序修改了一下):
(从“%输出信号”后面开始)
%----------------------
fs=100;
=butter(6,2/(fs/2));
y=filter(b,a,xd);
figure;
subplot(4,1,1);
plot(t, xm); title('原有调制信号');
xlabel('Time (s)'); ylabel('幅度');
subplot(4,1,2);
plot(t, xfm); title('FM 已调信号');
xlabel('Time (s)'); ylabel('幅度');
subplot(4,1,3);
plot(t, xd); title('未过滤的解调信号');
xlabel('Time (s)'); ylabel('幅度');
subplot(4,1,4);
plot(t, y); title('过滤后的解调信号');
xlabel('Time (s)'); ylabel('幅度');
Matlab里面的滤波器还有许多东西要学!
页:
[1]