広告 デバイス

【不安定さ解消】PX-Q1UDの信号強度をアッテネーターで調整

※本ページには、プロモーション(広告)が含まれています。

悩んでいる人

PX-Q1UDの購入を検討しているが、動作が不安定であると聞く。

想定される問題点を解消した上で、購入を検討したいため、分かっている現象があれば教えて欲しい。

こんなお悩みを解決します。

以前、譲ってもらったPX-S1UDの調子が悪くなったため、代替商品を探していました。

調査した結果、USB接続で地デジを4チャンネル同時に録画可能なPX-Q1UDという商品を見つけました。

これよりも前に発売されたPX-S1UDが1チャンネルのみだったことを考えると、価格の割に魅力的な商品ですね。

早速購入してセットアップをしましたが、受信ができておらず、期待通りの動作をしませんでした。

今回は、動作不良の原因の特定と問題点の解消ができたため、備忘録として残しておきたいと思います。

問題点解消のためにアッテネーターというものを利用しますが、その選び方についても解説するので、同様の問題で困っている方は、ぜひ最後までご覧ください。

テレビの映像が映らない原因

テレビの映像が映らない要因として、以下の2パターンが考えられます。

  • 信号強度が不足しているため、映像を出力できない。
  • 信号強度が過剰であるため、映像を出力できない。

どちらのケースにおいても、信号強度の適正値から外れているため、映像が映らなくなっていると言えます。

テレビの映像が映らない場合の解決策は、それぞれ以下のようになります。

原因対策
信号強度が不足しているブースターにより信号を増幅させる
信号強度が過剰であるアッテネーターにより信号を減衰させる
電波強度に応じた対策

調査方針と調査結果

今回は、信号強度の不足/過剰のいずれに該当するか分からなかったため、実際の信号強度を確認し、対策することとしました。

今回の確認環境は、以下を想定します。

項目内容
OSLinux
ディストリビューションUbuntu 22.04 LTS
仮想環境Docker
確認環境

調査方針

こちらで配布されているrecpt1を改造し、必要な情報が取り出せるようにした上で、原因を調査します。

具体的な手順は、以下のようになります。

  1. 録画ツールrecpt1のうち、recpt1core.cを改造し、信号強度が確認できるようにする。
  2. 改造したrecpt1をコンパイルし、chkdvbsignalを生成する。
  3. chkdvbsignalを用いて、信号強度を確認する。

以降では、具体的なやり方を順に説明していきます。

recpt1core.cの改造

recpt1core.cの中に、calc_cnという関数が定義されています。

void
calc_cn(int fd, int type, boolean use_bell)
{
// 実装内容は省略
}

今回は、この関数を以下のように改造します。

// 【追加】結果出力用関数
static void 
get_status(struct dtv_stats stat, char **output, const char *suffix)
{
    *output[0] = '\0';

    switch (stat.scale) {
        case FE_SCALE_NOT_AVAILABLE:
            sprintf(*output, "N/A");
            break;

        case FE_SCALE_COUNTER:
            sprintf(*output, "%lld%s", stat.uvalue, suffix);
            break;

        case FE_SCALE_RELATIVE:
            sprintf(*output, "%.2lf%s", (double)stat.uvalue / 655.35, suffix);
            break;

        case FE_SCALE_DECIBEL:
            sprintf(*output, "%.5lf%s", (double)stat.svalue / 1000.0, suffix);
            break;

        default:
            break;
    }
}

void
calc_cn(int fd, int type, boolean use_bell)
{
    struct dtv_property prop[4];
    struct dtv_properties props;
    char outputs[4*32];
    char *ptr;
    int idx;
    int bell;
    double CNR;
    const char *suffixes[4] = {
        "[dB]",
        "[counts]",
        "[counts]",
        "[dBm]",
    };
    prop[0].cmd = DTV_STAT_CNR;               // CNR
    prop[1].cmd = DTV_STAT_ERROR_BLOCK_COUNT; // エラーブロック数
    prop[2].cmd = DTV_STAT_TOTAL_BLOCK_COUNT; // 全ブロック数
    prop[3].cmd = DTV_STAT_SIGNAL_STRENGTH;   // 信号強度
    props.props = prop;
    props.num = 4;

    if (ioctl(fd, FE_GET_PROPERTY, &props) < 0) {
        fprintf(stderr, "ERROR: calc_cn() ioctl(FE_GET_PROPERTY) errno=%d(%s)\n", errno, strerror(errno));
    }
    else {
        CNR = prop[0].u.st.stat[0].svalue / 1000.0;

        // get status
        for (idx = 0; idx < 4; idx++) {
            ptr = &outputs[idx*32];
            get_status(prop[idx].u.st.stat[0], &ptr, suffixes[idx]);
        }
        fprintf(stderr, "\033[2K");
        fprintf(stderr, "\rCNR: %s ErrBlocks: %s TotalBlocks: %s SIG: %s", &outputs[0*32], &outputs[1*32], &outputs[2*32], &outputs[3*32]);

        if(use_bell) {
            bell = 0;
            if(CNR >= 30.0) {
                bell = 3;
            }
            else if(CNR >= 15.0 && CNR < 30.0) {
                bell = 2;
            }
            else if(CNR < 15.0) {
                bell = 1;
            }
            do_bell(bell);
        }
    }
    return;
}

各定数の詳細は、こちらのサイトに解説があります。

コンパイル

必要なライブラリをインストールした上で、makeコマンドを用いてコンパイルを行います。

