matlab生成10.7MHz的FM模拟中频广播信号,带宽为200k,fm为15khz,之后进行带通采样,然后得到IQ分量并低通滤波,在进行反正切差分运算求出解调信号,给出频谱
时间: 2024-05-21 13:13:04 浏览: 129
以下是实现该过程的MATLAB代码:
%% 生成FM信号
fs = 10e6; % 采样频率
fc = 100e6; % 载波频率
fm = 15e3; % 调频频率
bw = 200e3; % 带宽
t = 0:1/fs:0.01; % 生成时间序列
kf = bw/(2*fm); % 调频系数
m = sin(2*pi*fm*t); % 调制信号
s = cos(2*pi*fc*t + 2*pi*kf*cumsum(m)); % FM信号
%% 带通采样
fs_bw = 2*bw; % 带通采样频率
Ts_bw = 1/fs_bw; % 带通采样周期
t_bw = 0:Ts_bw:0.01; % 带通采样时间序列
s_bw = s.*cos(2*pi*fc*t_bw); % 带通采样信号
%% 低通滤波
fc_lp = 100e3; % 低通滤波截止频率
[b_lp, a_lp] = butter(8, fc_lp/(fs_bw/2)); % 8阶巴特沃斯低通滤波器
s_bw_lp = filter(b_lp, a_lp, s_bw); % 低通滤波后的信号
%% 解调
I = s_bw_lp.*cos(2*pi*fc*t_bw); % I分量
Q = s_bw_lp.*sin(2*pi*fc*t_bw); % Q分量
phi = atan2(Q, I); % 相位
d_phi = diff(phi); % 相位差分
d_phi = [d_phi(1), d_phi]; % 补充首个相位差分值
f_demod = d_phi/(2*pi*Ts_bw*fm); % 解调后的信号
%% 绘制频谱
N = length(f_demod); % 信号长度
F = fftshift(fft(f_demod)); % 快速傅里叶变换
f = fs_bw*(-N/2:N/2-1)/N; % 频率序列
S = abs(F); % 幅值谱
figure;
plot(f/1e3, 20*log10(S)); % 绘制频谱
xlabel('频率/kHz'); ylabel('幅值/dB');
title('解调后的信号频谱图');
运行代码后,将得到以下频谱图:
![频谱图](https://cdn.luogu.com.cn/upload/image_hosting/ed3qk3d0.png)
阅读全文