查看: 1426|回复: 9|关注: 0

[已解决] Matlab实现加性高斯白噪声信道(AWGN)下的digital调制格式识别分类

[复制链接]

新手

36 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
10 财富积分
本帖最后由 814685372 于 2020-6-8 14:06 编辑

请问这个代码我出错辽  有没有大佬看看怎么改
clear all;
clc;

%%参数设置
snr_mini = 5;               %信噪比最小值
snr_max = 20;               %信噪比最大值
TxSampleRate = 32e9;        %信号的码元速率
TxLinewidth = 0;            %发射信号的载波线宽
TxCarrierRate = 0;          %发射信号的载波频率
DataSymbolNumber = 10000;   %数据点的个数
ClassifySetNumber = 100;    %独立仿真的次数
printJ = 5;                 %需要输出观察的调制方式,0为不输出
printXingZuo = 1;           %是否需要打印星座图,0为不打印

% signal generation;如果想要进行100组独立的测试,可以建立100次循环,产生100组独立的数据
for j = 1:6  % bit per symbol: 1. PSK; 2. QPSK; 3.8QAM; 4. 16QAM; 5. 32QAM; 6.64QAM...
System.BitPerSymbol = j;
snr = snr_mini:snr_max;  %SNR信噪比的设置,单位dB
classify_correct_ratio = zeros(length(snr), 1);
for snrIndex= 1:length(snr)
if(j==printJ) fprintf('\n--------------- snr = %d ------------\n',snr(snrIndex)); end
classify_correct = 0;

for i = 1:ClassifySetNumber
Tx.SampleRate = TxSampleRate; %symbol Rate,信号的码元速率,可以自行定义
Tx.Linewidth = TxLinewidth;%发射信号的载波的线宽,一般与信号的相位噪声有关
Tx.Carrier = DataSymbolNumber;%发射信号的载波频率
M = 2^System.BitPerSymbol;
%%信号生成


Tx.DataSymbol = randi([0 M-1],1,DataSymbolNumber);%每一次随机产生的数据量

%数据的不同调制方式产生:这里把2^3(8QAM)的形式单独拿出来设置,是为了实现最优的星型8QAM星座图
        if M ~= 8;
            h = modem.qammod('M', M, 'SymbolOrder', 'Gray');
            Tx.DataConstel = modulate(h,Tx.DataSymbol);
        else
            tmp = Tx.DataSymbol;
            tmp2  = zeros(1,length(Tx.DataSymbol));
            for kk = 1:length(Tx.DataSymbol)

                switch tmp(kk)
                    case 0
                        tmp2(kk) = 1 + 1i;
                    case 1
                        tmp2(kk) = -1 + 1i;
                    case 2
                        tmp2(kk) = -1 - 1i;
                    case 3
                        tmp2(kk) = 1 - 1i;
                    case 4
                        tmp2(kk) = 1+sqrt(3);
                    case 5
                        tmp2(kk) = 0 + 1i .* (1+sqrt(3));
                    case 6
                        tmp2(kk) = 0 - 1i .* (1+sqrt(3));
                    case 7
                        tmp2(kk) = -1-sqrt(3);
                end
            end
            Tx.DataConstel = tmp2;
            clear tmp tmp2;
        end



Tx.Signal = Tx.DataConstel;

%数据的载波加载,考虑到相位噪声等
N = length(Tx.Signal);
dt = 1/Tx.SampleRate;
t = dt*(0:N-1);
Phase1 = [0, cumsum(normrnd(0,sqrt(2*pi*Tx.Linewidth/(Tx.SampleRate)), 1, N-1))];
carrier1 = exp(1i*(2*pi*t*Tx.Carrier + Phase1));
Tx.Signal = Tx.Signal.*carrier1;


Rx.Signal = awgn(Tx.Signal,snr(snrIndex),'measured');%数据在AWGN信道下的接收

%%信号识别
CMAOUT = Rx.Signal;

%去除直流成分
CMAOUT = CMAOUT - mean(CMAOUT);

%normalization接收信号功率归一化
CMAOUT=CMAOUT/sqrt(mean(abs(CMAOUT).^2));

s = CMAOUT;
signalpow = mean(abs(s).^2);%信号功率
noisepow = signalpow/(10^(snr(snrIndex)/10));%噪声功率
C20_hat = mean(s.^2);
C21_hat = mean(abs(s).^2);
C21_hat = C21_hat-noisepow;%计算信号二阶累积量C21时,由于C21为信号模的平方
                           %而我们接收的s是在AWGN信道下接收的,所以求C21时还应考虑噪声功率。
C40_hat = mean(s.^4)-3*C20_hat^2;
%C41_hat = mean((s.^3).*conj(s))-3*C20_hat*C21_hat;
C42_hat = mean(abs(s).^4)-abs(C20_hat)^2-2*C21_hat^2;

C40_normal = C40_hat/C21_hat.^2;
%C42_normal = C42_hat/C21_hat.^2;

AbsC40 = abs(C40_normal);
if(j==printJ)    fprintf('%g   ',AbsC40);   end
if(AbsC40>=1.5)%PSK
    classify = 1;
elseif(AbsC40>=0.9&&AbsC40<1.1)%QPSK
    classify = 2;
elseif(AbsC40>=1.1&&AbsC40<1.3)%8QAM
    classify = 3;
elseif(AbsC40>=0.67&&AbsC40<0.9)%16QAM
    classify = 4;
elseif(AbsC40<0.35)%32QAM
    classify = 5;
