首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用测试数据的误码率

使用测试数据的误码率
EN

Stack Overflow用户
提问于 2014-11-30 23:38:12
回答 1查看 90关注 0票数 0

我有下面的代码。我想要找到比特错误率,将集群数据作为一个经过训练的数据,并发送一个测试数据。我能用这个代码做这个吗?我感谢你的积极支持。

代码语言:javascript
复制
clear all;  
clc;

T=[ 2+2*i 2-2*i -2+2*i -2-2*i];

A=randn(150,2)+2*ones(150,2); C=randn(150,2)-2*ones(150,2); B=randn(150,2)+2*ones(150,2); 
F=randn(150,2)-2*ones(150,2); D=randn(150,2)+2*ones(150,2); G=randn(150,2)-2*ones(150,2);     
E=randn(150,2)+2*ones(150,2); H=randn(150,2)-2*ones(150,2);

X = [A; B; D; C; F; E; G; H];

[idx, centroids] = kmeans(X, 4, 'Replicates', 20);

x = X(:,1); y = X(:,2);

figure; 
colors = 'rgbk'; 
[X,Y] = meshgrid(-5:0.05:5, -5:0.05:5);
X = X(:); 
Y = Y(:); 
figure; hold on; 

for idx = 1 : numel(X) 
   [dummy,ind] = min(sum(bsxfun(@minus, [X(idx) Y(idx)], centroids).^2, 2)); 
   plot(X(idx), Y(idx), [colors(ind), '.']); 
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-01 02:31:50

好吧,现在你的问题更清楚了。我不明白你在另一篇文章里的意思。好吧,看起来你的T是你的传输字母。请注意,您通过k-means获得的星系团可能与传输字母表中的星系团不一样,所以您必须弄清楚哪个质心距传输字母表最近。我们可以使用以下代码来实现这一点:

代码语言:javascript
复制
gt = zeros(1,4);
for idx = 1 : 4
    [dummy,gt(idx)] = min(sum(bsxfun(@minus, [real(T(idx)), imag(T(idx))], centroids).^2, 2));
end

gt将包含您的字母表中的哪个符号与数据中的哪个集群质心匹配。为了使结果可重复,我将随机种子生成器设置为1234 (即rng(1234);),然后运行您的代码。它给了我关于gt的以下信息

代码语言:javascript
复制
gt =

     4     2     3     1

简单地说,gt中的每个元素都告诉您T中的哪个符号与centroids中的质心匹配。因此,gt(1) = 4表示质心#1与传输字母表中的第4个符号匹配,gt(2) = 2表示质心#2与字母表中的第二个符号匹配,依此类推。

因此,给定由T中的字母表组成的测试序列,只需创建测试序列,记住gt是什么。因此,您可以这样做:

代码语言:javascript
复制
rng(1234);
rand_ind = randi(4, 10, 1);
test_sequence = T(rand_ind);
gt_labels = gt(rand_ind);

上面的代码将生成一个从1到4的随机整数序列,其中有10个。然后使用T中的字母表创建一个随机测试序列。gt_labels还将包含每个符号相对于集群质心的实际标签。现在,让我们把这些分解成真实的和想象的成分,并加入一些噪声。

代码语言:javascript
复制
x = real(test_sequence).*randn(1, 10);
y = imag(test_sequence).*randn(1, 10);

这种噪音..。比方说..。这是在您通过通信通道发送此邮件时添加的。现在我们有了我们真实的和想象的成分,让我们来弄清楚这个序列是如何被分类的。我们将使用xy,并确定每个点所属的集群:

代码语言:javascript
复制
labels = zeros(1, 10);
for idx = 1 : 10
    [dummy,labels(idx)] = min(sum(bsxfun(@minus, [x(idx), y(idx)], centroids).^2, 2));
end

labels将包含您的集群机制如何将每个点分类为。我得到了:

代码语言:javascript
复制
labels =

     1     4     3     1     4     1     2     2     2     3

同样,这是在传输之前分配给您的测试序列的标签:

代码语言:javascript
复制
gt_labels =

     4     3     2     1     1     2     2     1     1     1

因此,误码率( BER )只是简单地计算不匹配的数目,并除以总序列。你可以把它乘以100%,得到这个百分比,而不是一个比例。因此:

代码语言:javascript
复制
BER = sum(labels ~= gt_labels) / 10 * 100;

BER = 

80

因此,我们有80%的误码率.不是很好!

这应该足够让你开始工作了。希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27219637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档