|
发表于 20-12-2009 10:37 PM
|
显示全部楼层
好吧,我就和大家分享一下我这位“老百姓”的愚见,认识资料修复的故事,希望大家能从故事中得到灵感,如有 ...
chtan36 发表于 11-11-2009 09:08 PM
/******************************************************************
发送器:
data format:: start bit + 1024 bits data + CRC
当用户“执行”时,传送1次讯号
接收器规格:
当CRC正确时才处理接收的资料。
接收器在同一个端口要应付255个发送器。
从发送器1 到 发送器1 费时1秒
客户投诉:
发送t 100x 收到 10x..
/*****************************************************************
如果你是小明你会选择那一种方式,为什么
a)更改发送器的软件,曾加发送次数。
b) 修改通讯协议。
c) 其他。
我会选
b) 修改通讯协议-类似tcp的做法。connection-oriented protocol.
同时间用manchestor code之类的coding来接受/发送data. |
|
|
|
|
|
|
|
楼主 |
发表于 20-12-2009 11:08 PM
|
显示全部楼层
回复 20# fritlizt
其实我想表达的是checksum,parity,CRC... 它能告诉你一串资料错误,一个byte错误,一个Row错误,但不能准确的指出错误 ”bit“ 的位置,所以就算你的Checksum, parity, CRC 不受杂讯影响你也无法修复资料。
以前我老师经常强调数码技术的处理在于善用“记忆”,你的FIR filter, IIR filter, echo cancellation, state machine。。。。哪一样不是记得“之前”或“之后”的状况,要用数位杂讯处理你必须要将“记忆”融入code 中,如何在code 中融入“记忆”就让cari的专家想想吧,我这位老百姓洗耳恭听。 |
|
|
|
|
|
|
|
楼主 |
发表于 20-12-2009 11:27 PM
|
显示全部楼层
回复 21# fritlizt
几年前小弟曾出席4G的讲座会,会上一位博士曾说到:“通讯是一个很矛盾的东西,你提升传送速度不见得接收速度提升,你增加发送的数据不见得接收速度变慢”。。。为什么?就请cari的专家解答咯 |
|
|
|
|
|
|
|
发表于 20-12-2009 11:32 PM
|
显示全部楼层
回复 fritlizt
其实我想表达的是checksum,parity,CRC... 它能告诉你一串资料错误,一个byte错误,一个 ...
chtan36 发表于 20-12-2009 11:08 PM
所以我想了很久, 还是想不到。
我不敢排除可能有algo可以知道那个bit有问题。
以前有遇过着类似的试题,我想了想,我回答“由于考虑data,checksum一直出错的可能性,加上xx因素, 无解。”
哈哈哈哈。 |
|
|
|
|
|
|
|
发表于 20-12-2009 11:38 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 21-12-2009 09:07 PM
|
显示全部楼层
回复 24# fritlizt
就拿parity方式来说吧,如果你只用parity,当data和parity bit 不match时你知道哪里出错吗?是bit 0?bit 1? bit 2? bit 3?...bit 7?, parity bit? 还是multiple error?在这么多可能性下几乎没有一个algo肯定的解开error bit 的位置,其难度就像下例。
3x+4y+5z=1234567
2x+80y+50z=456789
解 x,y,z (insufficient information) |
|
|
|
|
|
|
|
楼主 |
发表于 21-12-2009 09:11 PM
|
显示全部楼层
回复 25# fritlizt
paiseh 老百姓的中文只有小六水准,所以翻译难免会有错误。。。。
“你增加发送的数据不见得接收速度变慢”,所谓的数据是指data length, 在原有的data添加资料修复码(correction bits)... |
|
|
|
|
|
|
|
发表于 21-12-2009 11:04 PM
|
显示全部楼层
回复 fritlizt
paiseh 老百姓的中文只有小六水准,所以翻译难免会有错误。。。。
“你增加发送的 ...
chtan36 发表于 21-12-2009 09:11 PM
“你增加发送的数据不见得接收速度变慢”,所谓的数据是指data length, 在原有的data添加资料修复码(correction bits)...
没错 |
|
|
|
|
|
|
|
发表于 21-12-2009 11:09 PM
|
显示全部楼层
回复 fritlizt
就拿parity方式来说吧,如果你只用parity,当data和parity bit 不match时你知道哪里出错吗?是bit 0?bit1? bit 2? bit 3?...bit 7?, parity bit? 还是multipleerror?在这么多可能性下几乎没有一个algo肯定的解开error bit 的位置,其难度就像下例。
3x+4y+5z=1234567
2x+80y+50z=456789
解 x,y,z (insufficient information)
chtan36 发表于 21-12-2009 09:07 PM
没错。parity bit你只能懂bit error.哪一个就头大鸟。 或者两个bit toggle了, 也是头大。
3x+4y+5z=1234567
2x+80y+50z=456789
这个的确有难度。 假设是diaphontine equation,只能是整数解的话。
那么只需要assume其中一个value就可以了。 答案有可能是无解,多解,或者无限多解。
好吧,我就和大家分享一下我这位“老百姓”的愚见,认识资料修复的故事,希望大家能从故事中得到灵感,如有错误请纠正我这位“老百姓”吧。
小明是一位软体工程师,有一天老板面对了一个问题,他对小明说
老板:“小明,客户老是投诉我们的接收器不明感”
小明:“那么找到原因了吗?”
老板:“根据硬件工程师的报告,是因为资料在传送的过程中被杂讯干扰”
小明:“既然是杂讯为何不让硬件工程师解决呢?”
老板:“如果更改硬件,那么我们就必须从新测试,费用很高。”
小明:“那么老板是要我从软件下手咯?”
老板:“是的,我希望你能利用软件来解决这问题”
/******************************************************************
发送器:
data format:: start bit + 1024 bits data + CRC
当用户“执行”时,传送1次讯号
接收器规格:
当CRC正确时才处理接收的资料。
接收器在同一个端口要应付255个发送器。
从发送器1 到 发送器1 费时1秒
客户投诉:
发送t 100x 收到 10x..
/*****************************************************************
如果你是小明你会选择那一种方式,为什么
a)更改发送器的软件,曾加发送次数。
b) 修改通讯协议。
c) 其他。
讲回这个case.假设是你面对的话, 你会怎么做, 为什么?看了几个人的回复, 对你的做法也有兴趣。
大家交流交流。 |
|
|
|
|
|
|
|
发表于 22-12-2009 10:31 AM
|
显示全部楼层
我会把1024 bit 分成 32x32 来计算。
sof , data (1024 bit) , parity x (32bit) , parity y (32bit) , crc
[d0]....[d31] get parity x.0
[d32]...[d63] get parity x.1
..
..
..
[d992] .. [d1023] get parity x.31
parity y.0 .....parity y.31
这样, 如果之后 x 的parity 不一样,然后再找 y 那个不一样, 那么就能算到哪一个点有问题。
一个bit 应该没有问题瓜。。。 |
|
|
|
|
|
|
|
楼主 |
发表于 22-12-2009 09:55 PM
|
显示全部楼层
回复 29# fritlizt
传统的修复方法是基于 probability, 最容易的方法是在一个1024 bits 的 frame 里重复发送 4 组相同的 256bits data , 接收器只需对比每组data里的 bit1,2,3...256,他应该可以拿到资料的,只不过浪费宽频罢了。。。
例子
data1=data2=data3=data4
data1: 1011100011001100......
data2: 1001100011001100......
data3: 1011100100001100......
data4: 0111011011001100......
基于75%正确来判断,你是否可以猜到“修复”后的data?
之前有网友说不断的传送资料直到接收器收到为止,我问他万一全部资料都错误呢。。。如果哪位网友可以跳出框框,它也可以使用上述方法,
data4 = data 3
data3 = data 2
data 2= data 1
data 1 = received data(1024 bits)
这也是运用”记忆“来降低杂讯的基本功。。我想大家在大学时肯定学过通讯和处理,只是大家是为了考试而读,所以没能明白里头的奥秘,往后有时间我会更深入。。 |
|
|
|
|
|
|
|
楼主 |
发表于 22-12-2009 10:09 PM
|
显示全部楼层
回复 30# chan1314
其实并没有对错,只有可行和不可行,良好的correction bits也必须配合正确的方法才能成功, 举例
AAAAAAAAA 是一组 data1+correction bits
BBBBBBBBB 是一组 data2+correction bits
CCCCCCCCC 是一组 data3+correction bits
X 是不确定的 bits
如果你的传送方式是 AAAAAAAAABBBBBBBBBCCCCCCCCC, 但是因为杂讯造成接收器收到
AAXXXXXXABBBBBBBBBCCCCCCCCC,在这种情况下就算你的correction method 再好也无法还原data1, 换个角度如果你的传送方式是ABCABCABCABCABCABCABCABCABCABC(interlacing),那么你才可能还原data.
不好意思,这是小弟的愚见。。 |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 1-3-2010 07:22 PM
|
显示全部楼层
回复 32# chtan36
应该是说根据你面对的杂讯而寻找适当的处理方式,
比如A地点在time domain有个deep fade,最原始的方法是使用redundancy 来避过deep fade。
初学者的发言,请见笑 |
|
|
|
|
|
|
|
发表于 5-3-2010 04:46 PM
|
显示全部楼层
回复 32# chtan36
这个方法不错。 的确比原来的好。 |
|
|
|
|
|
|
|
发表于 5-3-2010 04:47 PM
|
显示全部楼层
回复 31# chtan36
很有兴趣这个-〉这也是运用”记忆“来降低杂讯的基本功。
楼主几时要update下啊?。
嘿嘿 |
|
|
|
|
|
|
|
发表于 3-6-2010 10:05 AM
|
显示全部楼层
最近有touch回 bch 和 convolutional coding。
之前读书的时候没发觉原来是那么强大的。。。
现在觉得它就是我的救命恩code啊!!!
摸拜下
|
|
|
|
|
|
|
|
发表于 4-6-2010 08:45 AM
|
显示全部楼层
本帖最后由 sushi-x 于 4-6-2010 08:47 AM 编辑
既然没人发表,那我写下我面对的问题。
我的area本来只是modulation scheme 和 transmission protocol,可是有一天发现 single antenna transmission的 bit error rate 实在是太高了,在和supervisor商量后,决定在simulation里加入CRC coding,让我的paper看起来好看点。。。
接下来我会利用BCH code的特点来加强我propose 的 scheme,希望可以成功
顺便做了一个简单的Matlab code CRC Bit Error Rate Comparison给大家参考,有错请插。这code 会花蛮长的时间,因为number of total sample 要达到 10^5才觉得理想- %%
- % Comparison between No CRC, BCH Code and Convolutional Code
- % Created by sushi-x@cari
- % 4th June 2010
- % No copyright
- %
- %
- clear
- clc
- close all
- fprintf(['Initialising'])
- M = 2; % QAM Modulation level
- MQammod = modem.qammod('M',M,'InputType','Bit');
- MQamdemod = modem.qamdemod('M',M,'OutputType','Bit');
- MaxSNR = 10;
- SNR = 0:2:MaxSNR;
- snum = 100; % Number of sample
- n_disp = 10; % Sample display
- NCRCBER = zeros(snum,length(SNR)); % No CRC Bit Error Rate
- BCHBER = zeros(snum,length(SNR)); % BCH code Bit Error Rate
- CONVBER = zeros(snum,length(SNR)); % Conv Code Bit Error Rate
- % BCH Code
- N = 15;
- K = 11;
- xnum = 96*50;
- % Convolutional Coding
- Clength = 7;
- CodeGen = [133 171];
- tblen = 24;
- trelliscode = poly2trellis(Clength ,CodeGen);
- for mSNR = 1:length(SNR)
- for nSamp = 1:snum
- if mod(nSamp,n_disp) ==0
- clc
- disp(['QAM Mod Level = ' , num2str(M)])
- disp(['SNR = ' , num2str(SNR(mSNR))])
- disp(['Number_of_Sample = ', num2str(nSamp)])
- end
- x_b = randi([0 1], xnum, K);
- x_BCH = bchenc(gf(x_b), N, K);
- x_CONV = convenc([reshape(x_b,1,K*xnum) zeros(1,tblen)],trelliscode);
-
- % M-QAM Modulation
- t_NCRC = modulate(MQammod,x_b);
- t_BCH = modulate(MQammod,double(x_BCH.x));
- t_CONV = modulate(MQammod,x_CONV);
- % Received Signal
- r_NCRC = awgn(t_NCRC,SNR(mSNR),'Measured');
- r_BCH = awgn(t_BCH,SNR(mSNR),'Measured');
- r_CONV = awgn(t_CONV,SNR(mSNR),'Measured');
- % Decoding
- y_NCRC = demodulate(MQamdemod,r_NCRC);
- y_BCH = bchdec(gf(demodulate(MQamdemod,r_BCH)), N, K);
- y_CONV = vitdec(demodulate(MQamdemod,r_CONV),...
- trelliscode,tblen,'cont','hard');
- % Bit Error Rate
- [nBER eBER] = biterr(x_b,y_NCRC);
- NCRCBER(nSamp,mSNR) = eBER;
- [nBER eBER] = biterr(x_b,double(y_BCH.x));
- BCHBER(nSamp,mSNR) = eBER;
- [nBER eBER] = biterr(x_b,y_CONV);
- CONVBER(nSamp,mSNR) = eBER;
- end
- end
- % Bit Error Rate Graph Plotting
- MSize = 10;
- figure()
- semilogy(SNR,sum(NCRCBER)/snum,'-s','LineWidth',2,'MarkerSize',MSize)
- hold on
- semilogy(SNR,sum(BCHBER)/snum,'-o','LineWidth',2,'MarkerSize',MSize)
- semilogy(SNR,sum(CONVBER)/snum,'-^','LineWidth',2,'MarkerSize',MSize)
- l1 = legend('No CRC', 'BCH Code', 'Conv Code')
- set(l1,'FontSize',16)
- ylabel('Bit Error Rate (BER)','FontSize',16)
- xlabel('Signal to Noise Ratio (SNR)','FontSize',16)
- title('BER Performance Comparison Between CRC','FontSize',20)
- grid on
复制代码 Simulation Result
|
|
|
|
|
|
|
|
发表于 5-7-2010 04:54 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|