用matlab编写一段程序实现Am的调制解调并对程序逐行说明
时间: 2024-03-17 07:44:04 浏览: 110
好的,以下是用MATLAB编写的AM调制解调程序,并对每一行进行了解释。
```matlab
% AM modulation and demodulation
clc; clear all; close all;
%% Define parameters
fc = 100; % Carrier frequency
fm = 10; % Message frequency
fs = 10*fc; % Sampling frequency
t = 0:1/fs:1; % Time vector
Ac = 1; % Carrier amplitude
Am = 0.5; % Message amplitude
m = Am*sin(2*pi*fm*t); % Message signal
%% AM modulation
c = Ac*sin(2*pi*fc*t); % Carrier signal
s = (1+m./Am).*c; % Modulated signal
%% AM demodulation
s_rec = s.*c; % Product of modulated signal and carrier
[b,a] = butter(5,2*fm/fs); % Butterworth LPF design
m_rec = filtfilt(b,a,s_rec); % LPF output
%% Plot results
figure;
subplot(311);
plot(t,m);
xlabel('Time (s)');
ylabel('Message signal');
title('AM modulation and demodulation');
subplot(312);
plot(t,s);
xlabel('Time (s)');
ylabel('Modulated signal');
subplot(313);
plot(t,m_rec);
xlabel('Time (s)');
ylabel('Recovered message signal');
```
这一段代码主要是AM调制和解调的实现,并包括结果的绘制。
首先是定义了一些参数,包括载波频率fc、信号频率fm、采样频率fs、时间向量t、载波幅度Ac、信号幅度Am和消息信号m。
然后是AM调制的实现。首先创建了一个载波信号c,然后通过使用幅度调制的公式,将消息信号m和载波信号c相乘,得到调制信号s。
接着是AM解调的实现。首先将调制信号s和载波信号c相乘,得到乘积信号s_rec。然后使用Butterworth低通滤波器进行信号恢复,通过设计滤波器的阶数和截止频率,得到滤波器系数b和a。最后使用filtfilt函数对乘积信号进行滤波,得到解调后的消息信号m_rec。
最后是绘制结果,包括绘制消息信号m、调制信号s和恢复的消息信号m_rec的图形,分别用subplot函数绘制在三个子图中。
阅读全文