문제

소프트웨어 위상 고정 루프(SPLL)의 실제 코드 예제를 찾을 수 있는 곳을 아는 사람이 있습니까?

1.1KHz에서 1.3KHz 사이의 PSK 변조 신호를 추적할 수 있는 SPLL이 필요합니다.Google 검색을 하면 수많은 학술 논문과 특허가 나오지만 사용할 수 있는 것은 없습니다.하드웨어 PLL에 관한 책으로 가득한 책장이 있는 대학 도서관을 방문하더라도 SPLL에 관한 책은 단 한 장밖에 없었으며 이는 실용적이기보다는 이론적인 내용이었습니다.

시간 내 줘서 고마워.

이안

도움이 되었습니까?

해결책

디지털 설계를위한 대화식 디자인 패키지입니다 (즉소프트웨어) 위상 잠금 루프 (PLL).양식을 작성하고``제출 ''버튼을 누르면 PLL이 귀하를 위해 설계됩니다.

대화형 디지털 위상 고정 루프 설계

이렇게 하면 시작할 수 있지만 정말 나중에 문제를 해결하려면 PLL 설계의 기본 사항을 충분히 이해하여 직접 구축해야 합니다. 이는 디지털 신호 처리의 영역이며 마법은 아니지만 디버깅 중에 확실히 돈을 벌 수 있습니다.

-아담

다른 팁

나는 이것이 당신을 돕기에는 너무 늦었다고 생각합니다(당신은 결국 무엇을 하게 되었나요?). 하지만 다음 사람에게는 도움이 될 수 있습니다.

다음은 제가 방금 C의 한 줄로 작성한 소프트웨어 위상 고정 루프의 예입니다. 이 내용은 여러분과 함께 노래할 것입니다.

main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);}

나는 소프트웨어의 위상 고정 루프가 까다로울 수 있지만 실제로는 매우 간단하다는 것을 확신시키기 위해 이 작은 골프 버전을 먼저 제시합니다.

stdin에서 8비트 선형 샘플을 공급하면 stdout에서 한 옥타브 더 높은 추적을 시도하는 톱니파의 8비트 샘플이 생성됩니다.초당 8000개 샘플로 중간 C 아래 B 바로 위인 250Hz 근처의 주파수를 추적합니다.Linux에서는 다음을 입력하여 이 작업을 수행할 수 있습니다. arecord | ./pll | aplay.하위 9비트 b 오실레이터(하드웨어 구현에서 VCO일 수 있음)는 입력 파형(getchar()) 위상 검출기의 출력을 생성합니다.그런 다음 해당 출력은 저역 통과 필터링되어 a 발진 주파수를 조정하는 데 사용되는 평활화된 위상 오류 신호를 생성합니다. b 밀어 a 0을 향해.구형파의 고유 주파수는 다음과 같습니다. a == 0, 는 b 매 샘플마다 16씩 증가합니다. 즉, 32개 샘플마다 512(전체 주기)씩 증가합니다.초당 8000개 샘플의 32개 샘플은 1초의 1/250이므로 고유 주파수는 250Hz입니다.

그 다음에 putchar() 의 하위 8비트를 사용합니다. b, 이는 500Hz 정도에서 톱니파를 구성하고 이를 출력 오디오 스트림으로 분출합니다.

이 간단한 예에는 몇 가지가 빠졌습니다.

  1. 아무 소용이 없어 잠금을 감지하는 방법.침묵, 소음 또는 강력한 순수 250Hz 입력 톤이 있는 경우 a는 대략 0이 되고 b는 기본 주파수에서 진동합니다.응용 프로그램에 따라 신호를 찾았는지 여부를 알고 싶을 수도 있습니다!Camenzind의 12장 제안 아날로그 칩 설계 실제 위상 검출기로부터 90° 위상이 다른 두 번째 "위상 검출기"를 공급하는 것입니다.매끄러운 출력은 이론적으로 고정한 신호의 진폭을 제공합니다.

  2. 발진기의 고유 진동수는 고정되어 있으며 쓸어내지 않는다.그만큼 캡처 범위 PLL의 경우 현재 고정되어 있지 않은 경우 진동을 감지하는 주파수 간격은 매우 좁습니다.그것은 잠금 범위, 일단 잠긴 후 신호를 따르기 위해 범위가 훨씬 더 큽니다.이 때문에 잠금을 얻을 때까지 신호를 찾을 것으로 예상되는 범위 전체에 걸쳐 PLL의 주파수를 스윕한 다음 스윕을 중지하는 것이 일반적입니다.

위의 골프 버전은 C의 소프트웨어 위상 고정 루프에 대한 훨씬 더 읽기 쉬운 예 오늘 제가 쓴 글은 잠금 감지는 수행하지만 청소는 하지 않습니다.내 넷북에 있는 Atom CPU의 PLL당 입력 샘플당 약 100 CPU 사이클이 필요합니다.

내가 당신의 상황이라면 다음과 같은 일을 할 것이라고 생각합니다. (신호 처리에 대해 나보다 더 잘 아는 사람을 찾는 것, 테스트 데이터를 생성하는 것과 같은 당연한 일은 제외하고).나는 아마도 프런트 엔드의 신호를 필터링하거나 하향 변환하지 않을 것입니다. 왜냐하면 신호의 주파수가 이미 너무 낮기 때문입니다.200Hz-400Hz 대역으로 하향 변환하는 것은 거의 필요하지 않은 것 같습니다.나는 PSK가 몇 가지 새로운 문제를 일으킬 것이라고 생각합니다. 왜냐하면 신호가 갑자기 90° 이상 위상을 이동하면 위상 잠금을 잃게 되기 때문입니다.그러나 나는 그러한 문제가 해결하기 쉬울 것이라고 생각하며, 이는 거의 가보지 않은 영역이 아닙니다.

Matlab과 Simulink가 있나요?Matlab Central에서 PLL 데모 파일을 사용할 수 있습니다. 여기.Matlab의 코드 생성 기능을 사용하면 C로 작성된 PLL로 이동할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top