matlab生成10.7MHzFM信号并进行fm数字信号正交解调后进行反正切差分运算
时间: 2023-10-25 13:08:32 浏览: 80
以下是一个可能的MATLAB代码实现:
```
% 生成10.7MHz的载波信号
fs = 50e6; % 采样率为50MHz
t = 0:1/fs:1e-4; % 生成0.1ms的时间序列
fc = 10.7e6; % 载波频率为10.7MHz
Ac = 1; % 载波幅度为1
carrier = Ac*cos(2*pi*fc*t); % 生成载波信号
% 生成调制信号
fm = 100e3; % 调频率为100kHz
kf = 10e3; % 调频灵敏度为10kHz/V
Am = 1; % 调幅度为1
mod_signal = Am*cos(2*pi*fm*t); % 生成调制信号
% 进行FM调制
kf = kf/Am; % 将调频灵敏度转换为每单位幅度的调频灵敏度
fm_signal = Ac*cos(2*pi*fc*t + 2*pi*kf*cumsum(mod_signal)/fs); % 进行FM调制
% 进行数字信号正交解调
fif = 10.7e6; % 中频为10.7MHz
I = fm_signal .* cos(2*pi*fif*t); % 乘以本振同频分量
Q = fm_signal .* sin(2*pi*fif*t); % 乘以本振正交分量
[b,a] = butter(6, 2*pi*fm/fs); % 设计6阶Butterworth低通滤波器
I_filtered = filter(b,a,I); % 对I分量进行低通滤波
Q_filtered = filter(b,a,Q); % 对Q分量进行低通滤波
demod_signal = atan2(Q_filtered, I_filtered); % 进行反正切差分运算
% 绘制结果
figure;
subplot(3,1,1);
plot(t, fm_signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('FM modulated signal');
subplot(3,1,2);
plot(t, I_filtered);
hold on;
plot(t, Q_filtered);
xlabel('Time (s)');
ylabel('Amplitude');
title('I and Q components after filtering');
legend('I component', 'Q component');
subplot(3,1,3);
plot(t, demod_signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Demodulated signal');
```
该代码生成一个10.7MHz的FM信号并进行数字信号正交解调后进行反正切差分运算,最终绘制出调制信号、I/Q分量和解调信号的波形图。其中,使用了Butterworth低通滤波器对I/Q分量进行滤波,同时使用MATLAB中的atan2函数进行反正切差分运算。
阅读全文