生成单音信号、QPSK信号、MSK信号、OFDM信号的matlab代码,要求符号样点、采样频率、载频可调
时间: 2023-08-07 18:05:04 浏览: 608
以下是生成单音信号、QPSK信号、MSK信号、OFDM信号的 MATLAB 代码,其中包括符号样点、采样频率和载频可调的参数。
1. 生成单音信号
```matlab
% 设置参数
fs = 44100; % 采样频率
f0 = 1000; % 载频频率
duration = 1; % 信号时长
% 生成单音信号
t = 0:1/fs:duration-1/fs;
x = sin(2*pi*f0*t);
```
2. 生成 QPSK 信号
```matlab
% 设置参数
fs = 44100; % 采样频率
fc = 2000; % 载频频率
Tsym = 0.001; % 符号持续时间
Ts = 0.0001; % 采样间隔
M = 4; % 调制阶数
% 生成 QPSK 星座图
qpsk = exp(1j*pi/4*[0 1 3 2]);
% 生成随机符号序列
data = randi([0 M-1],1,100);
% QPSK 调制
symbols = qpsk(data+1);
% 设置时间轴
t = 0:Ts:Tsym-Ts;
% 生成基带信号
x = zeros(1,length(symbols)*length(t));
for i=1:length(symbols)
x((i-1)*length(t)+1:i*length(t)) = symbols(i)*rectpuls(t-Tsym/2,Tsym);
end
% 生成载波信号
carrier = cos(2*pi*fc*(0:length(x)-1)/fs);
% 信号叠加
x = real(x.*carrier);
```
3. 生成 MSK 信号
```matlab
% 设置参数
fs = 44100; % 采样频率
fc = 2000; % 载频频率
Tsym = 0.001; % 符号持续时间
Ts = 0.0001; % 采样间隔
fdev = 1000; % 频偏
% 生成随机符号序列
data = randi([0 1],1,100);
% 生成 MSK 调制信号
f1 = fc + fdev; % 频率为 fc+fdev 的载波信号
f2 = fc - fdev; % 频率为 fc-fdev 的载波信号
symbols = zeros(size(data));
symbols(1) = exp(1j*pi*data(1));
for i=2:length(data)
if data(i)==data(i-1)
symbols(i) = symbols(i-1)*exp(1j*2*pi*f1*Tsym);
else
symbols(i) = symbols(i-1)*exp(1j*2*pi*f2*Tsym);
end
end
% 设置时间轴
t = 0:Ts:Tsym-Ts;
% 生成基带信号
x = zeros(1,length(symbols)*length(t));
for i=1:length(symbols)
x((i-1)*length(t)+1:i*length(t)) = symbols(i)*rectpuls(t-Tsym/2,Tsym);
end
% 生成载波信号
carrier = cos(2*pi*fc*(0:length(x)-1)/fs);
% 信号叠加
x = real(x.*carrier);
```
4. 生成 OFDM 信号
```matlab
% 设置参数
fs = 44100; % 采样频率
fc = 2000; % 载频频率
Tsym = 0.001; % 符号持续时间
Ts = 0.0001; % 采样间隔
M = 16; % 调制阶数
N = 64; % 子载波数
CP = 16; % 循环前缀长度
% 生成随机符号序列
data = randi([0 M-1],1,N);
% OFDM 调制
symbols = ifft(data);
% 添加循环前缀
symbols_cp = [symbols(end-CP+1:end) symbols];
% 将符号序列串行化
x = symbols_cp(:)';
% 生成载波信号
carrier = cos(2*pi*fc*(0:length(x)-1)/fs);
% 信号叠加
x = real(x.*carrier);
```
阅读全文