亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? metrics.c

?? matlab實現(xiàn)wcdma的全過程
?? C
字號:
/* | | Copyright disclaimer: |   This software was developed at the National Institute of Standards |   and Technology by employees of the Federal Government in the course |   of their official duties. Pursuant to title 17 Section 105 of the |   United States Code this software is not subject to copyright |   protection and is in the public domain. | |   We would appreciate acknowledgement if the software is used. |*//* | Project:     WCDMA simulation environment | Module:      Viterbi path metric calculation. | Author:      Tommi Makelainen, NIST | Date:        January 11, 1999 | | History: |              January 11, 1999 Tommi Makelainen |                      Initial version. | |              February 16, 1999 Tommi Makelainen |                      Corrected branch metric calculation for soft |			bits. | */#include <stdio.h>#include <stdlib.h>#include <math.h>#include "metrics.h" /* --------------------------------------------------------------- *//* * Function:    MetricTable_R1o3_Init * Desc.:       Metric table initialization for Viterbi algorithm. *		Constrain length K=9 and coding rate 1/3 are fixed. * * Note: *              'no_of_probabilities' can get max value of 8. */void MetricTable_R1o3_Init(          MetricTable* this,          enum metric_type_type metric_type,          double bit_probabilities_0[],          double bit_probabilities_1[],          int no_of_probabilities){    int i, bit;    double temp;    this->Metric_Type = metric_type;    if(metric_type == HAMMING_METRIC) {		this->Metric_Table[0][0] = 0.0;		this->Metric_Table[1][0] = -1.0;		this->Metric_Table[2][0] = -1.0;		this->Metric_Table[3][0] = -2.0;		this->Metric_Table[4][0] = -1.0;		this->Metric_Table[5][0] = -2.0;		this->Metric_Table[6][0] = -2.0;		this->Metric_Table[7][0] = -3.0;		this->Metric_Table[0][1] = -1.0;		this->Metric_Table[1][1] = 0.0;		this->Metric_Table[2][1] = -2.0;		this->Metric_Table[3][1] = -1.0;		this->Metric_Table[4][1] = -2.0;		this->Metric_Table[5][1] = -1.0;		this->Metric_Table[6][1] = -3.0;		this->Metric_Table[7][1] = -2.0;		this->Metric_Table[0][2] = -1.0;		this->Metric_Table[1][2] = -2.0;		this->Metric_Table[2][2] = 0.0;		this->Metric_Table[3][2] = -1.0;		this->Metric_Table[4][2] = -2.0;		this->Metric_Table[5][2] = -3.0;		this->Metric_Table[6][2] = -1.0;		this->Metric_Table[7][2] = -2.0;		this->Metric_Table[0][3] = -2.0;		this->Metric_Table[1][3] = -1.0;		this->Metric_Table[2][3] = -1.0;		this->Metric_Table[3][3] = 0.0;		this->Metric_Table[4][3] = -3.0;		this->Metric_Table[5][3] = -2.0;		this->Metric_Table[6][3] = -2.0;		this->Metric_Table[7][3] = -1.0;		this->Metric_Table[0][4] = -1.0;		this->Metric_Table[1][4] = -2.0;		this->Metric_Table[2][4] = -2.0;		this->Metric_Table[3][4] = -3.0;		this->Metric_Table[4][4] = 0.0;		this->Metric_Table[5][4] = -1.0;		this->Metric_Table[6][4] = -1.0;		this->Metric_Table[7][4] = -2.0;		this->Metric_Table[0][5] = -2.0;		this->Metric_Table[1][5] = -1.0;		this->Metric_Table[2][5] = -3.0;		this->Metric_Table[3][5] = -2.0;		this->Metric_Table[4][5] = -1.0;		this->Metric_Table[5][5] = 0.0;		this->Metric_Table[6][5] = -2.0;		this->Metric_Table[7][5] = -1.0;		this->Metric_Table[0][6] = -2.0;		this->Metric_Table[1][6] = -3.0;		this->Metric_Table[2][6] = -2.0;		this->Metric_Table[3][6] = -2.0;		this->Metric_Table[4][6] = -1.0;		this->Metric_Table[5][6] = -2.0;		this->Metric_Table[6][6] = 0.0;		this->Metric_Table[7][6] = -1.0;		this->Metric_Table[0][7] = -3.0;		this->Metric_Table[1][7] = -2.0;		this->Metric_Table[2][7] = -2.0;		this->Metric_Table[3][7] = -1.0;		this->Metric_Table[4][7] = -2.0;		this->Metric_Table[5][7] = -1.0;		this->Metric_Table[6][7] = -1.0;		this->Metric_Table[7][7] = 0.0;		return;    }    if (metric_type == SOFT_METRIC) {        /*         * Convert bit probabilities for soft metrics to suitable branch         * metric values.         *    branch_metric = 2 * log2( p(rx_symbol|tx_symbol) - 0.05)         * Channel can be also non-symmetric, so the probabilities for 0         * and 1 can be different.         */        for (i=0; i < no_of_probabilities; i++) {            if (bit_probabilities_0[i] < 0.1) {              this->Metric_Table[i][0] = -8.0;            } else {              this->Metric_Table[i][0] = 0 -                  floor(abs(2 * log(bit_probabilities_0[i] - 0.1 + 0.05)));            }        }        for (i=0; i < no_of_probabilities; i++) {            if (bit_probabilities_1[i] < 0.1) {              this->Metric_Table[i][1] = -8.0;            } else {              this->Metric_Table[i][1] = 0 -                  floor(abs(2 * log(bit_probabilities_1[i] - 0.1 + 0.05)));            }        }#ifdef WCDMA_DEBUG_OUTPUT        printf("\nSoft probability branch metrices: \n");        for (i=0; i < no_of_probabilities; i++) {            printf("[%d][0] = %g, [%d][1] = %g \n",                i, this->Metric_Table[i][0], i, this->Metric_Table[i][1]);        } /* for */        printf("\n");#endif /* WCDMA_DEBUG_OUTPUT */        return;    }    printf("invalid metric type passed to metric builder\n");    return;	}/* --------------------------------------------------------------- *//* * Function:    MetricTable_R1o2_Init * Desc.:       Metric table initialization for Viterbi algorithm. *		Constrain length K=9 and coding rate 1/2 are fixed. * * Note: *              'no_of_probabilities' can get max value of 8. */void MetricTable_R1o2_Init(          MetricTable* this,          enum metric_type_type metric_type,          double bit_probabilities_0[],          double bit_probabilities_1[],          int no_of_probabilities){    int i, bit;    double temp;    this->Metric_Type = metric_type;    if(metric_type == HAMMING_METRIC) {		this->Metric_Table[0][0] = 0.0;		this->Metric_Table[1][0] = -1.0;		this->Metric_Table[2][0] = -1.0;		this->Metric_Table[3][0] = -2.0;		this->Metric_Table[0][1] = -1.0;		this->Metric_Table[1][1] = 0.0;		this->Metric_Table[2][1] = -2.0;		this->Metric_Table[3][1] = -1.0;		this->Metric_Table[0][2] = -1.0;		this->Metric_Table[1][2] = -2.0;		this->Metric_Table[2][2] = 0.0;		this->Metric_Table[3][2] = -1.0;		this->Metric_Table[0][3] = -2.0;		this->Metric_Table[1][3] = -1.0;		this->Metric_Table[2][3] = -1.0;		this->Metric_Table[3][3] = 0.0;		return;    }    if (metric_type == SOFT_METRIC) {        /*         * Convert bit probabilities for soft metrics to suitable branch         * metric values.         *    branch_metric = 2 * log2( p(rx_symbol|tx_symbol) - 0.05)         * Channel can be also non-symmetric, so the probabilities for 0         * and 1 can be different.         */        for (i=0; i < no_of_probabilities; i++) {            if (bit_probabilities_0[i] < 0.1) {              this->Metric_Table[i][0] = -8.0;            } else {              this->Metric_Table[i][0] = 0 -                  floor(abs(2 * log(bit_probabilities_0[i] - 0.1 + 0.05)));            }        }        for (i=0; i < no_of_probabilities; i++) {            if (bit_probabilities_1[i] < 0.1) {              this->Metric_Table[i][1] = -8.0;            } else {              this->Metric_Table[i][1] = 0 -                  floor(abs(2 * log(bit_probabilities_1[i] - 0.1 + 0.05)));            }        }#ifdef WCDMA_DEBUG_OUTPUT        printf("\nSoft probability branch metrices: \n");        for (i=0; i < no_of_probabilities; i++) {            printf("[%d][0] = %g, [%d][1] = %g \n",                i, this->Metric_Table[i][0], i, this->Metric_Table[i][1]);        } /* for */        printf("\n");#endif /* WCDMA_DEBUG_OUTPUT */        return;    }    printf("invalid metric type passed to metric builder\n");    return;	}/* --------------------------------------------------------------- *//* * Function:    MetricTable_R1o3_SoftSymbolMetric * Desc.:       Soft metric calculation. The metric is calculated *		as an euclidean distance between tx and rx symbols. * * Note: */double MetricTable_R1o3_SoftSymbolMetric(          MetricTable* this,          int rx_symbol,          int tx_symbol) {  int rx_bit1, rx_bit2, rx_bit3, tx_bit1, tx_bit2, tx_bit3;  double metric_val;                                 /*   * Decompose rx_symbol into bits   */  rx_bit1 = (rx_symbol >> 2) & 0x1;  rx_bit2 = (rx_symbol >> 1) & 0x1;  rx_bit3 = rx_symbol & 0x1;  /*   * Decompose tx_symbol into bits     */  tx_bit1 = (tx_symbol >> 2) & 0x1;  tx_bit2 = (tx_symbol >> 1) & 0x1;  tx_bit3 = tx_symbol & 0x1;  /*   * Look up bit metrics and add them together      */  metric_val = this->Metric_Table[rx_bit1][tx_bit1] 			+ this->Metric_Table[rx_bit2][tx_bit2]                        + this->Metric_Table[rx_bit3][tx_bit3];  return(metric_val);};/* --------------------------------------------------------------- *//* * Function:    MetricTable_R1o2_SoftSymbolMetric * Desc.:       Soft metric calculation. The metric is calculated *		as an euclidean distance between tx and rx symbols. * * Note: */double MetricTable_R1o2_SoftSymbolMetric(          MetricTable* this,          int rx_symbol,          int tx_symbol) {  int rx_bit1, rx_bit2, tx_bit1, tx_bit2;  double metric_val;                                 /*   * Decompose rx_symbol into bits   */  rx_bit1 = (rx_symbol >> 1) & 0x1;  rx_bit2 = rx_symbol & 0x1;  /*   * Decompose tx_symbol into bits     */  tx_bit1 = (tx_symbol >> 1) & 0x1;  tx_bit2 = tx_symbol & 0x1;  /*   * Look up bit metrics and add them together      */  metric_val = this->Metric_Table[rx_bit1][tx_bit1] 			+ this->Metric_Table[rx_bit2][tx_bit2];  return(metric_val);};/* --------------------------------------------------------------- *//* * Function:    MetricTable_R1o2_GetBranchMetric * Desc.:       Returns a branch metric value for a given tx and rx *		symbols. * * Note: */double MetricTable_R1o2_GetBranchMetric(          MetricTable* this,          int rx_symbol,          double soft_metric,          int tx_symbol) {  if(this->Metric_Type == SOFT_METRIC) {        return( /* soft_metric * */            MetricTable_R1o2_SoftSymbolMetric(this, rx_symbol, tx_symbol) );  } else {						return(this->Metric_Table[rx_symbol][tx_symbol]);  }};  /* --------------------------------------------------------------- *//* * Function:    MetricTable_R1o3_GetBranchMetric * Desc.:       Returns a branch metric value for a given tx and rx *		symbols. * * Note: */double MetricTable_R1o3_GetBranchMetric(          MetricTable* this,          int rx_symbol,          double soft_metric,          int tx_symbol) {  if(this->Metric_Type == SOFT_METRIC) {        return( /* soft_metric * */            MetricTable_R1o3_SoftSymbolMetric(this, rx_symbol, tx_symbol) );  } else {						return(this->Metric_Table[rx_symbol][tx_symbol]);  }};  /* --------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情综合色播五月| 一区二区三区高清| 国产精品一区二区91| 久久久一区二区三区| 国产精品综合av一区二区国产馆| 久久亚洲春色中文字幕久久久| 国产精品一区二区久激情瑜伽| 国产精品久久久久一区| 日本黄色一区二区| 日韩国产欧美三级| 久久久久久久久久看片| 99久久99久久免费精品蜜臀| 亚洲精品美腿丝袜| 欧美一级在线视频| 成人永久aaa| 亚洲综合色自拍一区| 欧美一区二区视频在线观看| 国产精品亚洲人在线观看| 亚洲青青青在线视频| 欧美日韩高清影院| 国产91精品在线观看| 夜夜揉揉日日人人青青一国产精品| 91.com视频| av激情亚洲男人天堂| 丝袜美腿成人在线| 亚洲国产电影在线观看| 欧美日韩国产大片| 成人av在线播放网站| 日本伊人精品一区二区三区观看方式| 亚洲精品一区二区三区在线观看| 99久久99久久免费精品蜜臀| 麻豆视频一区二区| 亚洲欧美一区二区不卡| 欧美成人r级一区二区三区| 不卡电影一区二区三区| 日本在线观看不卡视频| 亚洲男人的天堂av| 久久蜜桃一区二区| 欧美男男青年gay1069videost| 丰满少妇久久久久久久| 免费成人美女在线观看| 日韩美女久久久| 久久精品免费在线观看| 91精品免费观看| 91亚洲大成网污www| 国产一区二区精品久久| 天堂蜜桃91精品| 亚洲精品成人悠悠色影视| 久久婷婷色综合| 欧美日韩三级在线| 97成人超碰视| 国产乱妇无码大片在线观看| 日韩精品电影一区亚洲| 亚洲国产精品一区二区久久恐怖片| 国产欧美一区二区在线| 欧美精品一区二区三区很污很色的| 欧美日韩一二区| 欧美在线观看一区二区| 色先锋资源久久综合| 成人精品亚洲人成在线| 国产一区二区三区免费播放| 久久狠狠亚洲综合| 日本人妖一区二区| 日本美女视频一区二区| 午夜精品视频一区| 亚洲福利视频三区| 午夜精彩视频在线观看不卡| 亚洲综合丝袜美腿| 亚洲一区二区视频在线观看| 亚洲日本护士毛茸茸| 亚洲色图一区二区| 亚洲精品视频免费看| 亚洲欧洲精品成人久久奇米网| 久久精品亚洲一区二区三区浴池 | 日韩女同互慰一区二区| 欧美色大人视频| 欧美日韩一区二区在线视频| 欧美在线色视频| 欧美理论在线播放| 欧美一区日本一区韩国一区| 日韩一区二区在线观看视频播放| 91.com视频| 日韩亚洲欧美在线| 久久婷婷久久一区二区三区| 国产欧美一区二区在线| 中文字幕日韩精品一区| 亚洲精品国产一区二区精华液 | 国产精品第一页第二页第三页| 国产拍揄自揄精品视频麻豆| 国产精品乱人伦| 亚洲特黄一级片| 亚洲在线视频网站| 日韩一区欧美二区| 国产麻豆精品95视频| 风间由美中文字幕在线看视频国产欧美| 国产成人精品免费视频网站| 97国产一区二区| 欧美日韩国产电影| 精品国产精品网麻豆系列| 国产日产欧产精品推荐色| 亚洲欧洲另类国产综合| 亚洲国产一区视频| 精品一区二区三区免费毛片爱 | 久久爱www久久做| 国产成人午夜片在线观看高清观看| youjizz国产精品| 欧美日韩一区不卡| 久久精品这里都是精品| 亚洲三级理论片| 奇米综合一区二区三区精品视频| 国产精品99久久久| 在线视频国内自拍亚洲视频| 日韩欧美国产一区在线观看| 国产精品久久久久久久午夜片| 午夜激情综合网| 成人激情图片网| 6080国产精品一区二区| 国产拍揄自揄精品视频麻豆| 亚洲高清免费在线| 国产成人精品免费| 6080日韩午夜伦伦午夜伦| 国产精品网曝门| 人人狠狠综合久久亚洲| 91在线porny国产在线看| 欧美一区二区免费视频| 国产精品久久久久一区| 蓝色福利精品导航| 欧美系列日韩一区| 国产网红主播福利一区二区| 视频一区中文字幕国产| 成人av网站免费| 久久综合久久综合久久| 亚洲成人精品在线观看| av电影天堂一区二区在线| 欧美精品一区二区三区视频| 亚洲 欧美综合在线网络| 91免费视频网址| 国产欧美1区2区3区| 美女视频网站黄色亚洲| 欧美日韩卡一卡二| 亚洲欧美韩国综合色| 懂色av中文一区二区三区| 欧美r级电影在线观看| 偷拍日韩校园综合在线| 欧美中文字幕一区| 亚洲乱码国产乱码精品精小说| 国产成人亚洲综合色影视| 欧美videofree性高清杂交| 丝袜美腿一区二区三区| 欧美性大战久久| 亚洲一区二区欧美日韩| 色婷婷久久久综合中文字幕| ㊣最新国产の精品bt伙计久久| 国产一区二区精品久久99| 欧美va亚洲va国产综合| 美腿丝袜在线亚洲一区| 日韩一区二区三区四区| 蜜臀av一级做a爰片久久| 欧美一区二区三区视频| 免费观看一级欧美片| 欧美一区二区三区四区在线观看 | 亚洲精品国产无套在线观| 成人av电影在线网| 综合久久久久综合| 色老综合老女人久久久| 亚洲精品日韩综合观看成人91| 91麻豆免费看| 亚洲视频小说图片| 色综合久久中文字幕| 亚洲永久精品大片| 欧美色欧美亚洲另类二区| 午夜成人在线视频| 日韩美女主播在线视频一区二区三区| 日韩精品亚洲一区| 精品国产自在久精品国产| 久久国产剧场电影| 久久久精品tv| 成人综合婷婷国产精品久久 | 国产日韩欧美激情| 成人app在线| 亚洲一区二区三区自拍| 在线综合视频播放| 国产一区二区电影| 国产精品国产三级国产aⅴ入口 | 这里只有精品视频在线观看| 蜜臀av国产精品久久久久| 欧美不卡123| 国产传媒日韩欧美成人| 1024亚洲合集| 欧美日本视频在线| 韩国三级中文字幕hd久久精品| 国产精品你懂的| 欧美人伦禁忌dvd放荡欲情| 久久不见久久见免费视频7| 中文字幕国产精品一区二区| 色域天天综合网| 麻豆久久久久久| 最新成人av在线| 日韩欧美中文字幕制服| 成人午夜伦理影院|