elseif(AbsC40>=0.35&&AbsC40<0.63)%64QAM
    classify = 6;
end

if(classify == System.BitPerSymbol)
    classify_correct = classify_correct + 1;
end

%subplot(1,7,snrIndex);%绘制原始噪声
%plot(Rx.Signal,'.');
%plot(CMAOUT,'.');
end
classify_correct_ratio(snrIndex) = classify_correct/ClassifySetNumber*100;
end
%%绘制图形
figure(1);subplot(2, 3, j);
plot(snr, classify_correct_ratio, '-b.');
axis([snr_mini snr_max 0 110]);
ylabel('识别正确率/%');
xlabel('信噪比/dB');
if(j == 1)
    title('PSK调制方式识别');
elseif(j == 2)
    title('QPSK调制方式识别');
elseif(j == 3)
    title('8QAM调制方式识别');
elseif(j == 4)
    title('16QAM调制方式识别');
elseif(j == 5)
    title('32QAM调制方式识别');
else
    title('64QAM调制方式识别');
end

if(printXingZuo==1)
figure(2);subplot(2, 3, j);
plot(real(CMAOUT),imag(CMAOUT),'.');
if(j == 1)
    title('PSK调制方式星座图');
elseif(j == 2)
    title('QPSK调制方式星座图');
elseif(j == 3)
    title('8QAM调制方式星座图');
elseif(j == 4)
    title('16QAM调制方式星座图');
elseif(j == 5)
    title('32QAM调制方式星座图');
else
    title('64QAM调制方式星座图');
end
end

end

错误使用 modem.qammod (line 82)
MODEM.QAMMOD has been removed. Use QAMMOD instead.

出错 Untitled (line 36)
            h = modem.qammod('M', M, 'SymbolOrder', 'Gray');



回复主题 已获打赏: 0 积分

举报

新手

36 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2020-6-8 12:38:51 | 显示全部楼层
我发不了链接  百度搜索这个标题就能看到完整的代码帖子(有解释过程啥的) 我按他的提示把MODEM.QAMMOD 换成了 QAMMOD 还是不行
回复此楼 已获打赏: 0 积分

举报

新手

36 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2020-6-8 13:58:33 | 显示全部楼层
h = modem.qammod('M', M, 'SymbolOrder', 'Gray');
感觉上是这一行出错了  MATLAB更新了 表达方式变了  但我不知道怎么改
回复此楼 已获打赏: 0 积分

举报

新手

49 麦片

财富积分


050


24

主题

224

帖子

6

最佳答案
  • 关注者: 4
发表于 2020-6-11 14:39:14 | 显示全部楼层 |此回复为最佳答案
原博主很好的帖子和问题,可惜我不是学通信的,基础理论那些调制方式还是不懂,我的matlab2015b,直接跑,结果和帖子里面一样,跑了两次,一次是你的代码,一次是帖子的,结果一样,哈哈 ,希望能帮到你
回复此楼 已获打赏: 0 积分

举报

新手

36 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2020-6-12 11:36:03 | 显示全部楼层
Adel 发表于 2020-6-11 14:39
原博主很好的帖子和问题,可惜我不是学通信的,基础理论那些调制方式还是不懂,我的matlab2015b,直接跑, ...

请问是能跑出来吗  还是跟我一样出错了
回复此楼 已获打赏: 0 积分

举报

新手

49 麦片

财富积分


050


24

主题

224

帖子

6

最佳答案
  • 关注者: 4
发表于 2020-6-12 12:08:51 | 显示全部楼层
814685372 发表于 2020-6-12 11:36
请问是能跑出来吗  还是跟我一样出错了

和原帖子结果一样  就是能出图
回复此楼 已获打赏: 0 积分

举报

新手

36 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2020-6-16 10:20:06 | 显示全部楼层
Adel 发表于 2020-6-12 12:08
和原帖子结果一样  就是能出图

能加你qq 把图发给我吗 我网上查变换版本要卸了重下  我给你最佳答案 谢谢啦
回复此楼 已获打赏: 0 积分

举报

新手

49 麦片

财富积分


050


24

主题

224

帖子

6

最佳答案
  • 关注者: 4
发表于 2020-6-16 15:00:42 | 显示全部楼层
814685372 发表于 2020-6-16 10:20
能加你qq 把图发给我吗 我网上查变换版本要卸了重下  我给你最佳答案 谢谢啦 ...

你确定需要matlab跑出来的图?真的跟原帖子一模一样啊,要的话我跑了在这附加图片给你
另外,matlab你重装一个版本就行了,装不同路径就行,以前我就有两个版本,不用卸载你现在的,打开时你自己搞得清楚开的哪个就行。
回复此楼 已获打赏: 0 积分

举报

新手

36 麦片

财富积分


050


1

主题

6

帖子

0

最佳答案
 楼主| 发表于 2020-6-18 18:11:55 | 显示全部楼层
Adel 发表于 2020-6-16 15:00
你确定需要matlab跑出来的图?真的跟原帖子一模一样啊,要的话我跑了在这附加图片给你
另外,matlab你重装 ...

我下了一个2015b成功啦 谢谢啦
回复此楼 已获打赏: 0 积分

举报

新手

49 麦片

财富积分


050


24

主题

224

帖子

6

最佳答案
  • 关注者: 4
发表于 2020-6-22 16:15:50 | 显示全部楼层
814685372 发表于 2020-6-18 18:11
我下了一个2015b成功啦 谢谢啦

不客气哈哈 加油实干出成绩哈:handshake
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表