解决简单的 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
怎么了?
您的代码中有两个问题
第一: 第一次循环 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)