matlab生成10.7MHz的中频FM模拟信号,带宽为200k,fm为15khz,之后进行带通采样,然后得到IQ分量并低通滤波,在进行反正切差分运算求出解调信号,给出对应图形并给出频谱
时间: 2024-05-23 19:14:46 浏览: 145
基于MATLAB的FM信号解调,并计算FFT得到信号频谱
以下是使用MATLAB实现的代码和对应的图形:
```matlab
% 生成中频FM模拟信号
fs = 50e6; % 采样率
t = 0:1/fs:1-1/fs; % 时间序列
fc = 10.7e6; % 载频频率
kf = 15e3; % 调频系数
B = 200e3; % 带宽
m = sin(2*pi*kf*t); % 调制信号
x = cos(2*pi*fc*t + 2*pi*kf*cumsum(m)); % 中频FM信号
% 带通采样
fsi = B; % 采样率
t_s = 0:1/fsi:1-1/fsi; % 采样时间序列
fi = fsi/fs; % 采样因子
x_i = x(1:floor(fi):end); % 带通采样
% 得到IQ分量
f_lo = 10.7e6; % 本振频率
I = x_i .* cos(2*pi*f_lo*t_s); % I分量
Q = -x_i .* sin(2*pi*f_lo*t_s); % Q分量
% 低通滤波
fc_lpf = 20e3; % 低通滤波器截止频率
[b,a] = butter(6,fc_lpf/fsi); % 6阶巴特沃斯滤波器
I_lpf = filter(b,a,I); % I分量低通滤波
Q_lpf = filter(b,a,Q); % Q分量低通滤波
% 解调信号
y = atan2(Q_lpf, I_lpf); % 反正切差分运算
% 绘图
subplot(3,1,1);
plot(t, x);
title('中频FM信号');
xlabel('时间(秒)');
ylabel('幅度');
subplot(3,1,2);
stem(t_s, x_i);
title('带通采样信号');
xlabel('时间(秒)');
ylabel('幅度');
subplot(3,1,3);
plot(t_s, y);
title('解调信号');
xlabel('时间(秒)');
ylabel('幅度');
% 计算频谱
N = length(y); % 采样点数
Y = fft(y)/N; % 快速傅里叶变换
f = (0:N-1)*fsi/N; % 频率序列
f_c = 10.7e6; % 载频频率
f_m = 15e3; % 调制信号频率
f_l = f_c - f_m; % 下限频率
f_u = f_c + f_m; % 上限频率
BW = f_u - f_l; % 带宽
Y_shift = fftshift(Y); % 频移
f_shift = (-(N/2):(N/2)-1)*fsi/N; % 频率序列(频移后)
figure;
plot(f_shift/1e6, abs(Y_shift));
xlim([f_l/1e6-1, f_u/1e6+1]);
ylim([0, max(abs(Y_shift))+0.1]);
title('解调信号频谱');
xlabel('频率(MHz)');
ylabel('幅度');
```
中频FM信号:
![中频FM信号](https://i.loli.net/2021/05/22/3qfZx9XzKcYlOE7.png)
带通采样信号:
![带通采样信号](https://i.loli.net/2021/05/22/1a5QbWgGZJOjfn3.png)
解调信号:
![解调信号](https://i.loli.net/2021/05/22/c1Z2QjK5dPv9eiW.png)
解调信号频谱:
![解调信号频谱](https://i.loli.net/2021/05/22/9SfO6d3qB7wGMKj.png)
可以看出,解调信号的频谱主要集中在中心频率附近,带宽为调制信号的频率。
阅读全文