matlab生成10.7MHz的中频FM模拟信号,之后进行带通采样,然后得到IQ分量并低通滤波,在进行反正切差分运算求出解调信号
时间: 2024-05-22 10:11:59 浏览: 83
以下是matlab代码实现:
%% 生成10.7MHz中频FM模拟信号
Fs = 100e6; % 采样频率
t = 0:1/Fs:1e-3; % 时域序列
fc = 10.7e6; % 载波频率
fm = 1e3; % 调频信号频率
kf = 2*pi*50e3; % 调频系数
m = 2; % 调幅系数
phi = 0; % 初始相位
x = m*cos(2*pi*fm*t + kf*cumsum(sin(2*pi*fc*t)+phi)); % 中频FM信号
%% 带通采样
Fs1 = 2*fc; % 采样频率
Ts1 = 1/Fs1; % 采样时间间隔
n1 = 0:1/Fs1:1e-3; % 采样时刻序列
y1 = x.*cos(2*pi*fc*n1); % 采样后的信号
%% 得到IQ分量并低通滤波
fIR = 1e6; % 低通滤波器截止频率
[b,a] = butter(6,fIR/(Fs1/2)); % 6阶Butterworth低通滤波器
I = filter(b,a,y1).*cos(2*pi*fc*n1); % I分量
Q = filter(b,a,y1).*sin(2*pi*fc*n1); % Q分量
%% 反正切差分运算求解调信号
z = atan2(Q,I); % 反正切运算
z_diff = diff(z); % 差分运算
Fs2 = Fs1/2; % 解调后信号的采样频率
Ts2 = 1/Fs2; % 解调后信号的采样时间间隔
n2 = 0:Ts2:(length(z_diff)-1)*Ts2; % 解调后信号的时刻序列
z_dem = filter(b,a,z_diff); % 低通滤波
z_dem = [0, z_dem]; % 补零
%% 绘制结果
figure;
subplot(2,2,1); plot(t*1e3,x); xlabel('时间(ms)'); ylabel('幅度(V)'); title('中频FM信号');
subplot(2,2,2); plot(n1*1e3,y1); xlabel('时间(ms)'); ylabel('幅度(V)'); title('带通采样后信号');
subplot(2,2,3); plot(n1*1e3,I,n1*1e3,Q); xlabel('时间(ms)'); ylabel('幅度(V)'); title('IQ分量');
subplot(2,2,4); plot(n2*1e3,z_dem); xlabel('时间(ms)'); ylabel('幅度(V)'); title('解调信号');
阅读全文