MATLAB数字信号调制解调仿真

MATLAB数字信号调制解调仿真

1. 参数设置

% 参数设置
M = 4; % 调制阶数(例如,4表示4-ASK、4-PSK、4-FSK)
fs = 1000; % 采样频率(Hz)
fc = 100; % 载波频率(Hz)
T = 1; % 符号持续时间(秒)
N = T * fs; % 每个符号的采样点数
numSymbols = 1000; % 符号数量
EbNo = 10; % 能量与噪声比(dB)

2. 生成随机数据

% 生成随机数据
data = randi([0, M-1], 1, numSymbols);

3. 调制过程

3.1 ASK调制
% ASK调制
askModulated = zeros(1, numSymbols * N);
for i = 1:numSymbols
    symbol = data(i);
    t = (0:N-1) / fs; % 时间向量
    askModulated((i-1)*N+1:i*N) = symbol * cos(2 * pi * fc * t);
end
3.2 PSK调制
% PSK调制
pskModulated = zeros(1, numSymbols * N);
for i = 1:numSymbols
    symbol = data(i);
    t = (0:N-1) / fs; % 时间向量
    pskModulated((i-1)*N+1:i*N) = cos(2 * pi * fc * t + 2 * pi * symbol / M);
end
3.3 FSK调制
% FSK调制
fskModulated = zeros(1, numSymbols * N);
for i = 1:numSymbols
    symbol = data(i);
    t = (0:N-1) / fs; % 时间向量
    fskModulated((i-1)*N+1:i*N) = cos(2 * pi * (fc + symbol * fc / M) * t);
end

4. 信道模型(加性高斯白噪声)

% 信道模型(AWGN)
noise = (randn(1, numSymbols * N) + 1j * randn(1, numSymbols * N)) / sqrt(2) * 10^(-EbNo/20);
askReceived = askModulated + noise;
pskReceived = pskModulated + noise;
fskReceived = fskModulated + noise;

5. 解调过程

5.1 ASK解调
% ASK解调
askDemodulated = zeros(1, numSymbols);
for i = 1:numSymbols
    receivedSignal = askReceived((i-1)*N+1:i*N);
    askDemodulated(i) = round(abs(mean(receivedSignal)));
end
5.2 PSK解调
% PSK解调
pskDemodulated = zeros(1, numSymbols);
for i = 1:numSymbols
    receivedSignal = pskReceived((i-1)*N+1:i*N);
    angle = angle(mean(receivedSignal));
    pskDemodulated(i) = round(angle / (2 * pi / M));
end
5.3 FSK解调
% FSK解调
fskDemodulated = zeros(1, numSymbols);
for i = 1:numSymbols
    receivedSignal = fskReceived((i-1)*N+1:i*N);
    fskDemodulated(i) = round((mean(receivedSignal) - fc) / (fc / M));
end

6. 误码率计算

% 误码率计算
BER_ask = sum(abs(data - askDemodulated)) / numSymbols;
BER_psk = sum(abs(data - pskDemodulated)) / numSymbols;
BER_fsk = sum(abs(data - fskDemodulated)) / numSymbols;

fprintf('ASK误码率 (BER): %.4f\n', BER_ask);
fprintf('PSK误码率 (BER): %.4f\n', BER_psk);
fprintf('FSK误码率 (BER): %.4f\n', BER_fsk);

7. 绘图

% 绘制调制信号
t = (0:numSymbols*N-1) / fs;
figure;
subplot(3, 1, 1);
plot(t, askModulated);
title('ASK调制信号');
xlabel('时间 (s)');
ylabel('振幅');

subplot(3, 1, 2);
plot(t, pskModulated);
title('PSK调制信号');
xlabel('时间 (s)');
ylabel('振幅');

subplot(3, 1, 3);
plot(t, fskModulated);
title('FSK调制信号');
xlabel('时间 (s)');
ylabel('振幅');

参考 MATLAB数字信号调制解调(ask,psk,fsk等)仿真

posted @ 2025-07-02 10:10  吴逸杨  阅读(39)  评论(0)    收藏  举报