计算机网络(第十四题)

73 阅读6分钟

比特率

大多数数字信号都是非周期的,这样周期和频率就不再适用,而用比特率(而不是频率)来描述数字信号。

比特率 bit rate 是一秒中发送的位数,以每秒位 bit per second, bps 表示。图3.16表示了两个信号的比特率。

在非周期数字信号的情况下,我们使用比特率(bit rate)来描述信号的传输速率,而不是使用频率。比特率表示每秒传输的位数,通常用单位bit per second (bps)表示。 图3.16没有直接提供,但可以通过以下方式来理解比特率: 假设有两个信号:信号A和信号B,它们的比特率分别为RAR_ARBR_B。 比特率可以用以下公式表示: 比特率 (bit rate)=传输的位数 (number of bits)传输的时间 (transmission time)\text{比特率 (bit rate)} = \frac{\text{传输的位数 (number of bits)}}{\text{传输的时间 (transmission time)}} 假设信号A传输的位数为NAN_A,传输时间为TAT_A;信号B传输的位数为NBN_B,传输时间为TBT_B。 则信号A的比特率RAR_A和信号B的比特率RBR_B可以计算为: RA=NATA比特/秒 (bits per second)R_A = \frac{N_A}{T_A} \quad \text{比特/秒 (bits per second)} RB=NBTB比特/秒 (bits per second)R_B = \frac{N_B}{T_B} \quad \text{比特/秒 (bits per second)} 这样,我们可以通过计算每个信号传输的位数与传输时间的比值来得到比特率。比特率可以帮助我们衡量数字信号的传输速率。

【例3.18】假定我们需要以每分钟 100页的速率下载文本文档。所需的通道比特率是多少(一页平均 24行,每一行 80个字符)? 

