Thông báo

Collapse
No announcement yet.

Vấn đề kĩ thuật xử lí nhiễu trong chuyển đổi tái tạo sóng sin.

Collapse
X
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Vấn đề kĩ thuật xử lí nhiễu trong chuyển đổi tái tạo sóng sin.

    Để cắt nhiễu trong lấy mẫu sóng sine , mình nghe nói đến từ DITHER. Mình tìm thì toàn tiếng anh đọc hoài cũng chưa hiểu vì trình độ tiếng anh thấp. Đại khái chỉ hiểu sơ sơ là làm tròn các giá trị mẫu gần với điểm biên độ chia trước. Các bác Việt Nam mình choiư audio cũng nhiều mà hầu như ko thấy đề cập đến tư dithering này. Ko biết diễn đàn có cao thủ nào về vấn đèe này chỉ giáo cho mình ít. Định làm cái class d voiứ atmega nhưng chưa biết cách dithering tín hiệu.!

  • #2
    Ko có bác nào chỉ giáo cho nhỉ?

    Comment


    • #3
      Đây là đoạn code của một người nước ngoài, nó code trên trình khác codevision nên phần dither mà mình chưa hiểu được. Mong có bác nào phân tích giúp.
      Code:
      #include <avr/interrupt.h>
      #include <avr/sleep.h>
      #include <stdint.h>
      
      typedef uint32_t u32;
      typedef uint16_t u16;
      typedef uint8_t u8;
      typedef int32_t s32;
      typedef int16_t s16;
      typedef int8_t s8;
      
      #define DACP OCR0A
      #define DACN OCR0B
      
      __attribute__((naked)) int main(void)
      {
      // CLKPR = 0b10000000; // 16 MHz from the high freq PLL clock
      // CLKPR = 0b00000000;
      // Configure ports
      
      DDRB = 0b11110111; // OC0AB are L/R PWM output. Drive unused pins low (helps noise).
      PORTB = 0b00000000; // No activate pull-ups
      // DDRB = 0b00000011;
      
      // ADC
      ADMUX = 0b00010011; // PB3, AVcc, 10 bit, 2.56VRef
      ADCSRA = 0b11001101; // CPU/32 sampling rate; Sampling freq: 16 MHz / 32 / 13 = 39 kHz
      
      // Power reduction
      PRR = 0b00001010; // Clock-gate USI and Counter1.
      MCUCR = 0b00100000;
      
      
      // PWM
      TCCR0A = 0b10100011; // Fast PWM
      TCCR0B = 0b00000001; // Increment TCNT0 at CPU; Sampling freq: 16MHz / 256 = 64 kHz (= MAX)
      //TIMSK = 0b10; // Interrupt on overflow
      
      sei();
      
      while(1) {
      sleep_cpu();
      }
      }
      
      #if 0
      
      inline s16 min(s16 a, s16 b) {
      return (a<b)?a:b;
      }
      
      inline s16 max(s16 a, s16 b) {
      return (a>b)?a:b;
      }
      
      // 0% duty cycle at idle. Pulses too narrow at low volume.
      ISR(ADC_vect) {
      static u8 last_error;
      
      u16 adc = ADC;
      
      s16 val = (s16)(adc >> 1) - 256;
      
      u8 error = adc & 1;
      u8 dither = error & last_error;
      
      last_error = error - dither;
      
      val += dither;
      val = min(max(val, -255),255);
      
      DACN = max(val, 0);
      DACP = max(-val, 0);
      }
      
      #else
      // 50% duty cycle at idle. Slightly less efficient, but better sounding.
      ISR(ADC_vect) {
      //ISR(TIMER0_OVF_vect) {
      static u8 last_error;
      
      u16 adc = ADC;
      s8 val1 = (u8)(adc >> 2) - 128;
      u8 val2 = (u8)(adc & 0b10) >> 1;
      u8 error = adc & 1;
      u8 dither = error & last_error;
      last_error = error - dither;
      
      u8 pos = 128 + val1 + val2;
      u8 neg = 128 - val1 - dither;
      
      DACP = pos;
      DACN = neg;
      
      if(val1 == 127)
      DACP = 255;
      
      if(val1 == -128)
      DACN = 255;
      
      }
      
      #endif
      Và đây là link nó làm.
      http://rdimitrov.twistedsanity.net/b...0D%20Amplifier

      Comment


      • #4
        Dither mô tả nôm na là trộn thêm một ít nhiễu (ồn xám) và tín hiệu có sẵn. Mặc dù việc này có thể làm tăng lượng nhiễu tổng lên một chút, nhưng theo một cách nào đó nó làm cho tín hiệu trở nên "thân thiện" với giác quan của người, Thường áp dụng trong việc xử lý ảnh và âm thanh. Ảnh sau khi dithering thì "dễ coi" hơn. Âm thanh sau khi dithering thì "dễ nghe" hơn.
        Phần mềm tự do hoặc không dùng máy tính nữa !.

        Comment


        • #5
          Vấn là thế nhưng bác chỉ luôn cách nó thêm nhiễu bằng cách nào, bác có thể nói ra thuật toán dithering này được không vậy.? thanks.

          Comment


          • #6
            Thôi đùng làm nữa . Cái này bán đầy chợ trời . Giá có hơn trăm ngàn . Mua về mà ngâm cứu .
            Tôi không biết cái mô tê gì về lập trình . Nhưng mà cái sampling thaaos hơn 44Khz chỉ để điều khiển mô tơ quay thuận nghịch thì được . Chứ để nghe thì chịu khó sampling cao hơn 500Khz .
            Mấy cái ampli classD của " niên doanh " . Dùng sampling tới 300Khz bị khách hàng tảy chay hết rồi .
            Chuyên làm các mạch điện tử bí hiểm và kỳ quặc .
            nguyendinhvan1968@gmail.com

            Mobil : 0903 252 168 Chỉ gọi từ 09 giờ đến 17 giờ . Từ 18 giờ ngoài vùng phủ sóng

            Comment


            • #7
              Trình độ thẩm âm của mình chỉ mức ấy nên ko cần lấy mẫu cao. Hơn nữa tự làm trải nghiệm là chính. Nhạc CD cũng chỉ lấy mẫu cở đó thôi hà.

              Comment


              • #8
                Nguyên văn bởi TP_Electro Xem bài viết
                Trình độ thẩm âm của mình chỉ mức ấy nên ko cần lấy mẫu cao. Hơn nữa tự làm trải nghiệm là chính. Nhạc CD cũng chỉ lấy mẫu cở đó thôi hà.
                Oaih !!!
                Cái đầu CD đắt hay rẻ là ở thiết kế mạch lọc analog sau tầng DAC .
                Còn ở ampli . Không làm được cái mạch lọc như thế đâu ạ . Nếu làm cái mạch lọc analog với biên độ tín hiệu +- 40 50v với dòng điện vài ampe thì ... Lắp mạch công suất analog cho nó .... vuông .
                Hehe !
                Chuyên làm các mạch điện tử bí hiểm và kỳ quặc .
                nguyendinhvan1968@gmail.com

                Mobil : 0903 252 168 Chỉ gọi từ 09 giờ đến 17 giờ . Từ 18 giờ ngoài vùng phủ sóng

                Comment

                Về tác giả

                Collapse

                TP_Electro Tìm hiểu thêm về TP_Electro

                Bài viết mới nhất

                Collapse

                Đang tải...
                X