matlab生成10.7MHz的FM模拟中频广播信号,带宽为200k,fm为15khz,之后进行带通采样,然后得到IQ分量并低通滤波,在进行反正切差分运算求出解调信号
时间: 2024-05-22 09:13:23 浏览: 60
以下是MATLAB代码实现:
% 生成FM信号
fs = 50e6; % 采样率
t = 0:1/fs:0.05; % 采样时间
fc = 10.7e6; % 载频频率
fm = 15e3; % 调频频率
kf = 2*pi*fm; % 调频系数
phi = 0; % 初始相位
m = sin(2*pi*fm*t); % 调制信号
s = cos(2*pi*fc*t + kf*cumsum(m)); % FM信号
% 带通采样
f0 = fc - 100e3; % 带通中心频率
bw = 200e3; % 带宽
fsamp = 2*bw; % 采样率
f1 = f0 - bw/2; % 带通下限频率
f2 = f0 + bw/2; % 带通上限频率
tsamp = 1/fsamp; % 采样时间
t1 = 0:tsamp:0.05; % 采样时间
s1 = cos(2*pi*fc*t1 + kf*cumsum(interp1(t,s,t1,'linear','extrap')).*rectpuls(t1,tsamp)); % 采样后的带通信号
% 得到IQ分量
phi = 2*pi*f0*t1.'; % 相位
I = s1.'.*cos(phi); % 实部
Q = s1.'.*sin(phi); % 虚部
% 低通滤波
fcutoff = 10e3; % 截止频率
[b,a] = butter(6,fcutoff/(fsamp/2)); % 6阶巴特沃斯低通滤波器
I = filter(b,a,I); % 实部滤波
Q = filter(b,a,Q); % 虚部滤波
% 反正切差分运算求解调信号
demod = atan2(Q,I); % 反正切运算
demod_diff = diff(demod); % 差分运算
demod_diff(end+1) = demod_diff(end); % 补齐长度
demod = demod_diff./(2*pi*tsamp*fm); % 解调信号
% 绘制结果
subplot(2,1,1);
plot(t,s);
title('原始FM信号');
xlabel('时间 (s)');
ylabel('幅度');
subplot(2,1,2);
plot(t1,demod);
title('解调信号');
xlabel('时间 (s)');
ylabel('幅度');
结果如下图所示:
注意:这里的解调方法是基于反正切差分的方法,需要注意的是,如果解调信号的幅度过大,在atan2运算时可能会出现问题,因此需要进行幅度调整。此外,解调结果的准确性也与采样率、滤波器等因素有关,需要根据实际情况进行调整。
阅读全文