Dockerを用いてコンパイルしたので、Dockerfileもあわせて掲載します。

FROM node:16.14.0-buster-slim
# copy files
COPY ./recdvb /opt/recdvb

RUN    apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
        gcc \
        g++ \
        build-essential \
        libtool \
        autoconf \
        automake \
        cmake \
        make \
\
# recdvb
\
    && cd /opt/recdvb \
    && chmod +x autogen.sh \
    && ./autogen.sh \
    && ./configure \
    && make

ホストマシン上で実行したい場合、以下のshell scriptを参考にしてください。

#!/bin/bash

# 必要なライブラリをインストール
sudo apt-get update
sudo apt-get install -y --no-install-recommends ca-certificates gcc g++ build-essential libtool autoconf automake cmake make
# コンパイル
cd recdvb
chmod +x autogen.sh
./autogen.sh
./configure
make

信号強度の確認

Dockerを利用している方は、デバイス等を共有した上で、コンテナを起動後に以下のコマンドを実行します。

# コンパイルしたプログラムがあるところまで移動
cd /opt/recdvb
# コマンド実行
# format: ./chkdvbsignal --lnb 15 <channel number>
./chkdvbsignal --lnb 15 23

ホストマシン上で作業をしている方は、コンパイル済みのchkdvbsignalがあることを確認した上で、上記の最後のコマンドを実行します。

調査結果

今回は、電波強度を確認したいため、以下の3パターンに分けて計測しました。

項番計測方法狙い
No.1アンテナケーブルを通常通り差し込んで計測信号強度の不足/過剰を判断するため
No.2アンテナケーブルを差し込まずに計測ノイズレベルを把握するため
No.3アンテナケーブルを半刺しした状態で計測疑似的に減衰させて計測するため
計測方法と狙い

それぞれの計測結果を以下に示します。

No.1:アンテナケーブルを通常通り差し込んで計測

まず、アンテナケーブルを通常通り差し込んで計測しました。

結果は以下のようになり、CNRが0となっており、映像が映らない状態であることが分かります。

計測結果(No.1、パターン1)

また、出力が安定しておらず、エラーブロック(ErrBlocks)もカウントされていることが確認できます。

計測結果(No.1、パターン2)

No.2:アンテナケーブルを差し込まずに計測

次に、ノイズレベルを計測するため、アンテナケーブルを抜いた状態での計測しました。

信号強度が\(-82[\textrm{dBm}]\)になっており、電波強度が極めて弱いことが確認できます。

計測結果(No.2)

No.3:アンテナケーブルを半刺しした状態で計測

最後に、アンテナケーブルを半刺しした状態で計測しました。

この時の差し込み方は、以下のようになります。

接続方法

計測結果は、以下のようになりました。

計測結果(No.3)

CNRが\(22[\textrm{dB}]\)、信号強度が\(-41[\textrm{dBm}]\)となっており、エラーブロックも発生していないことから、受信状況が安定していることが確認できます。

結果をまとめると以下のようになります。

計測方法CNR電波強度(SIG)受信状況
アンテナケーブルを通常通り差し込んで計測\(0[\textrm{dB}]\)\(-24[\textrm{dBm}]\)受信できていない
アンテナケーブルを差し込まずに計測\(0[\textrm{dB}]\)\(-82[\textrm{dBm}]\)受信できていない
アンテナケーブルを半刺しした状態で計測\(22[\textrm{dB}]\)\(-41[\textrm{dBm}]\)受信できた
計測結果一覧

また、電波強度のイメージを図示すると以下のようになります。

電波強度(イメージ)

以上から、電波強度が過剰なため、映像が映らない状態となっていた、ということが分かりました。

暫定的な対策

暫定的な対策としては、実験中に示した通り、半刺しの状態で運用する、という方法があります。

半刺し(再掲)

恒久的な対策

信号を減衰するために半刺しを行いましたが、恒久的な対策としては、信号を減衰させるためアッテネーターを用いる、という方法があります。

以降では、アッテネーターの選び方と実際の取付方法について解説します。

アッテネーターの選び方

アッテネーターを選択する際は、どの位減衰させるべきかを判断した上で購入する必要があります。

今回は、信号強度(SIG)が\(-24[\textrm{dBm}]\)から\(-41[\textrm{dBm}]\)に減衰された結果、受信できる状態となりました。

よって、この変化分(dB)に相当するアッテネーターを購入すれば良いことになります。

信号強度の差分(今回の場合、約20dBとなる)

今回は、上図の計測結果から、\(20[\textrm{dB}]\)のアッテネーターを購入しました。

アッテネーターによる減衰

最後に、実際にアッテネーターを接続して計測した結果を記載します。

使用するアッテネーター

使い方は簡単で、以下のようにPX-Q1UDとアンテナケーブルの間にアッテネーターを接続します。

アッテネーターを取り付けた状態

この状態で先ほどと同様に、信号を計測した結果、以下のようになりました。

アッテネーターを接続した状態での計測結果

先程の半刺し状態と同程度の信号強度(SIG)になっており、CNRも\(22[\textrm{dB}]\)となっているため、問題ないと判断しました。

まとめ

今回は、PX-Q1UDで映像が映らない問題をアッテネーターを用いて解決する方法について解説しました。

先人が作成したプログラムをベースに要因を特定することで、適切に対処できました。

同様の問題で困っている方は、ぜひ参考にしてください。

スポンサードリンク



-デバイス
-, , ,