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