Replies: 6 comments 32 replies
-
오 거의다 하셨군요! std::tie(source, expectedCodeLength) = GetParam();
HexVector hexVector = ASCIICharset().encode(source);
auto *packet = new Packet(BaseType::BASE2, hexVector);
auto modulateASK = ask->modulate(packet->toString());
EXPECT_EQ(modulateASK.size(), expectedCodeLength); 작성하신 코드에서 packet을 통해 예상하는 결과 값은? https://github.com/euphony-io/euphony/blob/master/euphony/src/main/cpp/tests/base2Test.cpp 위 2개의 유닛테스트 결과값을 통해 유추할 수 있을 것 같아요! |
Beta Was this translation helpful? Give feedback.
-
와 많은 진전이 있었네요! 저도 한번 코드를 적용해보겠습니다! 👍 |
Beta Was this translation helpful? Give feedback.
-
감사합니다! std::tie(source, expectedCodeLength) = GetParam();
HexVector hexVector = ASCIICharset().encode(source);
auto *packet = new Packet(BaseType::BASE2, hexVector);
auto modulateASK = ask->modulate(packet->toString());
EXPECT_EQ(modulateASK.size(), expectedCodeLength); 이 부분을 보면 "0"는 ascii로 0x30 입니다. PacketErrorDetector.cpp을 살펴보면 checksum과 parity는 각각 4비트입니다. INSTANTIATE_TEST_CASE_P(
ASKTestSuite,
ASKTestFixture,
::testing::Values(
TestParamType("0", 17)
)); 이렇게 만들어보면 어떨까 싶습니다. |
Beta Was this translation helpful? Give feedback.
-
@kuro11pow2 INSTANTIATE_TEST_CASE_P(
ASKTestSuite,
ASKTestFixture,
::testing::Values(
TestParamType("0", 17),
TestParamType("a", 17),
TestParamType("00", 25),
TestParamType("abcdefghijklmnopqrstuvwxyz", 217),
TestParamType("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", 425),
TestParamType("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", 633),
TestParamType("!", 17),
TestParamType("ㄱ", 17),
TestParamType("가", 17),
TestParamType("각", 17),
TestParamType("깎", 17)
)
); |
Beta Was this translation helpful? Give feedback.
-
혹시 아래 코드에서 "S"를 어떻게 복원하시는지 설명해주실 수 있을까요? FSK.cpp shared_ptr<Packet> FSK::demodulate(const WaveList& waveList) {
HexVector hexVector = HexVector(waveList.size());
for(const auto& wave : waveList) {
auto vectorInt16Source = wave->getInt16Source();
int16_t* int16Source = &vectorInt16Source[0];
float *resultBuf = fftModel->makeSpectrum(int16Source);
hexVector.pushBack(getMaxIdxFromSource(resultBuf));
}
return std::make_shared<Packet>(hexVector);
}
std::shared_ptr<Packet> FSK::demodulate(const float *source, int sourceLength, int bufferSize) {
int dataSize = sourceLength / bufferSize;
HexVector hexVector = HexVector(dataSize);
WaveList waveList;
for(int i = 0; i < dataSize; i++) {
waveList.push_back(std::make_shared<Wave>(source + (i * bufferSize), bufferSize));
}
return demodulate(waveList);
} |
Beta Was this translation helpful? Give feedback.
-
고생 많으셨습니다! |
Beta Was this translation helpful? Give feedback.
-
혼자서 최대한 짜보고 성호님과도 상의를 해봤는데 c++을 모르는 사람들끼리 완벽하게 해내기에는 한계가 있는거같아 디스커션을 올립니다 🥲
평가 기간이 하루도 남지 않은 시간인데 끙끙대다가 뒤늦게 올려서 도움 주시는 멘토님들, 멘티분들께 정말 죄송스럽네요.. 😭
제가 짠 ASK 관련 코드를 리뷰해주시면 정말 감사할 것 같습니다!!
ASK.h
모뎀 인터페이스를 상속받아서 다음과 같은 메서드들로 구성해보았습니다.
ASK.cpp
demodulate는 아직 구현하지 않았고 FSK 코드를 임의로 붙여넣은 것이므로 무시해주세요!
demodulate는 제가 생각한 modulate 방식의 반대로 구현하려고 하는데 혹시 좋은 방법이 있다면 조언 부탁드립니다!! 🥺
지웅 멘토님께서 구현에 관한 조언을 해주셨는데 이것도 참고하면 좋을 것 같습니다!
modulate 코드에서 0과 1을 표현하려면
vibratesAt
값에 무엇을 넣어줘야 적절할지 확실하지 않는데, 이부분도 같이 고민해주시면 좋을 것 같아요!ASKTest.cpp
우선 테스트코드는 작성해보았는데 modulate를 검증하려면 테스트 케이스를 어떻게 작성해서 확인해야할지 모르겠습니다.. 😿
제가 원하는 결과는 "modulate로 변환한 값과 param에 입력한 값이 같다" 인데요.
expectedCodeLength
랑 같지 않는 이유는modulateASK.size()
의 값이 패킷까지 포함해서 나와서 사이즈가 길다는 추측입니다..이걸 빌드해봤더니 모두 fail이 나오더라고요.. 여기서 어떻게 고쳐야 좋을지 막막해서 일단 그대로 올려봅니다
이 외에도 빌드를 위해서는 여러가지 파일을 건드려야 합니다!! 이것도 추가로 올리는게 좋을 것 같아서 부가적으로 설명 추가합니다!
Definitions.h
유포니에서 쓰이는 글로벌 상수들 중 ModulationType(36 line)에 ASK 주석처리 해제하고 다음과 같이 추가해주세요.
ModemFactory.h
모뎀 팩토리에 ASK를 추가해주세요.
CMakeLists
cpp/tests/CMakeLists.txt
11 line의 add_executable 함수에 ASK Test 파일을 추가해줍니다.
add_executable( ${TEST_EUPHONY} ASKTest.cpp ...
cpp/CMakeLists.txt
24 line의 유포니 소스코드를 세팅하는 명령어에 ASK 파일을 추가해줍니다.
set(EUPHONY_SRC arms/kiss_fft.c arms/kiss_fftr.c core/source/AudioStreamCallback.cpp core/source/ASCIICharset.cpp core/source/ASK.cpp ...
코드를 보고 질문이나 조언, 해주고 싶은 말이 있다면 정말 자유롭게 코멘트 달아주시면 감사하겠습니다!!
Beta Was this translation helpful? Give feedback.
All reactions