fm调制解调matlab代码
时间: 2023-05-15 09:03:49 浏览: 138
FM调制解调是一种基于角频率调制的调制技术,由于其在大容量数据传输和下行通信系统中的优势而被广泛应用。下面将介绍在MATLAB中实现FM调制解调的代码实现。
FM调制的代码实现:
首先,在MATLAB中定义调制信号的罗兰斯(rose)和基带信号,然后使用MATLAB中的linspace()函数生成时间范围内的离散时间点:
%定义基带信号
fb = 0.5; %base frequency
Am = 1; % amplitude
t = linspace(0, 10, 1000); %time range
fm = Am*cos(2*pi*fb*t); %modulating signal
%定义调制信号的罗兰斯和频率偏移
fc = 10;
Ac = 10;
kf = 2*pi; % frequency sensitivity
theta = 2*pi*fc*t + kf*cumsum(fm); % angle modulated
%画出调制信号和基带信号的图像
subplot(2, 1, 1);
plot(t, fm, 'k');
title('Baseband Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2, 1, 2);
plot(t, Ac*cos(theta), 'k');
title('FM Signal');
xlabel('Time (s)');
ylabel('Amplitude');
FM解调的代码实现:
解调是将接收到的信号恢复到原始基带信号的过程。在MATLAB中,使用hilbert()函数来计算调制信号的分析信号,然后再根据FIR低通滤波器实现解调:
%解调器代码
analytic_signal = hilbert(Ac*cos(theta)); % compute the analytic signal
envelope = abs(analytic_signal); % compute the magnitude
[b,a] = fir1(200,[2*fb/fc]); % FIR LPF design
demod_signal = 2*filter(b, a, envelope); % demodulation
subplot(2, 1, 1);
plot(t, envelope, 'k');
title('FM Envelope');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2, 1, 2);
plot(t, demod_signal, 'k');
title('Demodulated Signal');
xlabel('Time (s)');
ylabel('Amplitude');
以上就是FM调制解调在MATLAB中的代码实现。
阅读全文