matlab实现10.7MHZFM数字信号正交解调
时间: 2023-11-02 12:53:29 浏览: 86
以下是一个可能的MATLAB代码实现:
% 设置参数
fc = 10.7e6; % 载波频率
fs = 44.1e3; % 采样频率
N = 1024; % 每个符号的采样点数
T = N/fs; % 每个符号的时间
fdev = 75e3; % 频率偏移量
M = 16; % 符号数
% 生成调制信号
t = 0:1/fs:M*T-1/fs;
msg = randi([0 1],1,M); % 随机生成二进制信息
symbols = 2*msg-1; % 将二进制信息映射到正交调制符号
carrier = cos(2*pi*fc*t); % 载波信号
modulated = zeros(size(t));
for i = 1:M
modulated((i-1)*N+1:i*N) = symbols(i)*carrier((i-1)*N+1:i*N);
end
modulated = fmmod(modulated,fc,fs,fdev); % FM调制
% 正交解调
t = 0:1/fs:M*T-1/fs;
carrier1 = cos(2*pi*fc*t); % 正交信号1
carrier2 = sin(2*pi*fc*t); % 正交信号2
demodulated1 = fmmod(modulated,fc,fs,fdev,'pm'); % PM解调
demodulated2 = fmmod(modulated,fc,fs,fdev+90e3,'pm'); % PM解调
demodulated = demodulated1.*carrier1 + demodulated2.*carrier2; % 正交解调
% 提取符号
symbols_hat = zeros(1,M);
for i = 1:M
symbols_hat(i) = mean(demodulated((i-1)*N+1:i*N))/sqrt(T);
end
msg_hat = (symbols_hat > 0); % 将符号映射回二进制信息
% 绘图
figure;
subplot(2,1,1);
plot(t,msg,'o-');
title('原始信息');
xlabel('时间/s');
ylabel('二进制值');
subplot(2,1,2);
plot(t,msg_hat,'o-');
title('解调后的信息');
xlabel('时间/s');
ylabel('二进制值');
阅读全文