matlab生成10.7MHz的FM模拟中频广播信号,带宽为200k,fm为15khz,之后进行带通采样,然后得到IQ分量并低通滤波,在进行反正切差分运算求出解调信号,并绘制出频谱
时间: 2024-05-21 18:13:04 浏览: 67
以下是一种可能的 Matlab 实现:
% 生成 FM 信号
fs = 100e6; % 采样率
t = 0:1/fs:1; % 时间序列
fm = 15e3; % 调制频率
fc = 10.7e6; % 载频频率
kf = 2*pi*fm; % 频率偏移系数
ac = 1; % 载波幅度
m = cos(2*pi*fm*t); % 调制信号
s = ac*cos(2*pi*fc*t + kf*cumsum(m)); % FM 信号
% 带通采样
B = 200e3; % 带宽
f1 = fc - B/2; % 下限频率
f2 = fc + B/2; % 上限频率
fsamp = 2*B; % 采样率
tsamp = 1/fsamp; % 采样间隔
nsamp = length(t); % 采样点数
samp_idx = round((f1-fc)/fs*nsamp) : round((f2-fc)/fs*nsamp); % 采样索引
samp_t = samp_idx/fs; % 采样时间序列
samp_s = s(samp_idx); % 采样信号
% 生成 LO 信号
fLO = fc - B/2; % LO 频率
LO = cos(2*pi*fLO*samp_t) + 1j*sin(2*pi*fLO*samp_t); % LO 信号
% IQ 分量
IQ = samp_s .* LO; % IQ 分量
% 低通滤波
fcut = 50e3; % 截止频率
[b, a] = butter(8, fcut/(fsamp/2)); % 8 阶巴特沃斯滤波器
IQ_filt = filter(b, a, IQ); % 低通滤波后的 IQ 分量
% 解调信号
demod_s = diff(unwrap(angle(IQ_filt))); % 反正切差分运算
% 绘制频谱
NFFT = 2^nextpow2(length(demod_s)); % FFT 长度
f = fsamp/2*linspace(0, 1, NFFT/2+1); % 频率序列
spec = fft(demod_s, NFFT)/length(demod_s); % FFT
spec = 2*abs(spec(1:NFFT/2+1)); % 单侧幅度谱
plot(f, spec); % 绘制频谱图
xlabel('频率 (Hz)');
ylabel('幅度');
title('解调信号频谱');
阅读全文