nrzi 信号解码在 python 中的实现 - 有什么问题吗?

问题描述 投票:0回答:1

解决简单的 nrzi python 解码问题。 0 位表示没有发生变化,1 位表示数字信号序列发生变化。

"_": low signal
'¯': high signal
"|": pipe signal( pipe  leads to change of signal and itself pipe is not recorded)

给定输入:_ |  ̄ | _ _ _ | ́ | _| ́ ́ ́

输出:011000110100

我的代码:

def nrzi(signal: str) -> str:
    res = ''
    prev = '_'  

    for i in range(len(signal)):
        cur = signal[i]
        prev = signal[i-1]
        #signal same as prev - no change
        if (prev == cur == '_') or (prev == cur == '¯'):
            res += '0'
        #signal changed cuz prev is pipe
        elif prev == '|' and cur == '_':
            res += '0'
        elif prev == '|' and cur == '¯':
            res += '1'
                          
    return ''.join(res)

signal = "_|¯|____|¯|__|¯¯¯"

result = nrzi(signal)
print(result)

它产生

10000100100 与正确 011000110100

怎么了?

python implementation
1个回答
0
投票

您的代码中有两个问题

第一: 第一次循环 for 循环时,您将得到最后的结果

signal[i-1]
第二: 你是 if 语句吗

elif prev == '|' and cur == '_':
            res += '1'

代码现在看起来像这样并输出:

011000110100
:

def nrzi(signal: str) -> str:
    res = ''
    prev = '_'

    for i in range(len(signal)):
        cur = signal[i]
        prev = [signal[i],signal[i-1]][i>=1]

        #signal same as prev - no change
        if (prev == cur == '_') or (prev == cur == '¯'):
           res += '0'
        #signal changed cuz prev is pipe
        elif prev == '|' and cur == '_':
           res += '1'
        elif prev == '|' and cur == '¯':
           res += '1'


    return ''.join(res)

signal = "_|¯|____|¯|__|¯¯¯"

result = nrzi(signal)
print(result)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.