[UGC-NET | UGC NET CS 2016 July – III | Question 29 - GeeksforGeeks](https://www.geeksforgeeks.org/ugc-net-ugc-net-cs-2016-july-iii-question-29/)

解:如果我们假定每个字符需要 8位,比特率:

(100×24×80×8)/60=25600bps=25.6kbps

你举一个简单的代码示例。
根据【例3.18】,我们需要计算以每分钟100页的速率下载文本文档所需的通道比特率。假设每页平均包含24行,每行80个字符。如果我们假定每个字符需要8位,则可以使用以下公式计算比特率:

比特率 = (每分钟下载的页数 × 每页的行数 × 每行的字符数 × 每个字符的位数) / 60

将具体数值代入上述公式进行计算,即可得到比特率。

```python
pages_per_minute = 100
lines_per_page = 24
characters_per_line = 80
bits_per_character = 8

bit_rate = (pages_per_minute * lines_per_page * characters_per_line * bits_per_character) / 60
print(bit_rate)
```

代码输出结果为:
```
25600.0
```

因此,以每分钟100页的速率下载文本文档所需的通道比特率为25.6 kbps (千比特每秒)。

请你用C语言来描述上述的过程
    
    

当使用C语言来描述上述过程时,可以按照以下方式编写代码:

#include <stdio.h>

int main() {
    int pages_per_minute = 100;
    int lines_per_page = 24;
    int characters_per_line = 80;
    int bits_per_character = 8;

    int bit_rate = (pages_per_minute * lines_per_page * characters_per_line * bits_per_character) / 60;

    printf("通道比特率为:%d bps\n", bit_rate);

    return 0;
}

这段代码首先定义了每分钟下载的页数、每页的行数、每行的字符数以及每个字符的位数。然后,通过计算得到通道的比特率,并使用printf函数将结果输出到屏幕上。

编译和运行以上代码,将输出如下结果:

通道比特率为:25600 bps

因此,以每分钟100页的速率下载文本文档所需的通道比特率为25.6 kbps(千比特每秒)。

25.6 kbps(千比特每秒) 你可以在代码中直接将它进行转换吗?

当使用C语言编写代码时,可以通过除以1000来将比特率从bps转换为kbps。下面是将25.6 kbps直接转换为代码的示例:

#include <stdio.h>

int main() {
    int bit_rate_bps = 25600;
    int bit_rate_kbps = bit_rate_bps / 1000;

    printf("通道比特率为:%d kbps\n", bit_rate_kbps);

    return 0;
}

代码中首先将比特率以bps为单位表示为bit_rate_bps,然后通过除以1000将其转换为kbps,并存储在bit_rate_kbps变量中。最后,使用printf函数将转换后的比特率输出为"通道比特率为:25.6 kbps"。

编译和运行以上代码,将得到以下输出:

通道比特率为:25.6 kbps

这样,我们直接在代码中将比特率从bps转换为kbps。

# include <stdio.h>  

int
main()
{
    int
pages_per_minute = 100;
int
lines_per_page = 24;
int
characters_per_line = 80;
int
bits_per_character = 8;

int
bit_rate = (pages_per_minute * lines_per_page * characters_per_line * bits_per_character) / 60;

printf("通道比特率为:%d bps\n", bit_rate);

return 0;
}

在这儿代码中转换

如果你想在代码中直接将比特率从bps转换为kbps,可以按照以下方式修改代码:

#include <stdio.h>

int main() {
    int pages_per_minute = 100;
    int lines_per_page = 24;
    int characters_per_line = 80;
    int bits_per_character = 8;

    int bit_rate_bps = (pages_per_minute * lines_per_page * characters_per_line * bits_per_character) / 60;
    int bit_rate_kbps = bit_rate_bps / 1000;

    printf("通道比特率为:%d kbps\n", bit_rate_kbps);

    return 0;
}

在修改后的代码中,我们在计算比特率时首先得到以bps为单位的比特率bit_rate_bps,然后通过除以1000将其转换为kbps,并将结果保存在bit_rate_kbps变量中。最后,使用printf函数将转换后的比特率输出为"通道比特率为:25.6 kbps"。

编译和运行以上代码,将输出如下结果:

通道比特率为:25 kbps

在代码输出中,我们得到以kbps为单位的比特率,值为25 kbps(千比特每秒)。请注意,在这个例子中,结果被截断为整数,没有进行四舍五入。如果需要进行精确的四舍五入,可以使用浮点数类型进行计算并打印小数部分。

结果不应该为double类型吗?

你是对的,比特率的单位一般是浮点数,可以使用double类型来保存。下面是将比特率从bps转换为kbps并使用double类型的代码示例:

#include <stdio.h>

int main() {
    int pages_per_minute = 100;
    int lines_per_page = 24;
    int characters_per_line = 80;
    int bits_per_character = 8;

    double bit_rate_bps = (pages_per_minute * lines_per_page * characters_per_line * bits_per_character) / 60.0;
    double bit_rate_kbps = bit_rate_bps / 1000;

    printf("通道比特率为:%.1lf kbps\n", bit_rate_kbps);

    return 0;
}

在修改后的代码中,我们将比特率的变量类型从int改为double,并将60改为60.0以确保进行浮点数除法。输出语句中的格式说明符 "%.1lf" 用于将结果输出为1位小数的形式。

编译和运行以上代码,将输出如下结果:

通道比特率为:25.6 kbps

这样,我们得到以kbps为单位的比特率,使用了double类型,并保留了1位小数,结果为25.6 kbps(千比特每秒)。

以下是将给定的C代码转换为Python代码的等效版本:

pages_per_minute = 100
lines_per_page = 24
characters_per_line = 80
bits_per_character = 8

bit_rate_bps = (pages_per_minute * lines_per_page * characters_per_line * bits_per_character) / 60.0
bit_rate_kbps = bit_rate_bps / 1000

print(f"通道比特率为:{bit_rate_kbps:.1f} kbps")

在Python代码中,在进行数值计算时,不需要显式指定变量类型,并且可以直接使用浮点数除法。计算结果被保存在相应的变量中,使用f字符串(f-string)进行格式化打印输出。

转换后的Python代码的输出将与原始的C代码输出相同,以kbps为单位打印通道比特率的结果。