C_and_CPP 板


LINE

原文吃光~~ 我的程式码如下: #include<stdlib.h> #include<stdio.h> #include<time.h> #include<math.h> //---------------------------------- #define N 100000 #define fs 10 #define ts 0.1 #define pi 3.141592653589793 #define length N*fs #define SNR_dB 12 //----------------------------------bpsk random sequence and WGN double Eb=1.0; int bpsk(double mean,double sigma) { int i,m,g; static double ak[N]={0.0}; static double sn[length]={0.0}; static double x[length]={0.0}; static double y[length]={0.0}; static double R[length]={0.0}; static double theta[length]={0.0}; static double randn[length]={0.0}; static double r[length]={0.0}; static double de_sn[length]={0.0}; int error = 0; unsigned seed; srand(time(NULL)); //----------------------------------continuous signal for(m=0;m<N;m++) { ak[m]=rand()%2*2.0-1.0; for(g=0;g<fs;g++) { sn[g+(m*fs)]=ak[m]*sqrt(2.0*Eb); } } //----------------------------------AWGN for(i=0;i<length;i++) { x[i]=rand()/32767.0; y[i]=rand()/32767.0; R[i]=sigma*sqrt(2.0*log(1.0/(1.0-x[i]))); theta[i]=2.0*pi*y[i]; randn[i]=R[i]*cos(theta[i])+mean; r[i]=sn[i]+randn[i]; if(r[i]>0) { de_sn[i]=1.000000*sqrt(2*Eb); } else { de_sn[i]=-1.00000*sqrt(2*Eb); } if(de_sn[i]!=sn[i]) { error=error+1; } else { error=error; } } return error; } //--------------------------------------------------start int main(void) { int k; double mean[SNR_dB]={0.0}; double N0[SNR_dB]={0.0}; double sigma[SNR_dB]={0.0}; double SNRdB[SNR_dB]={0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0}; double SNR[SNR_dB]={0.0}; static double ber; FILE *fp; char *filename="ber.dat"; fp=fopen(filename,"wt"); for(k=0;k<SNR_dB;k++) { SNR[k]=pow(10.0,SNRdB[k]/10.0); N0[k]=Eb/SNR[k]; sigma[k]=sqrt(N0[k]); ber=(double)bpsk(mean[k],sigma[k])/(double)(N*fs); fprintf(fp,"%f\t%d\n",ber,bpsk(mean[k],sigma[k])); } fclose(fp); return 0; } 很多写法还蛮新手的 希望别介意... 主要就是先产生不同的能量 再将能量的标准差(sigma表示)丢入bpsk副程式~ 副程式里面做的事情就是先产生乱数讯号1 and -1 乘上sqrt(2) 如果是1就产生10个sqrt(2) 负1就产生10个-sqrt(2) 再来 产生杂讯 跟讯号混在一起~ 再判断跟原讯号有无相同~ 不相同即错误+1 最後将错误丢回主程式 算错误率~ 能量SNR_dB在1~9时都OK~ 10开始就误差很大了... 希望有人能解惑罗~ 也谢谢各位看完我这新手程式码.... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.18.104.154
1F:推 Ebergies:建议你列出算式然後再尽可能最佳化 07/08 10:14
2F:→ VictorTom:老实说这code不知道怎麽简化成8/1000000还发现差很大的. 07/08 10:43
3F:→ onlywig:在存档的ber.dat里面 後面的整数代表各个数值除100万... 07/08 12:05
4F:→ onlywig:总之 先谢谢各位罗> < 07/08 12:06
5F:推 VictorTom:印double型态的时候, 改用 %lf 试试?? 07/08 13:06
6F:→ VictorTom:另外, %.15lf 也可以试试, 让它多印几位~~ 07/08 13:39
7F:→ VictorTom:虽然说那个8/1000000的数据看起来不是这个问题Orz 07/08 13:39
8F:→ onlywig:VT大 很感谢您一直帮我找问题~ 不过我想这可能就是为什麽 07/08 13:51
9F:→ onlywig:通讯系统的模拟都用MATLAB的关系吧.... 07/08 13:52
10F:→ onlywig:号外!!!!我找出问题了 原来是我程式码有bug 感动 07/08 14:35







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP