我正在研究SUB-GHZ频率范围,以通过无线电板进行发送和接收。

c - 需要以哪种算法方式解决此问题-LMLPHP

从上表中,如果我选择Flash Channel-1作为输入,它应该将我映射到Rail Channel 16。

如果选择Flash Channel 20,它将自动将我映射到Rail Channel 1。

任何人都可以像一些示例代码一样在这里帮助我解决方法吗?

使用的语言是C。

最佳答案

由于RAIL通道和Flash通道之间似乎没有任何关系,因此您将需要一个可以按RAIL通道索引的表。

您还更新了问题,这也是对反向查找的要求。这可以通过使用辅助表将闪存映射到RAID来完成,然后(如果需要)在Raid表中查找诸如频率和单词之类的详细信息:

struct {
    int Flash;
    double freq;
    DWORD ChannelID;
    //...
} myTable[] = {     // table indexed by RAIL channel number
    {0, 0.0, 0},
    {20, 340.04, 0x0CCC0CCC},
    {25, 340.40, 0x07C707C7}
    //...
};
int getFlashFromRAIL(int RAIL)
{
    return myTable[RAIL].Flash;
}

// table of RAIL channel numbers, indexed by Flash channel number
int myTableInv[] = { 0, 16, 18 /*...*/ };

double getFreqFromFlash(int Flash) // return frequency for Flash channel number
{
    return myTable[myTableInv[Flash]].freq;
}
int getRAILFromFlash(int Flash) // return RAIL channel number for Flash channel number
{
    return myTableInv[Flash];
}


注意:由于RAIL和Flash通道号均从1开始,但是C索引来自0..n-1,因此将在每个表中添加第一个条目,以便可以使用通道号来索引数组。

编辑

根据评论中的讨论,以下是简化的解决方案:

int RAIL2Flash_table[] = {0, 20, 25, 19 /*...*/};
int Flash2RAIL_table[] = {0, 16, 18, 20 /*...*/};

int RAIL2Flash(int RAIL)
{
    return RAIL2Flash_table[RAIL];
}
int Flash2RAIL(int Flash)
{
    return Flash2RAIL_table[Flash];
}


因此,x的每个条目RAIL2Flash_table都有一个与索引RAIL对应的x通道号。因此,RAIL通道1在数组条目1中,并且具有Flash通道号20,以此类推。其他表也一样。

关于c - 需要以哪种算法方式解决此问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58237240/

10-12 23:55