matlab生成10.7MHz的FM模拟中频信号,带宽为200k,fm为15khz,之后进行带通采样,然后得到IQ分量并低通滤波,在进行反正切差分运算求出解调信号,给出对应图形并给出频谱
时间: 2024-05-28 13:08:42 浏览: 137
以下是一个可能的MATLAB代码实现:
%% 生成FM信号
fs = 50e6; % 采样频率
t = 0:1/fs:1-1/fs; % 时域采样点
fc = 10.7e6; % 载波频率
fm = 15e3; % 调频频率
beta = 5; % 调制指数
x = cos(2*pi*fc*t + beta*sin(2*pi*fm*t)); % FM信号
%% 带通采样
fIF = 10.5e6; % 中频频率
fBW = 200e3; % 带宽
fsIF = 2*fBW; % 采样频率
tsIF = 1/fsIF; % 采样间隔
tIF = 0:tsIF:(length(x)-1)*tsIF; % 采样时刻
yIF = x .* exp(-1i*2*pi*fIF*t); % 移频到中频
yIF_sampled = yIF(1:(fs/fsIF):end); % 带通采样
%% 得到IQ分量
fcIF = fIF - fc; % 中频频率对应的基带频率
I = real(yIF_sampled .* exp(1i*2*pi*fcIF*tIF)); % 实部为I分量
Q = imag(yIF_sampled .* exp(1i*2*pi*fcIF*tIF)); % 虚部为Q分量
%% 低通滤波
fcLPF = 20e3; % 低通滤波器截止频率
[b, a] = butter(4, fcLPF/(fsIF/2)); % 4阶Butterworth滤波器
I_filtered = filter(b, a, I); % I分量低通滤波
Q_filtered = filter(b, a, Q); % Q分量低通滤波
%% 反正切差分解调
z = I_filtered + 1i*Q_filtered; % 得到IQ信号
theta = angle(z); % 反正切求相位
demodulated = diff(theta); % 差分求解调信号
demodulated = [demodulated(1); demodulated]; % 补回第一个采样点
%% 画图
figure;
subplot(3,1,1); plot(t*1e3, x); xlabel('时间(ms)'); ylabel('幅度');
title('FM信号');
subplot(3,1,2); plot(tIF*1e6, abs(yIF_sampled)); xlabel('时间(us)'); ylabel('幅度');
title('带通采样后的信号');
subplot(3,1,3); plot(tIF*1e6, demodulated); xlabel('时间(us)'); ylabel('幅度');
title('解调信号');
%% 计算频谱
N = length(yIF_sampled); % 采样点数
f = linspace(-fs/2, fs/2, N); % 频域采样点
Y = fftshift(fft(yIF_sampled)); % FFT
D = fftshift(fft(demodulated)); % 解调信号FFT
figure;
subplot(2,1,1); plot(f/1e6, abs(Y)); xlabel('频率(MHz)'); ylabel('幅度');
title('带通采样后的信号频谱');
subplot(2,1,2); plot(f/1e6, abs(D)); xlabel('频率(MHz)'); ylabel('幅度');
title('解调信号频谱');
注:代码中的各种参数和滤波器设计可能需要根据具体情况进行调整。
阅读全文